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.

Dynamodb Stream s Lambda, SQS a Lambda

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!')
    }

Copyright © 2024. All rights reserved.