AWS
lambda
cognito

CognitoでAdminCreateUser時の招待メッセージをカスタマイズする

More than 1 year has passed since last update.

概要

CognitoではLabmdaトリガーを使って様々な処理を行うことが出来ます。
そのうちの一つとして送信するメッセージのカスタマイズがあるのですが、AdminCreateUserがトリガーイベントの場合のドキュメントがなかったのでメモしておきます。
AWSのドキュメントが更新されたら不要になります。

参考

詳細

AdminCreateUserは管理者がユーザを作成するAPIです。
管理者がユーザを作成すると、一時パスワードが作成されてユーザにメールが届きます。
ユーザがログイン後にパスワードを変更するとCONFIRMED状態になります。

先に結論として、うまく動作したLambdaのソースコードを載せておきます。

def lambda_handler(event, context):
    if event["triggerSource"] == "CustomMessage_AdminCreateUser":
        event["response"] = {
            "emailSubject": "Custom Subject",
            "emailMessage": "Your username is " + event["request"]["usernameParameter"] + "<br>Your temporary password is " + event["request"]["codeParameter"]
        }


    return event

カスタムメッセージのレスポンスは以下のようにドキュメントに記載されています。

"response": {
    "smsMessage": "string",
    "emailMessage": "string",
    "emailSubject": "string";
}

SMSのメッセージとメールの件名・本文が変更可能なようです。
emailMessageの説明は以下のようになっています。

emailMessage
ユーザーに送信されるカスタム E メールメッセージ。リクエストで受信される codeParameter 値を含める必要があります。

なるほど codeParameter を入れれば良いのか!ということでドキュメントのサンプルコードを参考に以下のようなコードを書きます。

event["response"]["emailSubject"] = "Welcome to the service"
event["response"]["emailMessage"] = "Your confirmation code is " + event["request"]["codeParameter"]

しかし、件名は変わるものの本文は変わりません。

ドキュメントどおりにやっているのに動かない...ということで他の人がどうやっているのか調べていったところ、レスポンスに usernameParameter を含めていることが分かりました。
これはリクエストに含まれており、 codeParameter のようなものです。
そこで usernameParameter を入れたところあっさり成功しました。

まとめ

usernameParameter についてAWSのドキュメントを探しても全く見つかりませんでしたが、AdminCreateUser時の招待メッセージをカスタマイズしたい場合は必要なようでした。