AWS Lambda
開発者ガイド

AWS Lambda を Amazon DynamoDB に使用する

AWS Lambda 関数を使用して、Amazon DynamoDB Streams ストリームのレコードを処理できます。DynamoDB ストリーム では、Lambda 関数を使用して、DynamoDB テーブルが更新されるたびに追加の作業を実行することができます。

Lambda は、ストリームからレコードを読み取り、ストリームレコードを含むイベントを使用して関数を同期的に呼び出します。Lambda は、バッチ単位でレコードを読み取り、関数を呼び出してバッチからレコードを処理します。

例 DynamoDB ストリーム レコードイベント

{ "Records": [ { "eventID": "1", "eventVersion": "1.0", "dynamodb": { "Keys": { "Id": { "N": "101" } }, "NewImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES", "SequenceNumber": "111", "SizeBytes": 26 }, "awsRegion": "us-west-2", "eventName": "INSERT", "eventSourceARN": eventsourcearn, "eventSource": "aws:dynamodb" }, { "eventID": "2", "eventVersion": "1.0", "dynamodb": { "OldImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "SequenceNumber": "222", "Keys": { "Id": { "N": "101" } }, "SizeBytes": 59, "NewImage": { "Message": { "S": "This item has changed" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES" }, "awsRegion": "us-west-2", "eventName": "MODIFY", "eventSourceARN": sourcearn, "eventSource": "aws:dynamodb" }

Lambda は、レコードの DynamoDB ストリーム ストリームにあるシャードを 1 秒あたり 4 回の基本レートでポーリングします。レコードが利用可能になると、Lambda は関数を呼び出し、結果を待機します。処理が成功すると、Lambda は、レコードをさらに受け取るまでポーリングを再開します。

関数がエラーを返した場合、処理が成功するか、データの有効期限が切れるまで Lambda はバッチを再試行します。この問題が解決されるまで、シャード内のデータは処理されません。コードで処理エラーを処理および記録し、保留状態のシャードや潜在的なデータ損失が発生しないようにします。

イベントソースマッピングを作成する

イベントソースマッピングを作成し、ストリームから Lambda 関数にレコードを送信するように Lambda に通知します。複数のイベントソースマッピングを作成することで、複数の Lambda 関数で同じデータを処理したり、1 つの関数で複数のストリームの項目を処理したりできます。

Lambda コンソールで DynamoDB ストリーム から読み取るように関数を設定するには、DynamoDB トリガーを作成します。

トリガーを作成するには

  1. 関数を選択します。

  2. [Designer (デザイナー)] で、トリガータイプを選択して関数にトリガーを追加します。

  3. [トリガーの設定] で、必要なオプションを設定して [追加] を選択します。

  4. [Save] を選択します。

イベントソースオプション

  • DynamoDB テーブル – レコードの読み取り元の DynamoDB テーブル。

  • バッチサイズ – 各バッチ内のシャードから読み取るレコードの数 (最大 1,000)。Lambda は、イベントの合計サイズが のペイロード制限を超えない限り、バッチ内のすべてのレコードを 1 回の呼び出しで関数に渡します。

  • 開始位置 – 新規レコードのみ、または既存のすべてのレコードを処理します。

    • 最新 – ストリームに追加された新しいレコードを処理します。

    • Trim horizon (水平トリム) – ストリーム内のすべてのレコードを処理します。

    既存のレコードを処理した後、関数に戻り、新しいレコードの処理が続行されます。

  • 有効 – イベントソースを無効にしてレコードの処理を停止します。Lambda は、処理された最新のレコードを追跡し、再度有効になるとその時点から処理を再開します。

後でイベントソース設定を管理するには、デザイナーでトリガーを選択します。

実行ロールのアクセス権限

Lambda には、DynamoDB ストリーム ストリームに関連するリソースを管理するための以下のアクセス許可が必要です。これを関数の実行ロールに追加します。

AWSLambdaDynamoDBExecutionRole 管理ポリシーには、これらのアクセス許可が含まれています。詳細については、「アクセス権限の管理: IAM ロール (実行ロール) を使用する」を参照してください。