Integrace API Gateway a Lambda
Úvod
Jedním z nejběžnějších případů je vytváření Rest API pomocí GW, lambda a dynamodb API. Nejčastější využití těchto API jsou webové aplikace. Infrastrukturu programujeme pomocí AWS CDK TS frameworku a pro Lambda používáme Python kód. Následující příklad ukazuje, jak vytvořit nový CDK stack s DynamoDB tabulkou, Lambda funkcí a API Gateway s integrací Lambda. Lambda funkce zapisuje data do DynamoDB tabulky a vrací odpověď do API Gateway.
Typickými zákazníky, kteří často využívají tento případ, jsou ti, kteří chtějí vytvořit Rest API pomocí AWS API Gateway a AWS Lambda. Jedná se o běžný případ použití pro zákazníky, kteří chtějí vytvořit Rest API pomocí AWS API Gateway a AWS Lambda. Například se jedná o zdravotnické společnosti, finanční služby a e-commerce společnosti.
Obsah
- Vytvoření DynamoDB tabulky
- Vytvoření Lambda funkce
- Vytvoření API Gateway s integrací Lambda
- Příklad Python kódu pro Lambda
Architektura demo stacku
Tento malý stack obsahuje DynamoDB tabulku, Lambda funkci a API Gateway s integrací Lambda. Lambda funkce zapisuje data do DynamoDB tabulky a vrací odpověď do API Gateway.
AWS CDK skript (TypeScript)
Nejprve musíme vytvořit nový CDK stack. Následující příklad ukazuje, jak vytvořit nový CDK stack s DynamoDB tabulkou, Lambda funkcí a API Gateway s integrací Lambda.
soubor stack.ts
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';
import * as apigateway from '@aws-cdk/aws-apigateway';
import * as dynamodb from '@aws-cdk/aws-dynamodb';
export class ApiLambdaStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const table = new dynamodb.Table(this, 'MyTable', {
partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});
// Definice Lambda funkce
const lambdaFunction = new lambda.Function(this, 'MyLambdaFunction', {
runtime: lambda.Runtime.PYTHON_3_12,
code: lambda.Code.fromAsset('lambda'),
handler: 'app.handler',
timeout: Duration.seconds(60),
memorySize: 256,
environment: {
TABLE_NAME: table.tableName
}
});
table.grantReadWriteData(lambdaFunction);
// Definice API Gateway s integrací Lambda
const api = new apigateway.LambdaRestApi(this, 'MyApi', {
handler: lambdaFunction,
proxy: true // Povolení proxy integrace
});
}
}
Lambda funkce (Python)
soubor app.py:
import json
import boto3
import os
def handler(event, context):
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['TABLE_NAME'])
response = table.put_item(
Item={
'pk': '1',
'data': 'Hello, world!'
}
)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}