メニュー
Amazon Cognito
開発者ガイド (Version 最終更新日: 2017 年 8 月 26 日)

Amazon Cognito イベント

Amazon Cognito イベントでは、Amazon Cognito の重要なイベントに応じて AWS Lambda 関数を実行することができます。Amazon Cognito は、データセットが同期されると、同期トリガーイベントを生成します。Sync Trigger イベントを使用して、ユーザーがデータを更新したときにアクションを実行できます。この関数は、クラウド内に保存し、ユーザーの他のデバイスに同期する前にデータを評価して、オプションで操作できます。これは、ユーザーの他のデバイスに対して同期する前に、デバイスから受信するデータを検証したり、プレーヤーが新しいレベルに達したときに賞を与えるなど、受信データに基づいてデータセットの他の値を更新する場合に役立ちます。

以下のステップでは、Amazon Cognito データセットが同期されるたびに実行される Lambda 関数の設定手順について説明します。

注記

Amazon Cognito イベントを使用する場合、Amazon Cognito ID から取得した認証情報のみを使用できます。関連付けられた Lambda 関数があっても、AWS アカウントの認証情報 (開発者の認証情報) を使用して UpdateRecords を呼び出す場合、Lambda 関数は呼び出されません。

AWS Lambda での関数の作成

Lambda を Amazon Cognito と統合するには、最初に Lambda で関数を作成する必要があります。そのためには、次の操作を行います。

Amazon Cognito での Lambda 関数の選択

  1. Lambda コンソールを開きます。

  2. [Create a Lambda function] をクリックします。

  3. [Select blueprint] 画面で、[cognito-sync-trigger] を探して選択します。

  4. [Configure event sources] 画面で、イベントのソースタイプを [ Sync Trigger] に設定し、Cognito ID プールを選択します。[Next] をクリックします。

  5. [Configure function] 画面で、関数の名前と説明を入力します。[Runtime] を「Node.js」に設定したままにします。コードは、例では変更しないまま使用します。デフォルトの例では、同期中のデータに変更を加えません。コードは、Amazon Cognito Sync Trigger イベントが発生したことのみを記録します。[Handler name] を「index.handler」に設定したままにします。[Role] ついては、AWS Lambda にアクセスするコードアクセス権限を付与する IAM ロールを選択します。ロールを変更する方法については、「IAM コンソール」を参照してください。[Advanced settings] は変更しないまま使用します。[Next] をクリックします。

  6. [Review] 画面で、詳細を確認して [Create function] をクリックします。次のページでは、新しい Lambda 関数が表示されます。

これで、Lambda で適切な関数を記述したため、この関数を、Amazon Cognito Sync Trigger イベントのハンドラーとして選択する必要があります。以下のステップで、このプロセスについて説明します。

コンソールのホームページから、次の操作を行います。

  1. Amazon Cognito イベントをセットアップする ID プールの名前をクリックします。ID プールの [Dashboard] ページが表示されます。

  2. [Dashboard] ページの右上にある、[Edit identity pool] をクリックします。[Edit identity pool] ページが表示されます。

  3. 下にスクロールし、[Cognito Events] をクリックして展開します。

  4. [Sync Trigger] ドロップダウンメニューで、Sync イベントが発生したときにトリガーする Lambda 関数を選択します。

  5. [Save Changes] をクリックします。

これで、データセットが同期されるたびに Lambda 関数が実行されます。次のセクションでは、同期中に関数のデータの読み取りと修正を行う方法について説明します。

同期トリガーの Lambda 関数の記述

同期トリガーは、サービスプロバイダーインターフェイスプログラミングのパラダイムに従います。Amazon Cognito は Lambda 関数に以下の JSON 形式の入力を提供します。

Copy
{ "version": 2, "eventType": "SyncTrigger", "region": "us-east-1", "identityPoolId": "identityPoolId", "identityId": "identityId", "datasetName": "datasetName", "datasetRecords": { "SampleKey1": { "oldValue": "oldValue1", "newValue": "newValue1", "op": "replace" }, "SampleKey2": { "oldValue": "oldValue2", "newValue": "newValue2", "op": "replace" },.. } }

Amazon Cognito では、関数の戻り値が入力と同じ形式であることが想定されています。完全な例を次に示します。

Sync Trigger イベント用の関数を記述するときの注意点をいくつか示します。

  • Lambda 関数は UpdateRecords の実行時に呼び出されると、5 秒以内に応答する必要があります。応答しない場合、Amazon Cognito Sync サービスは LambdaSocketTimeoutException 例外をスローします。このタイムアウト値を大きくすることはできません。

  • LambdaThrottledException 例外が発生する場合、同期オペレーションをやり直す必要があります (レコードの更新)。

  • Amazon Cognito は、データセットに存在するすべてのレコードを関数に提供します。

  • アプリユーザーによって更新されたレコードでは、'op' フィールドが「replace」に設定され、削除されたレコードでは、'op' フィールドが「remove」に設定されます。

  • アプリユーザーによって更新されていない場合でも、任意のレコードを変更できます。

  • datasetRecords を除くすべてのフィールドは読み取り専用であり、変更することはできません。これらのフィールドを変更すると、レコードを更新できなくなります。

  • レコードの値を変更するには、値を更新し、'op' を「replace」に設定します。

  • レコードを削除するには、'op' を remove に設定するか、null に設定します。

  • レコードを追加するには、datasetRecords 配列に新しいレコードを追加します。

  • 応答で省略されたレコードは、更新では無視されます。

サンプルの Lambda 関数

データにアクセス、変更、削除する方法を示すサンプルの Lambda 関数を次に示します。

Copy
console.log('Loading function'); exports.handler = function(event, context) { console.log(JSON.stringify(event, null, 2)); //Check for the event type if (event.eventType === 'SyncTrigger') { //Modify value for a key if('SampleKey1' in event.datasetRecords){ event.datasetRecords.SampleKey1.newValue = 'ModifyValue1'; event.datasetRecords.SampleKey1.op = 'replace'; } //Remove a key if('SampleKey2' in event.datasetRecords){ event.datasetRecords.SampleKey2.op = 'remove'; } //Add a key if(!('SampleKey3' in event.datasetRecords)){ event.datasetRecords.SampleKey3={'newValue':'ModifyValue3', 'op' : 'replace'}; } } context.done(null, event); };