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" }
Резюме
Поздравляю. Если вы сделали это далеко, то вы успешно …
- Легающие новое приложение CDK
- Создал таблицу dynamodb
- Создал функцию лямбда
- Создал Dynamoeeventsource для функции лямбда
AWS Безвессольные шаблоны через CDK (5 серии деталей)
Оригинал: «https://dev.to/aws-builders/how-to-trigger-an-aws-lambda-from-a-dynamodb-stream-event-d8»