CDK で DynamoDB Stream を Lambdaのトリガーにする時の注意点
タイトルを実現するために、半日近く溶かしたので備忘録として残しておきます。
CDKの細かい説明は省きます。
正常に動作するコードがこちら
import { DynamoEventSource } from '@aws-cdk/aws-lambda-event-sources'; import * as dynamodb from '@aws-cdk/aws-dynamodb'; import * as lambda from '@aws-cdk/aws-lambda'; . . . const Table = dynamodb.Table.fromTableAttributes(...,{ // tableArn: でもOK // tableArn tablaName のどちらか片方必須 tableName: {table名}, tableStreamArn: {tableのStreamArn}' }); const Event = new DynamoEventSource(Table, { startingPosition: lambda.StartingPosition.LATEST, }); const fn = new lambda.Function(...,{ . . . events:[Event] });
別のコンストラクタのスタックとして作成したDynamoDBを取得してStreamArnを使ってイベントソースを作成するには、fromTableAttributes()
でテーブルを取得しないといけないようです。
fromTableArn()
、fromTableName()
で取得するとストリームが設定されていないですよと怒られます。
ドキュメント内を解決策は探しても見つからず結局GitHubのIssueが解決の糸口となりました...
1/26 追記
あとは// tableArn tablaName のどちらか片方必須
というのも味噌です。
公式→issue→ブログくらいの順番で探すのが良さそうですね。