Lambda+Cognitoでユーザーの登録
LambdaからCognitoのユーザープールにユーザーを作成することが仕事であったので、その方法をメモしておきます。
ユーザープール作成
AWSコンソールからCognitoを開きます。
ユーザープールの管理を選択します。
右上の「ユーザープールを作成する」を選択。
プール名を入力し、ステップに従って設定するを選択。
今回はemailも入力させたいので、emailにチェックを入れました。
続いてサイドバーのポリシーからパスワードの強度を設定します。
今回は一旦小文字だけにしました。
実際に使う場合にはよりセキュアにした方が良いと思います。
サイドバーのアプリクライアントから「アプリクライアントの追加」を押します。
すると、アプリクライアントの作成画面に移行するので、画面通り設定していきます。
アプリクライアント名は任意の名前で大丈夫です。
設定ができたらアプリクライアントの作成を押します。
その他の設定はデフォルトで大丈夫です。
最後にサイドバーの確認から入力内容を確認し、プールの作成を押します。
プールの作成ができたら、プールID・プールARNをメモしておきます。
サイドバーのアプリクライアントから、アプリクライアントIDもメモしておきます。
フェデレーティッドアイデンティティの作成
続いて、フェデレーティッドアイデンティティを作成します。
ユーザープールの右のフェデレーティッドアイデンティティを選択。
新しいIDプールの作成を押します。
すると作成画面に移行するので、IDプール名を入力します。
こちらも任意の名前で大丈夫です。
下にスクロールすると、認証プロバイダーというところがあるので、
こちらに先ほどメモしたユーザープールIDとアプリクライアントIDを入力します。
入力ができたらプールの作成を押します。
英語で説明が出てきますが、許可で大丈夫です。
作成完了画面が出てくるので、IDプールのIDをメモしておきます。
以上でユーザープールの作成は完了です。
Lambdaにコードを記述
今回はadminCreateUserを使用し、ユーザー登録を行いました。
'use strict'; const AWS = require('aws-sdk'); const cognito = new AWS.CognitoIdentityServiceProvider(); const querystring = require('querystring') exports.handler = async (event, context, callback) => { const parse = querystring.parse const request_body = parse(event.body); const userId = request_body.email const params = { Username: userId, MessageAction: 'SUPPRESS', UserPoolId: '先ほどメモしたユーザーIDを入力', UserAttributes: [ { Name: 'email', Value: userId, }, { Name: 'email_verified', Value: 'true', }, { Name: 'phone_number_verified', Value: 'false', }, ], }; let result = ''; try { result = await cognito.adminCreateUser(params).promise() } catch (error) { return console.log('エラーです'); } return console.log('登録完了!!') // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; callback(null, event); };