

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Lambda トリガーを使用したユーザープールワークフローのカスタマイズ
<a name="cognito-user-pools-working-with-lambda-triggers"></a>

Amazon Cognito は AWS Lambda 関数と連携して、ユーザープールの認証動作を変更します。初回サインアップ前、認証完了後、およびその間のいくつかの段階で Lambda 関数を自動的に呼び出すようにユーザープールを設定できます。関数は、認証フローのデフォルトの動作を変更したり、ユーザープールやその他の AWS リソースを変更するための API リクエストを行ったり、外部システムと通信したりできます。Lambda 関数のコードはユーザー独自のものです。Amazon Cognito はイベントデータを関数に送信し、関数がデータを処理するのを待ちます。ほとんどの場合、セッションへの変更を示すレスポンスイベントが返されます。

リクエストイベントとレスポンスイベントのシステム内では、独自の認証チャレンジの導入、ユーザープールと別の ID ストア間でのユーザーの移行、メッセージのカスタマイズ、JSON ウェブトークン (JWT) の変更を行うことができます。

Lambda トリガーは、ユーザーがユーザープールでアクションを開始した後に Amazon Cognito がユーザーに配信するレスポンスをカスタマイズできます。例えば、他の方法では成功するはずのユーザーによるサインインを禁止できます。また、 AWS 環境、外部 API、データベース、または ID ストアに対してランタイムオペレーションを実行することもできます。例えば、ユーザー移行のトリガーでは、外部アクションと Amazon Cognito の変更を組み合わせることができます。つまり、外部ディレクトリでユーザー情報を検索し、その外部情報に基づいて新しいユーザーに属性を設定できます。

Lambda トリガーをユーザープールに割り当てると、Amazon Cognito はデフォルトのフローを中断して関数から情報をリクエストします。Amazon Cognito は JSON *イベント*を生成し、それを関数に渡します。イベントには、ユーザーアカウントの作成、サインイン、パスワードのリセット、または属性の更新を求めるユーザーのリクエストに関する情報が含まれます。これで、関数がアクションを実行、またはイベントを変更せずに送り返すことができます。変更されていないイベントが返されると、イベントのデフォルトのアクションを続行するようにユーザープールに通知されます。例えば、サインアップ前トリガーは、`PreSignUp_SignUp` トリガーソースのユーザーを自動的に確認しますが、外部のユーザーと管理者が作成したユーザーの場合はイベントを変更せずに返すことができます。

次の表は、Lambda トリガーを使用してユーザープールオペレーションをカスタマイズする方法をまとめたものです。


****  


- ** **カスタム認証フロー** **
  - **オペレーション:** 認証チャレンジの定義 / **説明:** カスタム認証フローでの次のチャレンジを決定する
  - **オペレーション:** 認証チャレンジの作成 / **説明:** カスタム認証フローでのチャレンジを作成する
  - **オペレーション:** 認証チャレンジレスポンスの確認 / **説明:** カスタム認証フローでのレスポンスが正しいかどうかを判断する

- ****認証イベント****
  - **オペレーション:** [認証前の Lambda トリガー](user-pool-lambda-pre-authentication.md) / **説明:** サインインリクエストを承認または拒否するカスタム検証
  - **オペレーション:** [認証後の Lambda トリガー](user-pool-lambda-post-authentication.md) / **説明:** カスタム分析用のイベントをログに記録する
  - **オペレーション:** [トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md) / **説明:** トークンの主張を強化または制限する

- ****フェデレーション****
  - **オペレーション:** [インバウンドフェデレーション Lambda トリガー](user-pool-lambda-inbound-federation.md)
  - **説明:** Amazon Cognito ユーザープールでユーザーを作成または更新する前に、フェデレーティッドユーザー属性を変換します

- ****サインアップ****
  - **オペレーション:** [サインアップ前の Lambda トリガー](user-pool-lambda-pre-sign-up.md) / **説明:** サインアップリクエストを承認または拒否するカスタム検証を実行する
  - **オペレーション:** [確認後の Lambda トリガー](user-pool-lambda-post-confirmation.md) / **説明:** カスタム分析用のカスタムウェルカムメッセージまたはイベントログ記録を作成する
  - **オペレーション:** [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) / **説明:** 既存のユーザーディレクトリからユーザープールにユーザーを移行する

- ****メッセージ****
  - **オペレーション:** [カスタムメッセージの Lambda トリガー](user-pool-lambda-custom-message.md)
  - **説明:** メッセージの高度なカスタマイズとローカライズを実行する

- ****トークンの作成****
  - **オペレーション:** [トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md)
  - **説明:** ID トークンとアクセストークンの属性を追加または削除する

- ****E メールと SMS のサードパーティープロバイダー****
  - **オペレーション:** [カスタム送信者の Lambda トリガー](user-pool-lambda-custom-sender-triggers.md)
  - **説明:** サードパーティープロバイダーを使用して SMS メッセージと E メールメッセージを送信する



