翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタム SMS 送信者の Lambda トリガー
ユーザープールにカスタム SMS 送信者トリガーを割り当てると、ユーザーイベントで SMS メッセージの送信が必要になった時点で、Amazon Cognito がデフォルトの動作ではなく Lambda 関数を呼び出します。カスタム送信者トリガーを使用すると、 AWS Lambda 関数は選択したメソッドとプロバイダーを通じて SMS 通知をユーザーに送信できます。関数のカスタムコードは、すべての SMS メッセージを、ユーザープールから処理して配信する必要があります。
このトリガーは、ユーザープールが SMS メッセージを送信する方法をより細かく制御するシナリオを提供します。Lambda 関数は、複数の発信元 ID またはクロス AWS リージョンを管理する場合など、Amazon SNS API オペレーションへの呼び出しをカスタマイズできます。また、関数は、メッセージを別の配信メディアまたはサードパーティーサービスにリダイレクトすることもできます。
カスタム E メール送信者トリガーを設定する方法については、「」を参照してくださいカスタム送信者 Lambda トリガーのアクティブ化。
カスタム SMS 送信者の Lambda トリガーのソース
以下の表には、Lambda コード内のカスタム SMS トリガーのソースに対するトリガーイベントが記載されています。
TriggerSource value |
イベント |
---|---|
CustomSMSSender_SignUp |
ユーザーがサインアップすると、Amazon Cognito がウェルカムメッセージを送信します。 |
CustomSMSSender_ForgotPassword |
ユーザーがパスワードをリセットするコードを要求します。 |
CustomSMSSender_ResendCode |
ユーザーは、登録を確認するために新しいコードをリクエストします。 |
CustomSMSSender_VerifyUserAttribute |
ユーザーが新しい E メールアドレスまたは電話番号の属性を作成すると、Amazon Cognito は属性を検証するコードを送信します。 |
CustomSMSSender_UpdateUserAttribute |
ユーザーが E メールアドレスまたは電話番号の属性を更新すると、Amazon Cognito は属性を検証するためのコードを送信します。 |
CustomSMSSender_Authentication |
ユーザーが SMS 多要素認証 (MFA) を使用して設定されたユーザーがサインインします。 |
CustomSMSSender_AdminCreateUser |
ユーザープールに新しいユーザーを作成すると、Amazon Cognito から一時パスワードが送信されます。 |
カスタム SMS 送信者の Lambda トリガーパラメータ
Amazon Cognito がこの Lambda 関数に渡すリクエストは、以下のパラメータと Amazon Cognito がすべてのリクエストに追加する共通パラメータを組み合わせたものです。
カスタム SMS 送信者のリクエストパラメータ
- type
-
リクエストバージョン。カスタム SMS 送信者イベントの場合、この文字列の値は常に
customSMSSenderRequestV1
です。 - コード
-
関数が復号してユーザーに送信できる暗号化されたコード。
- clientMetadata
-
カスタム SMS 送信者 Lambda 関数トリガーへのカスタム入力として提供できる 1 つ以上のキーバリューペア このデータを Lambda 関数に渡すには、AdminRespondToAuthChallenge および RespondToAuthChallenge API アクションで ClientMetadata パラメータを使用します。Amazon Cognito は、認証後関数に渡すリクエストの AdminInitiateAuth および InitiateAuth API オペレーションの ClientMetadata パラメータからのデータを含めません。
- userAttributes
-
ユーザー属性を表す 1 つ以上のキーバリューペア。
カスタム SMS 送信者の応答パラメータ
Amazon Cognito は、レスポンスに追加の返品情報を期待しません。関数では、API オペレーションを使用してリソースをクエリして変更したり、イベントメタデータを外部システムに記録することができます。
コード例
次の Node.js 例は、カスタム SMS 送信者 Lambda 関数で SMS メッセージイベントを処理します。この例では、関数に 2 つの環境変数が定義されていることを前提としています。
KEY_ID
-
ユーザーのコードを暗号化および復号するために使用する KMS キーの ID。
KEY_ARN
-
ユーザーのコードを暗号化および復号化するために使用する KMS キーの Amazon リソースネーム (ARN)。
この関数をデプロイするには
-
開発者ワークスペースに最新バージョンの NodeJS をインストールします。
-
ワークスペースに新しい NodeJS プロジェクトを作成します。
-
を使用してプロジェクトを初期化します
npm init -y
。 -
Lambda 関数のスクリプトを作成します:
touch index.mjs
。 -
以下の例の内容を に貼り付けます
index.mjs
。 -
プロジェクトの依存関係をダウンロードします AWS Encryption SDK。
npm install @aws-crypto/client-node
-
プロジェクトディレクトリをファイル に圧縮します
zip -r my_deployment_package.zip .
。
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node'; // Configure the encryption SDK client with the KMS key from the environment variables const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT ); const generatorKeyId = process.env.KEY_ID; const keyIds = [process.env.KEY_ARN]; const keyring = new KmsKeyringNode({ generatorKeyId, keyIds }); // Example function to simulate sending SMS. // This example logs message details to CloudWatch Logs from your Lambda function. // Update this function with custom logic that sends an SMS message to 'phoneNumber' with body 'message'. const sendSMS = async (phoneNumber, message) => { // Log the destination with the phone number masked. console.log(`Simulating SMS send to ${phoneNumber.replace(/[^+]/g, '*')}`); // Log the message with the code masked. console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`); // Simulate API delay await new Promise(resolve => setTimeout(resolve, 100)); console.log('SMS sent successfully'); return true; }; export const handler = async (event) => { try { // Decrypt the secret code using encryption SDK let plainTextCode; if (event.request.code) { const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64')); plainTextCode = Buffer.from(plaintext).toString('utf-8'); } // Handle different trigger sources if (event.triggerSource == 'CustomSMSSender_SignUp') { const phoneNumber = event.request.userAttributes.phone_number; const message = `Welcome! Your verification code is: ${plainTextCode}`; await sendSMS(phoneNumber, message); } else if (event.triggerSource == 'CustomSMSSender_ResendCode') { // Handle resend code } else if (event.triggerSource == 'CustomSMSSender_ForgotPassword') { // Handle forgot password } else if (event.triggerSource == 'CustomSMSSender_UpdateUserAttribute') { // Handle update attribute } else if (event.triggerSource == 'CustomSMSSender_VerifyUserAttribute') { // Handle verify attribute } else if (event.triggerSource == 'CustomSMSSender_AdminCreateUser') { // Handle admin create user } return; } catch (error) { console.error('Error in custom SMS sender:', error); throw error; } };
カスタム SMS 送信者関数で SMS メッセージ機能を評価する
カスタム SMS 送信者 Lambda 関数は、ユーザープールが送信する SMS メッセージを受け入れ、関数はカスタムロジックに基づいてコンテンツを配信します。Amazon Cognito は関数に カスタム SMS 送信者の Lambda トリガーパラメータ を送信します。この情報を使用して、関数はユーザーが望むことを実行できます。例えば、Amazon Simple Notification Service (Amazon SNS) トピックにコードを送信できます。Amazon SNS トピックのサブスクライバーは、SMS メッセージ、HTTPS エンドポイント、または E メールアドレスです。
カスタム SMS 送信者 Lambda 関数を使用して Amazon Cognito SMS メッセージングのテスト環境を作成するには、GitHub 上の aws-samples ライブラリ
このソリューションをユーザープールにデプロイすると、Amazon Cognito が通常送信するすべてのメッセージが SMS メッセージングを介して送信され、代わりに Lambda 関数が中央の E メールアドレスに送信します。このソリューションを使用して、SMS メッセージをカスタマイズおよびプレビューし、Amazon Cognito が SMS メッセージを送信する原因となるユーザープールイベントをテストします。テストが完了したら、CloudFormation スタックをロールバックするか、ユーザープールからカスタム SMS 送信者関数の割り当てを削除します。
重要
amazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email