

# Lambda で DynamoDB レコードを処理する
<a name="services-dynamodb-eventsourcemapping"></a>

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

別の AWS アカウント のストリームからのレコードを処理するようにイベント ソース マッピングを構成できます。詳細については[クロスアカウントのイベントソースマッピングの作成](#services-dynamodb-eventsourcemapping-cross-account)を参照してください。

DynamoDB ストリームから読み取るように関数を設定するには、「[AWSLambdaDynamoDBExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaDynamoDBExecutionRole.html)」 AWS 管理ポリシーを実行ロールにアタッチし、**[DynamoDB]** トリガーを作成します。

**アクセス許可を追加してトリガーを作成するには**

1. Lambda コンソールの[関数ページ](https://console.aws.amazon.com/lambda/home#/functions)を開きます。

1. 関数の名前を選択します。

1. **[設定]** タブを開き、次に **[アクセス権限]** をクリックします。

1. **[実行ロール]** で、実行ロールのリンクを選択します。このリンクを選択すると、IAM コンソールでロールが開きます。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/execution-role.png)

1. **[アクセス許可を追加]**、**[ポリシーをアタッチ]** の順に選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/attach-policies.png)

1. [検索] フィールドに `AWSLambdaDynamoDBExecutionRole` を入力します。実行ロールにポリシーを追加 関数が DynamoDB ストリームから読み取るために必要な許可を含む AWS 管理ポリシーです。このポリシーの詳細については、「*AWS 管理ポリシーリファレンス*」の「[AWSLambdaDynamoDBExecutionRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaDynamoDBExecutionRole.html)」を参照してください。

1. Lambda コンソールの関数に戻ります。**[関数の概要]** で **[トリガーを追加]** をクリックします。  
![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/add-trigger.png)

1. トリガーのタイプを選択します。

1. 必須のオプションを設定し、[**Add**] (追加) を選択します。

Lambda は、DynamoDB イベントソースの次のオプションをサポートしています。

**イベントソースオプション**
+ **DynamoDB テーブル** - レコードの読み取り元の DynamoDB テーブル。
+ **バッチサイズ** - 各バッチで関数に送信されるレコードの数。最大 10,000。Lambda は、イベントの合計サイズが同期呼び出しの[ペイロード上限](gettingstarted-limits.md) (6 MB) を超えない限り、バッチ内のすべてのレコードを単一の呼び出しで関数に渡します。
+ **バッチウィンドウ** - 関数を呼び出す前にレコードを収集する最大時間（秒数）を指定します。
+ **開始位置** - 新規レコードのみ、または既存のすべてのレコードを処理します。
  + **最新** - ストリームに追加された新しいレコードを処理します。
  + **水平トリム** - ストリーム内のすべてのレコードを処理します。

  既存のレコードを処理した後、関数に戻り、新しいレコードの処理が続行されます。
+ **[障害発生時の宛先]** — 処理できないレコードの標準 SQS キューまたは標準 SNS トピックです。Lambda は、古すぎる、または再試行回数の上限に達したレコードのバッチを廃棄すると、バッチに関する詳細をキューまたはトピックに送信します。
+ **再試行回数** - 関数がエラーを返したときに Lambda が再試行する回数の上限です。これは、バッチが関数に到達しなかったサービスエラーやスロットルには適用されません。
+ **レコードの最大有効期間** — Lambda が関数に送信するレコードの最大経過時間。
+ **エラー発生時のバッチ分割** — 関数がエラーを返した場合、再試行する前にバッチを 2 つに分割します。元のバッチサイズ設定は変更されません。
+ **シャードごとの同時バッチ** — 同じシャードからの複数のバッチを同時に処理します。
+ **有効** - イベントソースマッピングを有効にするには、true に設定します。レコードの処理を停止するには、false に設定します。Lambda は、処理された最新のレコードを追跡し、マッピングが再度有効になるとその時点から処理を再開します。

**注記**  
DynamoDB トリガーの一部として Lambda によって呼び出される GetRecords API コールに対しては、料金は発生しません。

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

## クロスアカウントのイベントソースマッピングの作成
<a name="services-dynamodb-eventsourcemapping-cross-account"></a>

Amazon DynamoDB は、[リソースベースのポリシー](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html)をサポートするようになりました。この機能を使用すると、別のアカウントの Lambda 関数を使用して、DynamoDB ストリームからのデータを 1 つの AWS アカウント で処理できます。

別の AWS アカウント の DynamoDB ストリームを使用して Lambda 関数のイベントソースマッピングを作成するには、リソースベースのポリシーを使用してストリームを設定し、Lambda 関数にレコードを読み取るアクセス許可を付与する必要があります。クロスアカウントアクセスを許可するようにストリームを設定する方法については、「*Amazon DynamoDB デベロッパーガイド*」の「[クロスアカウントの Lambda 関数を使用したアクセスを共有する](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-cross-account-access.html#rbac-analyze-cross-account-lambda-access)」を参照してください。

Lambda 関数に必要なアクセス許可を付与するリソースベースのポリシーでストリームを設定したら、クロスアカウントストリーム ARN を使用してイベントソースマッピングを作成します。ストリーム ARN は、クロスアカウント DynamoDB コンソールのテーブルの **[エクスポートおよびストリーム]** タブにあります。

Lambda コンソールを使用する場合は、ストリーム ARN をイベントソースマッピング作成ページの DynamoDB テーブル入力フィールドに直接貼り付けます。

 **注:** クロスリージョントリガーはサポートされていません。