Lambda+Cognitoでユーザーの登録

LambdaからCognitoのユーザープールにユーザーを作成することが仕事であったので、その方法をメモしておきます。

ユーザープール作成

AWSコンソールからCognitoを開きます。
ユーザープールの管理を選択します。 f:id:katttsu105:20210502161951p:plain

右上の「ユーザープールを作成する」を選択。 f:id:katttsu105:20210502162240p:plain

プール名を入力し、ステップに従って設定するを選択。 f:id:katttsu105:20210502162627p:plain

今回はemailも入力させたいので、emailにチェックを入れました。 f:id:katttsu105:20210502163811p:plain

続いてサイドバーのポリシーからパスワードの強度を設定します。
今回は一旦小文字だけにしました。
実際に使う場合にはよりセキュアにした方が良いと思います。 f:id:katttsu105:20210502164157p:plain

サイドバーのアプリクライアントから「アプリクライアントの追加」を押します。 f:id:katttsu105:20210502164441p:plain

すると、アプリクライアントの作成画面に移行するので、画面通り設定していきます。
アプリクライアント名は任意の名前で大丈夫です。 f:id:katttsu105:20210502165110p:plain

設定ができたらアプリクライアントの作成を押します。 f:id:katttsu105:20210502165242p:plain

その他の設定はデフォルトで大丈夫です。
最後にサイドバーの確認から入力内容を確認し、プールの作成を押します。 f:id:katttsu105:20210502165519p:plain

プールの作成ができたら、プールID・プールARNをメモしておきます。 f:id:katttsu105:20210502165713p:plain

サイドバーのアプリクライアントから、アプリクライアントIDもメモしておきます。 f:id:katttsu105:20210502170013p:plain

フェデレーティッドアイデンティティの作成

続いて、フェデレーティッドアイデンティティを作成します。
ユーザープールの右のフェデレーティッドアイデンティティを選択。 f:id:katttsu105:20210502170302p:plain

新しいIDプールの作成を押します。 f:id:katttsu105:20210502170411p:plain すると作成画面に移行するので、IDプール名を入力します。
こちらも任意の名前で大丈夫です。 f:id:katttsu105:20210502170639p:plain

下にスクロールすると、認証プロバイダーというところがあるので、
こちらに先ほどメモしたユーザープールIDとアプリクライアントIDを入力します。
入力ができたらプールの作成を押します。

f:id:katttsu105:20210502170909p:plain

英語で説明が出てきますが、許可で大丈夫です。 f:id:katttsu105:20210502171243p:plain

作成完了画面が出てくるので、IDプールのIDをメモしておきます。 f:id:katttsu105:20210502171457p:plain

以上でユーザープールの作成は完了です。

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);
};