Рубрики
Uncategorized

Как вызвать aws lambda из dynamodb

В этом посте мы будем использовать AWS CDK для создания функции aws lambda, которые триггеры … Теги от AWS, Cloud, DevOps, Event Provied.

AWS Безвессольные шаблоны через CDK (5 серии деталей)

В этом посте мы будем использовать AWS CDK для создания функции aws lambda, которая триггеряет от событий потока dynamodb.

Весь код можно найти в этом репозитории Отказ

Настраивать

Нам нужно запустить несколько команд для настройки нашего приложения CDK.

mkdir how-to-trigger-lambda-from-ddb-stream
cd how-to-trigger-lambda-from-ddb-stream
npx cdk init app --language typescript

Это должно дать вам следующую структуру каталогов.

Также убедитесь, что у вас есть CLI AWS CLI. Для получения дополнительной информации следуйте за AWS CLI QuickStart Guide Отказ

Динамодб

Установите пакет DynamOdb CDK.

npm i @aws-cdk/aws-dynamodb

Открыть lib/how-trigger-лямбда-от ddb-stack-stack.ts Добавьте новую таблицу Dynamodb и развернуть.

import * as cdk from '@aws-cdk/core';
import * as dynamodb from '@aws-cdk/aws-dynamodb';

export class HowToTriggerLambdaFromDdbStreamStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const table = new dynamodb.Table(this, 'Table', {
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
      partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
      stream: dynamodb.StreamViewType.NEW_AND_OLD_IMAGES,
      tableName: 'Table',
    });
  }
}

npm run cdk deploy

Лямбда

Установите пакет лямбда CDK.

npm i @aws-cdk/aws-lambda

Развертывание функций лямбда требует Загрузка вашего приложения CDK Что дает нам ведро S3, где будет жить наш исходный код лямбда.

npm run cdk bootstrap

Создать SRC/index.js и вставить следующий код

exports.handler = async (event) => {
    event.Records.forEach((record) => {
        console.log('Event Id: %s', record.eventID);
        console.log('Event Id: %s', record.eventName);
        console.log('DynamoDB Record: %j', record.dynamodb);
    });
};

Открыть lib/how-trigger-лямбда-от ddb-stack-stack.ts добавьте новую функцию лямбда и развертываю.

import * as cdk from '@aws-cdk/core';
import * as dynamodb from '@aws-cdk/aws-dynamodb';
import * as lambda from '@aws-cdk/aws-lambda';

export class HowToTriggerLambdaFromDdbStreamStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const table = new dynamodb.Table(this, 'Table', {
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
      partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
      tableName: 'Table',
    });

    const lambdaFunction = new lambda.Function(this, 'Function', {
      code: lambda.Code.fromAsset('src'),
      handler: 'index.handler',
      functionName: 'TableStreamHandler',
      runtime: lambda.Runtime.NODEJS_12_X,
    });
  }
}

npm run cdk deploy

Источник события

Установите пакет CDK источника событий Lambda.

npm i @aws-cdk/aws-lambda-event-sources

Открыть lib/how-trigger-лямбда-от ddb-stack-stack.ts Добавьте новую динамоналивку для функции лямбда.

import * as cdk from '@aws-cdk/core';
import * as dynamodb from '@aws-cdk/aws-dynamodb';
import * as lambda from '@aws-cdk/aws-lambda';
import { DynamoEventSource } from '@aws-cdk/aws-lambda-event-sources';

export class HowToTriggerLambdaFromDdbStreamStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const table = new dynamodb.Table(this, 'Table', {
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
      partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
      stream: dynamodb.StreamViewType.NEW_AND_OLD_IMAGES,
      tableName: 'Table',
    });

    const lambdaFunction = new lambda.Function(this, 'Function', {
      code: lambda.Code.fromAsset('src'),
      handler: 'index.handler',
      functionName: 'TableStreamHandler',
      runtime: lambda.Runtime.NODEJS_12_X,
    });

    lambdaFunction.addEventSource(new DynamoEventSource(table, {
      startingPosition: lambda.StartingPosition.LATEST,
    }));
  }
}

npm run cdk deploy

Тестирование

Используя AWS CLI, вставьте новый элемент в таблицу dynamodb.

aws dynamodb put-item \
    --table-name Table \
    --item '{
        "id": {"S": "test123"}
      }'

Убедитесь, что лямбда выполнена, глядя в cloudwatch. Найти логгруппу имена /AWS/LAMBDA/TALLESTREAMHANDLER и откройте последний логик. Вы должны увидеть некоторые сообщения журнала, которые выглядят похожи на это.

2021-05-14T19:08:55.487Z    ffba16f2-846b-4c6e-9ff5-189c3293116e    INFO    Event Id: e6db4f872fd1997f0f459bcebb8163e8
2021-05-14T19:08:55.527Z    ffba16f2-846b-4c6e-9ff5-189c3293116e    INFO    Event Id: INSERT

2021-05-14T19:08:55.527Z    ffba16f2-846b-4c6e-9ff5-189c3293116e    INFO    DynamoDB Record: {
    "ApproximateCreationDateTime": 1621019335,
    "Keys": {
        "id": {
            "S": "test123"
        }
    },
    "NewImage": {
        "id": {
            "S": "test123"
        }
    },
    "SequenceNumber": "733400000000008471956488",
    "SizeBytes": 18,
    "StreamViewType": "NEW_AND_OLD_IMAGES"
}

Резюме

Поздравляю. Если вы сделали это далеко, то вы успешно …

  1. Легающие новое приложение CDK
  2. Создал таблицу dynamodb
  3. Создал функцию лямбда
  4. Создал Dynamoeeventsource для функции лямбда

AWS Безвессольные шаблоны через CDK (5 серии деталей)

Оригинал: «https://dev.to/aws-builders/how-to-trigger-an-aws-lambda-from-a-dynamodb-stream-event-d8»