DynamoDb 스트림 람다 트리거
11370 단어 lambdaawscdkdynamodbstream
과제
DynamoDb stream 이벤트를 구독하고 AWS lambda function 트리거해야 하는 일반적인 시나리오를 살펴보겠습니다. 이론과 tutorials에서 작업은 매우 간단해 보입니다.
견본:
private subscribeToDynamoDbStream(
lambdaRole: Role,
layer: LayerVersion,
applicationName: string,
targetTable: ITable) {
const lambda = new Function(this, `${applicationName}-lambda`,
{
code: Code.fromAsset('functions/custom-trigger/src'),
functionName: `${applicationName}-lambda`,
handler: handler,
layers: [layer],
role: lambdaRole,
runtime: Runtime.NODEJS_12_X,
});
lambda.addEventSource(new DynamoEventSource(targetTable, {
startingPosition: StartingPosition.TRIM_HORIZON, }));
}
이 시나리오는 single repository 의 경우 람다, dynamodb 및 dynamodb 스트림이 동일한 스택에 프로비저닝되면 잘 작동합니다.
문제
더 복잡한 레이아웃에서는 dynamodb 자체가 생성되고 해당 dynamodb 스트림이 다른 스택에 프로비저닝됩니다. dynamodb arn이 SSM parameter store 에 저장되거나 이름이 알려져 있습니다.
따라서 첫 번째 가져오기 테이블:
private importTargetTable(environment: string, tableArn: string) {
const table = Table.fromTableArn(this, 'ImportedTable', tableArn);
return table;
}
그런 다음
subscribeToDynamoDbStream
함수를 호출합니다.const importedTable = importTargetTable(this.environment, this.tableArn);
this.subscribeToDynamoDbStream(lambdaRole, layer, applicationName, importedTable);
결과는 예상하지 못했습니다:
DynamoDB Streams must be enabled on the table [tablename]
. AWS 콘솔은 Dynamodb 스트림이 활성화되었음을 명확하게 보여줍니다. 빠른 인터넷 검색은 가장 확실한 것을 권장합니다: 이미 활성화된 기능을 활성화합니다. CDKsource code 검사에 따르면 fromTableArn
호출 중에 스트림 arn이 로드되지 않았을 가능성이 큽니다.해결책
우선 DynamoDB 프로비저닝 중에 SSM으로 내보낸 DynamoDb 스트림이 있어야 합니다.
const targetTable = new Table(this, `targeTableName`, {
partitionKey: { ... },
sortKey: { ... },
...
stream: StreamViewType.NEW_AND_OLD_IMAGES,
tableName: `targetTableName`
});
// Export target table stream arn to SSM
new StringParameter(this.ctx, `targetTable-stream-arn`, {
description: "Exported stream arn",
parameterName: `/targeTable-stream-arn`,
stringValue: targetTable.tableStreamArn!
});
람다가 생성되고 dynamodb 스트림에 대한 구독이 설정된 스택에서 SSM에서
tableStreamArn
를 읽습니다.옵션 1
ITable
구성 방식 변경:private importTargetTable(environment: string, tableArn: string, tableStreamArn: string) {
const table = Table.fromTableAttributes(this, 'ImportedTable', {
tableArn: tableArn,
tableStreamArn: tableStreamArn
return table;
}
옵션 2
기술적으로 말하면 DynamoDb 스트림 트리거가 있는 AWS 람다는 DynamoDb 테이블(및 arn)을 인식할 필요가 없습니다. 옵션 2는 위의 코드를 개선한 것으로 간주할 수 있습니다. 'Invent and Simplify' .
람다가 생성되면 EventSourceMapping 객체를 사용하여 람다에 대한 DynamoDb 스트림 트리거를 활성화할 수 있습니다
tableStreamArn
.const lambda = new Function(this, ...);
new EventSourceMapping(this, `lambda-trigger-mapping`, {
eventSourceArn: tableStreamArn,
startingPosition: StartingPosition.TRIM_HORIZON,
// any necessary options of a choice, e.g. batchSize, retryAttempt, etc.
target: lambda
});
이 게시물이 CDK 학습 여정에 도움이 되기를 바랍니다.
최고의 소원..
Reference
이 문제에 관하여(DynamoDb 스트림 람다 트리거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/konsta_ivlev/dynamodb-stream-lambda-trigger-anh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)