**Topics**
+ [Lambda トリガーについて知っておくべきこと](#important-lambda-considerations)
+ [ユーザープールの Lambda トリガーを追加する](#triggers-working-with-lambda)
+ [ユーザープールの Lambda トリガーイベント](#cognito-user-pools-lambda-trigger-event-parameter-shared)
+ [ユーザープールの Lambda トリガーの一般的なパラメータ](#cognito-user-pools-lambda-trigger-syntax-shared)
+ [クライアントメタデータ](#working-with-lambda-trigger-client-metadata)
+ [Lambda トリガーへの API オペレーションの接続](#lambda-triggers-by-event)
+ [Lambda トリガーのユーザープールの機能オペレーションへの接続](#working-with-lambda-trigger-sources)
+ [サインアップ前の Lambda トリガー](user-pool-lambda-pre-sign-up.md)
+ [確認後の Lambda トリガー](user-pool-lambda-post-confirmation.md)
+ [認証前の Lambda トリガー](user-pool-lambda-pre-authentication.md)
+ [認証後の Lambda トリガー](user-pool-lambda-post-authentication.md)
+ [インバウンドフェデレーション Lambda トリガー](user-pool-lambda-inbound-federation.md)
+ [カスタム認証チャレンジの Lambda トリガー](user-pool-lambda-challenge.md)
+ [トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md)
+ [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md)
+ [カスタムメッセージの Lambda トリガー](user-pool-lambda-custom-message.md)
+ [カスタム送信者の Lambda トリガー](user-pool-lambda-custom-sender-triggers.md)

## Lambda トリガーについて知っておくべきこと
<a name="important-lambda-considerations"></a>

Lambda 関数用のユーザープールを準備するときは、以下の点を考慮します。
+ Amazon Cognito が Lambda トリガーに送信するイベントは、新しい機能に伴って変わる可能性があります。JSON 階層内のレスポンス要素とリクエスト要素の位置が変更されたり、要素名が追加されたりする場合があります。Lambda 関数では、このガイドで説明している入力要素のキーと値のペアを受け取ることが期待できますが、入力検証がより厳密になると、関数が失敗する可能性があります。
+ Amazon Cognito が一部のトリガーに送信する複数のバージョンのイベントから 1 つを選択できます。バージョンによっては、Amazon Cognito 料金の変更を受け入れることが必要になる場合があります。料金の詳細については、「[Amazon Cognito の料金](https://aws.amazon.com/cognito/pricing/)」を参照してください。[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md)でアクセストークンをカスタマイズするには、*ライト*以外の機能プランを使用してユーザープールを設定し、イベントバージョン 2 を使用するように Lambda トリガー設定を更新する必要があります。
+ [カスタム送信者の Lambda トリガー](user-pool-lambda-custom-sender-triggers.md)を除き、Amazon Cognito は Lambda 関数を同期的に呼び出します。Amazon Cognito が Lambda 関数を呼び出したら、5 秒以内に応答する必要があります。そうでなく、呼び出しを再試行できる場合、Amazon Cognito は呼び出しを再試行することがあります。すべての再試行が失敗すると、関数はタイムアウトします。この 5 秒のタイムアウト値を変更することはできません。詳細については、「 AWS Lambda デベロッパーガイド」の[「Lambda プログラミングモデル](https://docs.aws.amazon.com/lambda/latest/dg/foundation-progmodel.html)」を参照してください。

  Amazon Cognito は、HTTP ステータスコード 500～599 の[呼び出しエラー](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_Errors)を返す関数呼び出しを再試行しません。これらのコードは、Lambda が関数を起動できない原因となる設定の問題を示しています。詳細については、[「エラー処理と自動再試行 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html)」を参照してください。
+ Lambda トリガー設定で関数バージョンを宣言することはできません。Amazon Cognito ユーザープールは、デフォルトで最新バージョンの関数を呼び出します。ただし、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストにより、関数バージョンをエイリアスに関連付け、トリガーの `LambdaArn` をエイリアス ARN に設定できます。このオプションは、 AWS マネジメントコンソールでは使用できません。エイリアスの詳細については、「AWS Lambda デベロッパーガイド」の「[Lambda 関数のエイリアス](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)」を参照してください。**
+ Lambda トリガーを削除する場合は、ユーザープール内の対応するトリガーを更新する必要があります。例えば、認証後トリガーを削除した場合は、ユーザープール内の対応する**認証後トリガー**を [**なし**] に設定する必要があります。
+ Lambda 関数がリクエストとレスポンスのパラメータを Amazon Cognito に返さないか、エラーを返す場合、認証イベントは成功しません。関数にエラーを返して、ユーザーのサインアップ、認証、トークン生成、または Lambda トリガーを呼び出す認証フローのその他の段階を防ぐことができます。

  マネージドログインは、Lambda トリガーが生成したエラーをサインインプロンプトの上にエラーテキストとして返します。Amazon Cognito ユーザープール API は、トリガーエラーを `{{[trigger]}} failed with error {{[error text from response]}}` 形式で返します。ベストプラクティスとして、Lambda 関数では、ユーザーに表示させるエラーのみを生成します。`print()` のような出力方法を使用して、機密情報やデバッグ情報を CloudWatch ログに記録します。例については、[サインアップ前の例:ユーザー名が 5 文字未満の場合にサインアップを拒否する](user-pool-lambda-pre-sign-up.md#aws-lambda-triggers-pre-registration-example-3)を参照してください。
+ ユーザープールのトリガー AWS アカウント として、別の に Lambda 関数を追加できます。[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) API オペレーションと [UpdateUserPool](https://docs.aws.amazon.com/) API オペレーション、またはそれらに相当する CloudFormation と でクロスアカウントトリガーを追加する必要があります AWS CLI。にクロスアカウント関数を追加することはできません AWS マネジメントコンソール。
+ Amazon Cognito コンソールに Lambda トリガーを追加すると、Amazon Cognito はユーザープールが関数を呼び出すことを許可するリソースベースのポリシーを、関数に追加します。クロスアカウント関数を含む Lambda トリガーを Amazon Cognito コンソールの外部で作成する場合は、Lambda 関数のリソースベースポリシーにアクセス許可を追加する必要があります。追加したアクセス権限では、Amazon Cognito はユーザープールの代わりに関数を呼び出すことを許可する必要があります。[Lambda コンソールから権限を追加](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)、または Lambda [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) API オペレーションを使用することができます。

**Lambda リソースベースのポリシーの例**  
次の Lambda リソースベースのポリシーの例では、Lambda 関数を呼び出す Amazon Cognito の限定的な機能が付与されます。Amazon Cognito は、`aws:SourceArn` の条件でのユーザープールと `aws:SourceAccount` 条件でのアカウントの両方に代わって関数を呼び出す場合にのみ、関数を呼び出すことができます。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "default",
      "Statement": [
          {
              "Sid": "LambdaCognitoIdpTrust",
              "Effect": "Allow",
              "Principal": {
                  "Service": "cognito-idp.amazonaws.com"
              },
              "Action": "lambda:InvokeFunction",
              "Resource": "arn:{{aws}}:lambda:{{us-east-1}}:{{111122223333}}:function:{{MyFunction}}",
              "Condition": {
                  "StringEquals": {
                      "AWS:SourceAccount": "{{111122223333}}"
                  },
                  "ArnLike": {
                      "AWS:SourceArn": "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                  }
              }
          }
      ]
  }
  ```

------

## ユーザープールの Lambda トリガーを追加する
<a name="triggers-working-with-lambda"></a>

**コンソールを使用してユーザープールの Lambda トリガーを追加する**

1. [Lambda コンソール](https://console.aws.amazon.com/lambda/home)を使用して Lambda 関数を作成します。Lambda 関数の詳細については、[AWS Lambda デベロッパーガイド](https://docs.aws.amazon.com/lambda/latest/dg/)を参照してください。

1. [[Amazon Cognito console]](https://console.aws.amazon.com/cognito/home) (Amazon Cognito コンソール) に移動し、**[User Pools]** (ユーザープール) を選択します。

1. リストから既存のユーザープールを選択するか、[ユーザープールを作成](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)します。

1. **[拡張機能]** メニューを選択し、**[Lambda トリガー]** を見つけます。

1. **[Add a Lambda trigger]** (Lambda トリガーの追加) を選択します。

1. カスタマイズする認証のステージに基づいて、Lambda トリガー**カテゴリ**を選択します。

1. **Lambda 関数の割り当て**を選択し、ユーザープール AWS リージョン と同じ 内の関数を選択します。
**注記**  
 AWS Identity and Access Management (IAM) 認証情報に Lambda 関数を更新するアクセス許可がある場合、Amazon Cognito は Lambda リソースベースのポリシーを追加します。このポリシーを使用すると、Amazon Cognito は選択した関数を呼び出すことができます。サインインした認証情報に十分な IAM アクセス権限がない場合は、リソースベースのポリシーを個別に更新する必要があります。詳細については、「[Lambda トリガーについて知っておくべきこと](#important-lambda-considerations)」を参照してください。

1. **[Save changes]** (変更の保存) をクリックします。

1. Lambda コンソールで CloudWatch を使用して、Lambda 関数をログすることができます。詳細については、「[Accessing CloudWatch Logs for Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html)」を参照してください。

## ユーザープールの Lambda トリガーイベント
<a name="cognito-user-pools-lambda-trigger-event-parameter-shared"></a>

Amazon Cognito は Lambda 関数にイベント情報を渡します。Lambda 関数はレスポンスで、同じイベントオブジェクトを変更と共に Amazon Cognito に返します。関数が入力イベントを変更せずに返した場合、Amazon Cognito はデフォルトの動作を続行します。以下に示すのは、すべての Lambda トリガー入力イベントに共通するパラメータです。トリガー別のイベント構文については、このガイドのトリガー別のセクションでイベントスキーマを確認してください。

------
#### [ JSON ]

```
{
    "version": "{{string}}",
    "triggerSource": "{{string}}",
    "region": {{AWSRegion}},
    "userPoolId": "{{string}}",
    "userName": "{{string}}",
    "callerContext": 
        {
            "awsSdkVersion": "{{string}}",
            "clientId": "{{string}}"
        },
    "request":
        {
            "userAttributes": {
                "{{string}}": "{{string}}",
                ....
            }
        },
    "response": {}
}
```

------

## ユーザープールの Lambda トリガーの一般的なパラメータ
<a name="cognito-user-pools-lambda-trigger-syntax-shared"></a>

**バージョン**  
Lambda 関数のバージョン番号。

**triggerSource**  
Lambda 関数をトリガーしたイベントの名前。各 triggerSource の説明については、「[Lambda トリガーのユーザープールの機能オペレーションへの接続](#working-with-lambda-trigger-sources)」を参照してください。

**リージョン**  
`AWSRegion` インスタンス AWS リージョン としての 。

**userPoolId**  
ユーザープールの ID。

**userName**  
現在のユーザーのユーザー名。

**callerContext**  
リクエストとコード環境に関するメタデータ。これには、**[awsSdkVersion]** と **[clientId]** フィールドが含まれています。    
**awsSdkVersion**  
リクエストを生成した AWS SDK のバージョン。  
****clientId****  
ユーザープールアプリクライアントの ID。

**request**  
ユーザーの API リクエストの詳細。以下のフィールドと、トリガーに固有のリクエストパラメータが含まれます。例えば、Amazon Cognito が事前認証トリガーに送信するイベントには `userNotFound` パラメータも含まれます。ユーザーが未登録のユーザー名でサインインしようとしたときに、このパラメータの値を処理してカスタムアクションを実行できます。    
**userAttributes**  
ユーザー属性の名前と値の 1 つ以上のキーと値のペア。例: `"email": "john@example.com"`。

**response**  
このパラメータには、元のリクエストの情報は含まれていません。Lambda 関数はイベント全体を Amazon Cognito に返し、返されるパラメータは `response` に追加する必要があります。関数に含めることができる返されるパラメータを確認するには、使用するトリガーのドキュメントを参照してください。

## クライアントメタデータ
<a name="working-with-lambda-trigger-client-metadata"></a>

API オペレーションと [トークンエンドポイント](token-endpoint.md) リクエストでは、Lambda トリガー関数にカスタムパラメータを送信できます。クライアントメタデータを使用すると、アプリケーションはリクエスト元の環境に関する追加情報を収集できます。クライアントメタデータを Lambda 関数に渡すと、関数は追加のデータを処理することで、認証フローのログ記録やカスタマイズに使用できます。クライアントメタデータは、JSON 形式のキーと値の文字列ペアであり、自分で選択して作成します。

**クライアントメタデータのユースケース例**
+ サインアップ時に位置情報データを[サインアップ前トリガー](user-pool-lambda-pre-sign-up.md)に渡し、不要な場所からのサインインを防止します。
+ テナント ID データを[カスタムチャレンジトリガー](user-pool-lambda-challenge.md)に渡し、さまざまなビジネスユニットのユーザーごとに異なるチャレンジを発行します。
+ ユーザーのトークンを[トークン生成前トリガー](user-pool-lambda-pre-token-generation.md)に渡し、M2M リクエストを代行した対象のプリンシパルのログを生成します。リクエスト例については、「[基本認可によるクライアント認証情報POST 本文認可によるクライアント認証情報](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body)」を参照してください。

クライアントメタデータをサインアップ前トリガーに渡す例を以下に示します。

------
#### [ SignUp request ]

次に示すのは、[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-ValidationData) リクエストにより、Amazon Cognito がクライアントメタデータをサインアップ前トリガーに渡す例です。

```
POST HTTP/1.1
Host: cognito-idp.us-east-1.amazonaws.com
X-Amz-Date: 20230613T200059Z
Accept-Encoding: gzip, deflate, br
X-Amz-Target: AWSCognitoIdentityProviderService.SignUp
User-Agent: <UserAgentString>
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
Content-Length: <PayloadSizeBytes>

{
    "ClientId": "1example23456789",
    "Username": "mary_major",
    "Password": "<Password>",
    "SecretHash": "<Secret hash>",
    "ClientMetadata": { 
        "IpAddress" : "192.0.2.252",
        "GeoLocation" : "Netherlands (Kingdom of the) [NL]"
    }
    "UserAttributes": [
        {
            "Name": "name",
            "Value": "Mary"
        },
        {
            "Name": "email",
            "Value": "mary_major@example.com"
        },
        {
            "Name": "phone_number",
            "Value": "+12065551212"
        }
    ],
}
```

------
#### [ Lambda trigger input event ]

サインアップ前関数へのリクエストは、次のような本文になります。

```
{
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "region": "us-west-2",
    "request": {
        "clientMetadata": {
            "GeoLocation": "Netherlands (Kingdom of the) [NL]",
            "IpAddress": "192.0.2.252"
        },
        "userAttributes": {
            "email": "mary_major@example.com",
            "name": "Mary",
            "phone_number": "+12065551212"
        },
        "validationData": null
    },
    "response": {
        "autoConfirmUser": false,
        "autoVerifyEmail": false,
        "autoVerifyPhone": false
    },
    "triggerSource": "PreSignUp_SignUp",
    "userName": "mary_major2",
    "userPoolId": "us-west-2_EXAMPLE",
    "version": "1"
}
```

------

**Machine to Machine (M2M) クライアント認証情報のクライアントメタデータ**  
[クライアントメタデータ](#working-with-lambda-trigger-client-metadata)は M2M リクエストで渡すことができます。クライアントメタデータは、[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md) の結果に役立つユーザーまたはアプリケーション環境からの追加情報です。ユーザープリンシパルによる認証オペレーションでは、[AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) API リクエストおよび [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) API リクエストの本文で、クライアントメタデータをトークン生成前トリガーに渡すことができます。アプリケーションは、[トークンエンドポイント](token-endpoint.md)への直接リクエストを使用して M2M のアクセストークン生成フローを実行するため、異なるモデルとなります。クライアント認証情報のトークンリクエストの POST 本文で、クライアントメタデータオブジェクトを URL エンコード (`x-www-form-urlencoded`) した `aws_client_metadata` パラメータを文字列に渡します。リクエスト例については、「[基本認可によるクライアント認証情報POST 本文認可によるクライアント認証情報](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body)」を参照してください。次に示すのは、キーと値のペア `{"environment": "dev", "language": "en-US"}` を渡すパラメータの例です。

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

**一時的なユーザー属性: `validationData`**  
一部の認証オペレーションには `validationData` パラメータもあります。このパラメータにより、Amazon Cognito が自動的に収集しない外部情報を、クライアントメタデータと同様に、Lambda トリガーに渡すことができます。検証データフィールドは、サインアップおよびサインインオペレーションにおいて、追加のユーザーコンテキストを Lambda 関数に渡すことを目的としています。[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-ValidationData) と [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html#CognitoUserPools-AdminCreateUser-request-ValidationData) は、`validationData` を[サインアップ前トリガー](user-pool-lambda-pre-sign-up.md)に渡します。[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-ClientMetadata) と [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-ClientMetadata) は、API リクエスト本文の `ClientMetadata` を入力イベントの `validationData` として、[認証前](user-pool-lambda-pre-authentication.md)トリガーと[ユーザー移行](user-pool-lambda-migrate-user.md)トリガーに渡します。

クライアントメタデータを渡す先の関数に API オペレーションをマッピングする方法については、トリガーソースに関する以降のセクションを参照してください。

## Lambda トリガーへの API オペレーションの接続
<a name="lambda-triggers-by-event"></a>

以下のセクションでは、Amazon Cognito がユーザープールのアクティビティから呼び出す Lambda トリガーについて説明します。

アプリケーションが、Amazon Cognito ユーザープールの API、マネージドログイン、またはユーザープールのエンドポイントを介してユーザーをサインインさせると、Amazon Cognito はセッションコンテキストに基づいて Lambda 関数を呼び出します。Amazon Cognito ユーザープール API およびユーザープールの詳細については、「[API、OIDC、マネージドログインページの認証についての理解](authentication-flows-public-server-side.md#user-pools-API-operations)」を参照してください。次のセクションの表では、Amazon Cognito が関数を呼び出す原因となるイベントと、Amazon Cognito がリクエストに含める `triggerSource` 文字列について説明します。

**Topics**
+ [Amazon Cognito API の Lambda トリガー](#lambda-triggers-native-users-native-api)
+ [マネージドログインにおける Amazon Cognito ローカルユーザー向けの Lambda トリガー](#lambda-triggers-native-users-hosted-UI)
+ [フェデレーティッドユーザーの Lambda トリガー](#lambda-triggers-for-federated-users)

### Amazon Cognito API の Lambda トリガー
<a name="lambda-triggers-native-users-native-api"></a>

次の表は、アプリがローカルユーザーを作成、サインイン、または更新するときに Amazon Cognito が呼び出すことができる Lambda トリガーのソース文字列を示しています。


**Amazon Cognito API のローカルユーザートリガーソース**  


- ** [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) **
  - **Lambda トリガー:** サインアップ前 / **トリガーソース:** `PreSignUp_AdminCreateUser`
  - **Lambda トリガー:** トークン生成前 / **トリガーソース:** `TokenGeneration_NewPasswordChallenge`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_AdminCreateUser`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_AdminCreateUser`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_AdminCreateUser`

- ** [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) **
  - **Lambda トリガー:** サインアップ前 / **トリガーソース:** `PreSignUp_SignUp`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_SignUp`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_SignUp`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_SignUp`

- ** [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) **
  - **Lambda トリガー:** 確認後
  - **トリガーソース:** `PostConfirmation_ConfirmSignUp`

- ** [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) **
  - **Lambda トリガー:** 事前認証 / **トリガーソース:** `PreAuthentication_Authentication`
  - **Lambda トリガー:** 認証後 / **トリガーソース:** `PostAuthentication_Authentication`
  - **Lambda トリガー:** 認証チャレンジを定義する / **トリガーソース:** `DefineAuthChallenge_Authentication`
  - **Lambda トリガー:** 認証チャレンジを作成する / **トリガーソース:** `CreateAuthChallenge_Authentication`
  - **Lambda トリガー:** 認証チャレンジの検証。 / **トリガーソース:** `VerifyAuthChallenge_Authentication`
  - **Lambda トリガー:** トークン生成前 / **トリガーソース:** `TokenGeneration_Authentication`<br />`TokenGeneration_AuthenticateDevice`<br />`TokenGeneration_RefreshTokens`
  - **Lambda トリガー:** ユーザー移行 / **トリガーソース:** `UserMigration_Authentication`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_Authentication`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_AccountTakeOverNotification`<br />`CustomEmailSender_Authentication`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_Authentication`

- ** [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) **
  - **Lambda トリガー:** 認証後 / **トリガーソース:** `PostAuthentication_Authentication`
  - **Lambda トリガー:** 認証チャレンジを定義する / **トリガーソース:** `DefineAuthChallenge_Authentication`
  - **Lambda トリガー:** 認証チャレンジを作成する / **トリガーソース:** `CreateAuthChallenge_Authentication`
  - **Lambda トリガー:** 認証チャレンジの検証。 / **トリガーソース:** `VerifyAuthChallenge_Authentication`
  - **Lambda トリガー:** トークン生成前 / **トリガーソース:** `TokenGeneration_Authentication`<br />`TokenGeneration_AuthenticateDevice`<br />`TokenGeneration_RefreshTokens`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_Authentication`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_AccountTakeOverNotification`<br />`CustomEmailSender_Authentication`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_Authentication`

- ** [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) **
  - **Lambda トリガー:** ユーザー移行 / **トリガーソース:** `UserMigration_ForgotPassword`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_ForgotPassword`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_ForgotPassword`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_ForgotPassword`

- ** [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) **
  - **Lambda トリガー:** 確認後
  - **トリガーソース:** `PostConfirmation_ConfirmForgotPassword`

- ** [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) **
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_UpdateUserAttribute`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_UpdateUserAttribute`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_UpdateUserAttribute`

- ** [VerifyUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttributes.html) **
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_VerifyUserAttribute`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_VerifyUserAttribute`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_VerifyUserAttribute`

- ** [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html) **
  - **Lambda トリガー:** トークン生成前
  - **トリガーソース:** `TokenGeneration_Authentication`



### マネージドログインにおける Amazon Cognito ローカルユーザー向けの Lambda トリガー
<a name="lambda-triggers-native-users-hosted-UI"></a>

次の表は、ローカルユーザーがマネージドログインを使用してユーザープールにサインインするときに Amazon Cognito が呼び出せる Lambda トリガーのソース文字列を示しています。


**マネージドログインにおけるローカルユーザーのトリガーソース**  


- **`/signup`**
  - **Lambda トリガー:** サインアップ前 / **トリガーソース:** `PreSignUp_SignUp`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_SignUp`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_SignUp`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_SignUp`

- **`/confirmuser`**
  - **Lambda トリガー:** 確認後
  - **トリガーソース:** `PostConfirmation_ConfirmSignUp`

- **`/login`**
  - **Lambda トリガー:** 事前認証 / **トリガーソース:** `PreAuthentication_Authentication`
  - **Lambda トリガー:** トークン生成前 / **トリガーソース:** `TokenGeneration_Authentication`<br />`TokenGeneration_AuthenticateDevice`<br />`TokenGeneration_RefreshTokens`
  - **Lambda トリガー:** ユーザー移行 / **トリガーソース:** `UserMigration_Authentication`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_Authentication`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_AccountTakeOverNotification`<br />`CustomEmailSender_Authentication`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_Authentication`

- **`/forgotpassword`**
  - **Lambda トリガー:** ユーザー移行 / **トリガーソース:** `UserMigration_ForgotPassword`
  - **Lambda トリガー:** カスタムメッセージ / **トリガーソース:** `CustomMessage_ForgotPassword`
  - **Lambda トリガー:** カスタム E メール送信者 / **トリガーソース:** `CustomEmailSender_ForgotPassword`
  - **Lambda トリガー:** カスタム SMS 送信者 / **トリガーソース:** `CustomSMSSender_ForgotPassword`

- **`/confirmforgotpassword`**
  - **Lambda トリガー:** 確認後
  - **トリガーソース:** `PostConfirmation_ConfirmForgotPassword`



### フェデレーティッドユーザーの Lambda トリガー
<a name="lambda-triggers-for-federated-users"></a>

次の Lambda トリガーを使用して、フェデレーションプロバイダーでサインインするユーザーのユーザープールのワークフローをカスタマイズできます。

**注記**  
フェデレーションユーザーは、マネージドログインを使用してサインインできます。または、[認可エンドポイント](authorization-endpoint.md) へのリクエストを生成して、ユーザーを ID プロバイダーのサインインページにサイレントにリダイレクトすることができます。Amazon Cognito ユーザープール API を使用してフェデレーションユーザーをサインインすることはできません。


**フェデレーティッドユーザートリガーのソース**  


- **初回サインイン**
  - **Lambda トリガー:** サインアップ前 / **トリガーソース:** `PreSignUp_ExternalProvider`
  - **Lambda トリガー:** 確認後 / **トリガーソース:** `PostConfirmation_ConfirmSignUp`
  - **Lambda トリガー:** トークン生成前 / **トリガーソース:** `TokenGeneration_HostedAuth`

- **その後のサインイン**
  - **Lambda トリガー:** 事前認証 / **トリガーソース:** `PreAuthentication_Authentication`
  - **Lambda トリガー:** 認証後 / **トリガーソース:** `PostAuthentication_Authentication`
  - **Lambda トリガー:** トークン生成前 / **トリガーソース:** `TokenGeneration_HostedAuth`



フェデレーティッドサインインは、ユーザープールの [カスタム認証チャレンジの Lambda トリガー](user-pool-lambda-challenge.md)、[ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md)、[カスタムメッセージの Lambda トリガー](user-pool-lambda-custom-message.md)、または [カスタム送信者の Lambda トリガー](user-pool-lambda-custom-sender-triggers.md) を呼び出しません。

## Lambda トリガーのユーザープールの機能オペレーションへの接続
<a name="working-with-lambda-trigger-sources"></a>

各 Lambda トリガーは、ユーザープールで機能的な役割を果たします。例えば、トリガーを使用してサインアップフローを変更したり、カスタム認証チャレンジを追加したりできます。Amazon Cognito が Lambda 関数に送信するイベントには、その機能ロールを構成する複数のアクションのうちの 1 つが反映されます。例えば、Amazon Cognito は、ユーザーがサインアップしたとき、およびユーザーを作成したときに、事前サインアップトリガーを呼び出します。同じ機能的役割を持つ、これらのさまざまなケースには、それぞれ独自の `triggerSource` 値があります。Lambda 関数は、呼び出したオペレーションに基づいて受信イベントを異なる方法で処理できます。

また Amazon Cognito は、イベントがトリガーソースに対応するときに、割り当てられたすべての関数を呼び出します。例えば、ユーザー移行トリガーと事前認証トリガーを割り当てたユーザープールにユーザーがサインインすると、両方がアクティブになります。


**サインアップ、確認、およびサインイン (認証) トリガー**  

| トリガー | triggerSource 値 | イベント | 
| --- | --- | --- | 
| サインアップ前 | PreSignUp\_SignUp | サインアップ前。 | 
| サインアップ前 | PreSignUp\_AdminCreateUser | 管理者が新しいユーザーを作成するときのサインアップ前 | 
| サインアップ前 | PreSignUp\_ExternalProvider | 外部 ID プロバイダーのサインアップ前。 | 
| 確認後 | PostConfirmation\_ConfirmSignUp | サインアップの確認後。 | 
| 確認後 | PostConfirmation\_ConfirmForgotPassword | パスワードを忘れた場合の確認後。 | 
| 認証前 | PreAuthentication\_Authentication | 認証前。 | 
| 認証後 | PostAuthentication\_Authentication | 認証後。 | 


**カスタム認証チャレンジトリガー**  

| Trigger | triggerSource 値 | イベント | 
| --- | --- | --- | 
| 認証チャレンジを定義する | DefineAuthChallenge\_Authentication | 認証チャレンジの定義。 | 
| 認証チャレンジの作成 | CreateAuthChallenge\_Authentication | 認証チャレンジの作成。 | 
| 認証チャレンジの検証。 | VerifyAuthChallengeResponse\_Authentication | 認証チャレンジレスポンスの確認。 | 


**フェデレーショントリガー**  

| Trigger | triggerSource 値 | イベント | 
| --- | --- | --- | 
| インバウンドフェデレーション | InboundFederation\_ExternalProvider | インバウンドフェデレーション。 | 


**トークン生成前トリガー**  

| Trigger | triggerSource 値 | イベント | 
| --- | --- | --- | 
| トークン生成前 | TokenGeneration\_HostedAuth |  Amazon Cognito は、マネージドログインのサインインページからユーザーを認証します。 | 
| トークン生成前 | TokenGeneration\_Authentication | ユーザーの認証またはトークンの更新が完了しました。 | 
| トークン生成前 | TokenGeneration\_NewPasswordChallenge | 管理者がユーザーを作成します。ユーザーが一時パスワードを変更する必要があるときに、Amazon Cognito は、これを呼び出します。 | 
| トークン生成前 | TokenGeneration\_AuthenticateDevice | ユーザーデバイスの認証の終了。 | 
| トークン生成前 | TokenGeneration\_RefreshTokens | ユーザーは、ID およびアクセストークンを更新しようとします。 | 


**移行ユーザートリガー**  

| Trigger | triggerSource 値 | イベント | 
| --- | --- | --- | 
| ユーザー移行 | UserMigration\_Authentication | サインイン時のユーザー移行。 | 
| ユーザー移行 | UserMigration\_ForgotPassword | パスワードを忘れた場合のフロー実行時のユーザー移行 | 


**カスタムメッセージトリガー**  

| Trigger | triggerSource 値 | イベント | 
| --- | --- | --- | 
| カスタムメッセージ | CustomMessage\_SignUp | ユーザーがユーザープールにサインアップしたときのカスタムメッセージ。 | 
| カスタムメッセージ | CustomMessage\_AdminCreateUser | 管理者としてユーザーを作成し、Amazon Cognito から一時パスワードが送信されるときのカスタムメッセージ。 | 
| カスタムメッセージ | CustomMessage\_ResendCode | 既存のユーザーが新しい確認コードをリクエストしたときのカスタムメッセージ。 | 
| カスタムメッセージ | CustomMessage\_ForgotPassword | ユーザーがパスワードのリセットを要求したときのカスタムメッセージ。 | 
| カスタムメッセージ | CustomMessage\_UpdateUserAttribute | ユーザーが E メールアドレスまたは電話番号を変更し、Amazon Cognito が検証コードを送信したときのカスタムメッセージ。 | 
| カスタムメッセージ | CustomMessage\_VerifyUserAttribute | ユーザーが E メールアドレスまたは電話番号を追加し、Amazon Cognito が検証コードを送信したときのカスタムメッセージ。 | 
| カスタムメッセージ | CustomMessage\_Authentication | SMS MFA を設定したユーザーがサインインしたときのカスタムメッセージ。 | 


**カスタム送信者トリガー**  

| Trigger | triggerSource 値 | イベント | 
| --- | --- | --- | 
| カスタム送信者 | `CustomEmailSender_SignUp`<br />`CustomSmsSender_SignUp` | ユーザーがユーザープールにサインアップした場合。 | 
| カスタム送信者 | `CustomEmailSender_AdminCreateUser`<br />`CustomSmsSender_AdminCreateUser` | 管理者としてユーザーを作成し、Amazon Cognito がユーザーに仮パスワードを送信した場合。 | 
| カスタム送信者 | `CustomEmailSender_ForgotPassword`<br />`CustomSmsSender_ForgotPassword` | ユーザーがパスワードのリセットをリクエストした場合。 | 
| カスタム送信者 | `CustomEmailSender_UpdateUserAttribute`<br />`CustomSmsSender_UpdateUserAttribute` | ユーザーが E メールアドレスまたは電話番号を変更し、Amazon Cognito が検証コードを送信した場合。 | 
| カスタム送信者 | `CustomEmailSender_VerifyUserAttribute`<br />`CustomSmsSender_VerifyUserAttribute` | ユーザーが E メールアドレスまたは電話番号を追加し、Amazon Cognito が検証コードを送信した場合。 | 
| カスタム送信者 | `CustomEmailSender_Authentication`<br />`CustomSmsSender_Authentication` | SMS、E メール MFA、または OTP を設定したユーザーがサインインした場合。 | 
| カスタム送信者 | CustomEmailSender\_AccountTakeOverNotification | 脅威保護設定により、ユーザーのサインイン試行に対して自動アクションが実行され、リスクレベルのアクションに通知が含まれている場合。 | 