AWS Lambda
開発者ガイド

ステップ 3: イベントソースを追加する (DynamoDB ストリームを作成し、それを Lambda 関数と関連付ける)

このセクションでは、以下の作業を行います。

  • ストリームが有効になった Amazon DynamoDB テーブルを作成します。

  • AWS Lambda でイベントソースマッピングを作成します。このイベントソースのマッピングは、DynamoDB ストリームを Lambda関数と関連付けます。このイベントソースのマッピングを作成すると、AWS Lambda はストリームのポーリングを開始します。

  • エンドツーエンドエクスペリエンスをテストします。テーブルの更新を実行すると、DynamoDB はイベントレコードをストリームに書き込みます。ストリームをポーリングしている AWS Lambda は、ストリームで新しいレコードを検出し、イベントを Lambda 関数に渡して、ユーザーに代わって関数を実行します。

    注記

    次の例では、管理者権限を持つユーザー (adminuser) が存在することを前提としています。それらの手順に従うときは、adminuser という名前のユーザーを作成します。

    自分用の IAM ユーザーを作成し、そのユーザーを管理者グループに追加するには

    1. AWS アカウント E メールアドレスとパスワードを使用して https://console.aws.amazon.com/iam/AWS アカウントのルートユーザー として IAM コンソールにサインインします。

      注記

      以下の管理者 IAM ユーザーの使用に関するベストプラクティスに従い、ルートユーザー認証情報を安全な場所に保管しておくことを強くお勧めします。ルートユーザーとしてサインインして、少数のアカウントおよびサービス管理タスクのみを実行します。

    2. コンソールのナビゲーションペインで、[Users] を選択後、[Add user] を選択します。

    3. [User name] に、Administrator と入力します。

    4. [AWS マネジメントコンソール access] の横のチェックボックスをオンにし、[Custom password] を選択して、新しいユーザーのパスワードをテキストボックスに入力します。オプションとして [Require password reset] (パスワードのリセットの強制) を選択し、ユーザーが次回サインインしたときに新しいパスワードを作成することを強制できます。

    5. [Next: Permissions] を選択します。

    6. [Set permissions ] ページで、[Add user to group] を選択します。

    7. [Create group] を選択します。

    8. [グループの作成] ダイアログボックスで、[グループ名] に「Administrators」と入力します。

    9. [ポリシーのフィルタ] で、[AWS 管理のジョブ機能] チェックボックスをオンにします。

    10. ポリシーリストで、[AdministratorAccess] のチェックボックスをオンにします。次に、[Create group] を選択します。

    11. グループのリストに戻り、新しいグループのチェックボックスをオンにします。必要に応じて [Refresh] を選択し、リスト内のグループを表示します。

    12. [Next: Review] を選択して、新しいユーザーに追加するグループメンバーシップのリストを表示します。続行する準備ができたら、[Create user] を選択します。

    この同じプロセスを繰り返して新しいグループとユーザーを作成し、AWS アカウントのリソースへのアクセス権をユーザーに付与できます。ポリシーを使用して特定の AWS リソースに対するユーザーのアクセス権限を制限する方法については、「アクセス管理」と「ポリシーの例」を参照してください。

ステップ 3.1: ストリームが有効になった DynamoDB テーブルを作成する

ストリームとともにテーブルを作成する手順に従います。

  1. AWS マネジメントコンソール にサインインし、DynamoDB コンソール (https://console.aws.amazon.com/dynamodb/) を開きます。

  2. DynamoDB コンソールで、ストリームを有効にしてテーブルを作成します。ストリームの有効化の詳細については、「DynamoDB Streams を使用したテーブルアクティビティのキャプチャ」を参照してください。

    重要

    DynamoDB テーブルは、Lambda 関数を作成したのと同じリージョンで作成する必要があります。このチュートリアルでは、米国東部(バージニア北部) リージョンであることを前提としています。さらに、テーブルと Lambda 関数の両方が、同じ AWS アカウントに属している必要があります。

  3. ストリーム ARN をメモします。次のセクションでストリームを Lambda 関数と関連付ける際に、これが必要になります。

ステップ 3.2: AWS Lambda でイベントソースを追加する

次の AWS CLI create-event-source-mapping コマンドを実行します。コマンドを実行したら、UUID を書き留めてください。この UUID は、イベントソースマッピングを削除するときなど、コマンドでイベントソースマッピングを参照する場合に必要になります。

$ aws lambda create-event-source-mapping \ --region us-east-1 \ --function-name ProcessDynamoDBStream \ --event-source DynamoDB-stream-arn \ --batch-size 100 \ --starting-position TRIM_HORIZON \ --profile adminuser

注記

これにより、指定された DynamoDB ストリームと Lambda 関数の間にマッピングが作成されます。DynamoDB ストリームを複数の Lambda 関数と関連付け、同じ Lambda 関数を複数のストリームと関連付けることができます。ただし、Lambda 関数は、共有するストリーム用に、読み取りスループットを共有します。

次のコマンドを実行して、イベントソースのマッピングのリストを取得できます。

$ aws lambda list-event-source-mappings \ --region us-east-1 \ --function-name ProcessDynamoDBStream \ --event-source DynamoDB-stream-arn \ --profile adminuser

このリストでは、作成済みのすべてのイベントソースのマッピングが返され、各マッピングに対して LastProcessingResult などが示されます。問題がある場合、このフィールドは情報メッセージを提供するために使用されます。No records processed (AWS Lambda がポーリングを開始していないか、ストリームにレコードがないことを示す) や、OK (AWS Lambda がストリームから正常にレコードを読み取り、Lambda 関数を呼び出したことを示す) など値は、問題がないことを示しています。問題がある場合は、エラーメッセージが返されます。

ステップ 3.3: セットアップのテスト

すべて完了しました。これで adminuser は次のように設定をテストできます。

  1. DynamoDB コンソールで、テーブルに項目を追加、更新、削除します。DynamoDB はストリームにこれらのアクションのレコードを書き込みます。

  2. AWS Lambda は、ストリームをポーリングし、ストリームの更新を検出すると、ストリームで見つかったイベントデータを渡して Lambda 関数を呼び出します。

  3. 関数が実行され、Amazon CloudWatch でログが作成されます。adminuser は、Amazon CloudWatch コンソールで報告されたログを確認することもできます。