4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS】CognitoでSignUpしたユーザの情報をDynamoDBに追加する方法

Last updated at Posted at 2021-04-03

現在iOSアプリを開発しており、Cognitoを使ったログイン機能は実装できたのですが、登録したユーザ名などの情報をアプリ上でも使いたかったのでその方法をまとめておきます。

ざっくりと以下のような流れになります。

**0. Cognitoでユーザプールを作成する

  1. DynamoDBにデータを追加するテーブルを作成する
  2. Lambda関数を作成する
  3. Cognitoで確認後トリガーにLambda関数を設定する**

0. Cognitoでユーザプールを作成する

すでにユーザプールが作成されていることを想定しているため、省略します。
(ユーザプール名はsample-userpoolとしました。)
Lambda関数を作成後、トリガーの設定をするために戻ってきます。

1. DynamoDBにデータを追加するテーブルを作成する

下記のように、テーブル名をsample-table、プライマリーキーをusernameとし、テーブルを作成します。
今回はusernameだけを使いたいので、そのほかの属性は省略します。

2. Lambda関数を作成する

下記のように、関数名をsample-lambda、ランタイムをPython3.8とします。
スクリーンショット 2021-04-04 3.01.51.jpg

アクセス権限のロールは、AWSポリシーテンプレートから新しいロールを作成にして、シンプルなマイクロサービスのアクセス権限テストハーネスのアクセス権限を選びます。
スクリーンショット 2021-04-04 3.59.58.png

次に、LambdaではPythonの外部モジュールをzipで読み込む必要があるため、zipファイルを作ります。
今回はboto3というAWSが提供しているライブラリを使用するため、下記コマンドでインストールします。

$ pip install boto3 -t ./sample-modules

すると、sample-modulesが作成され、その中にいくつかのディレクトリとファイルが追加されていると思います。
できていたら、今作成したsample-modules内に、lambda_function.pyを作成します。

$ cd sample-modules
$ vi lambda_function.py

Cognitoからユーザ情報(username)を受け取り、DynamoDBに追加するためのPythonのプログラムをlambda_function.pyに書き、保存します。

lambda_function.py
import boto3

def lambda_handler(event, context):

    dynamoDB = boto3.resource("dynamodb")
    # DynamoDBのテーブル名
    table = dynamoDB.Table("sample-table")

    # DynamoDBへデータを追加する
    table.put_item(
      Item = {
        "username": event['userName']
      }
    )

    return event

そして、sample-modules配下のファイルのパーミッションを755にします。

$ chmod -R 755 ./sample-modules/

最後に、現在のsample-modulesを圧縮し、upload.zipにします。

$ zip -r upload.zip *

これができたら、先ほど作成したLambda関数にzipファイルをアップロードしましょう。

念のため、テストタブで下記のSignUpEventを実行して見てください。
DynamoDBのsample-tableにtestNameが追加されていたら成功です!

{
  "triggerSource": "testTrigger",
  "userPoolId": "testPool",
  "userName": "testName",
  "callerContext": {
      "clientId": "12345"
  },
  "response": {}
}

3. CognitoのトリガーにLambda関数を設定する

最後に、ユーザがSignUpを完了したタイミングで作成したLambda関数を呼び出すために、Cognitoのトリガーを設定します。
Cognitoでユーザプールを開き、左のメニューのトリガーを選択します。
すると、サインアップ前や認証前などが出てくると思うので、確認後のトリガーsample-lambdaを選んでください。

これで全工程が完了です!!いかがでしたでしょうか。
私は今回Lambdaを初めて使ったのでかなり時間がかかりました・・なので備忘録としてここに残しておきます。

参考にしたサイト

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?