Cognito UserPoolでアクティベーションしたタイミングでWelcomeメールを送る
Cognito UserPoolにはトリガーが用意されており、任意のタイミングでLambdaを実行することができます。 「確認後」のトリガーにLambdaをセットすることで、アカウントの有効化が実行されたタイミングでメー […]
広告ここから
広告ここまで
目次
Cognito UserPoolにはトリガーが用意されており、任意のタイミングでLambdaを実行することができます。
「確認後」のトリガーにLambdaをセットすることで、アカウントの有効化が実行されたタイミングでメールを送るという機能をつけることができます。
コードサンプル
module.exports.handler = (event, context, callback) => {
const email = event.request.userAttributes.email
const params = {
Destination: {
ToAddresses: [ email ]
},
Message: {
Body: {
Text: {
Charset: 'UTF-8',
Data: `Hello ${event.userName} \nWelcome to our service!`
}
},
Subject: {
Charset: 'UTF-8',
Data: 'Welcome !'
}
},
ReplyToAddresses: [
'[email protected]'
],
Source: '[email protected]'
}
ses.sendEmail(params).promise()
.then(result => callback(null, event))
.catch(err => callback('Fail to send email'))
}
Tips:IAM Roleの設定を忘れずに
Lambdaからses:SendEmail
が実行できるようにIAMロールの設定をしておきましょう。
Serverless Frameworkの場合は以下のように書けばOKです。
provider:
name: aws
runtime: nodejs6.10
timeout: 30
stage: development
iamRoleStatements:
- Effect: "Allow"
Action:
- "ses:SendEmail"
Resource:
- "arn:aws:ses:*:*:identity/[email protected]"
...
もちろん、SESで登録済みのアドレスしか使えないのでご注意ください。
ローカルでテストする
これのテストのために毎回アクティベーション作業をするのもなかなか大変です。
幸いなことにAWSのドキュメントにトリガーから実行された場合のeventの値が記載されていますので、それを使ってテストしましょう。
{
"version": 1,
"triggerSource": "PostAuthentication_Authentication",
"region": "<region>",
"userPoolId": "<userPoolId>",
"userName": "<userName>",
"callerContext": {
"awsSdk": "<calling aws sdk with version>",
"clientId": "<apps client id>",
...
},
"request": {
"userAttributes": {
"phone_number_verified": true,
"email_verified": true,
"email": "[email protected]",
... //all custom attributes
}
},
"response": {}
}
Serverless Frameworkを使っている場合は、sls invoke local
でテストできます。
$ sls invoke local -f postConfirmation -d '{
"version": 1,
"triggerSource": "PostAuthentication_Authentication",
"region": "<region>",
"userPoolId": "<userPoolId>",
"userName": "<userName>",
"callerContext": {
"awsSdk": "<calling aws sdk with version>",
"clientId": "<apps client id>",
},
"request": {
"userAttributes": {
"phone_number_verified": true,
"email_verified": true,
"email": "[email protected]"
}
},
"response": {}
}'