0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cognito で登録後に発火しS3にフォルダなどを作る方法

Posted at

やりたいこと

  • cognitoで登録が終わった後にUserに対応するディレクトリを特定のS3に作成したい

方法

cognito側の準備

cognitoでuser poolを作りたいように作成します。
ほかの方の解説も多いので割愛します。

今回は、諸々の設定が面倒臭いのでHostedUIを利用します。
特に自作の画面でも問題ないですが、自作の画面はうまく認証を通すのが難しいので今回はこれで、、、

HostedUIの設定方法です。
作成したUserPoolアプリケーションの統合タブ>アプリクライアントと分析 (1)
ここに、UserPoolを作成したときに作成したはずのアプリケーションがあります。

そこをクリックした画面を下がると、以下のようなものがあるはずです。
何も設定されていない場合は、適宜設定してください。

image.png

また、好きなドメインも設定しておきましょう。お試しであればcognito ドメインを利用すれば問題ないはずです。
image.png

S3の準備

全部デフォルトでまずは作成します。

以上

Lambdaの準備

lambda
import { S3 } from '@aws-sdk/client-s3';

const s3 = new S3();
const CONTENT_BUCKET = process.env.CONTENT_BUCKET || 'test';

export const handler = async (event, context) => {
  try {
    await s3.putObject({
      Bucket: CONTENT_BUCKET,
      Key: `debug-logs/cognito-events/${Date.now()}.json`,
      Body: JSON.stringify(event, null, 2),
      ContentType: 'application/json'
    });

    console.log('Event logged successfully');
    return event;
  } catch (error) {
    console.error('Error:', error);
    return event;
  }
};

簡単にS3にデータを保存するだけのLambdaです。
とりあえず今はeventのものを全部入れて日付をファイル名にしています。

cognitoで生成されるユーザー名はuserNameに入っているので、実際のディレクトリ名などはそこからとる感じです。

Lambdaのアクセス権の設定

作ったlambda>設定>アクセス権限>実行ロールで実行しているロールをクリックできるのでロールに飛びましょう

そうするとロールがあるのですが、現状はS3に書き込む権限などが足りません。

許可を追加>インラインポリシーを作成をクリックして、ポリシーエディタに行きます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::XXXXXXXXXXXXXXXXXXXXXXXX/*"
            ]
        }
    ]
}

とりあえずは、こちらで大丈夫ですが必要に応じて権限を絞るようにしてください。
取得など必要なかったら消してしまってください。

ここまで設定できればほとんど終了です。
元からLambdaでS3を操作したことがある人であれば見る必要もない部分でしたね、、、

Cognitoのサインアップで発火するようにする

image.png

cognitoのユーザープールのプロパティまで行くと、Lambdaトリガーがあるのでそれを利用します。

image.png

今回は、サインアップ後のトリガーを利用することで、サインアップが成功したタイミングでLambdaが発火するように設定できます。
もし複数のLambdaが発火する必要がある場合は、cognitoでは設定できないようなので工夫が必要そうです。

先ほど作成した関数を選択して保存すると設定は終了です。

試してみる。

image.png

ここまで行くと簡単にサインアップ画面に行くことができるので、サインアップを試してみましょう。
ホストされたUIを表示して、必要な情報を入力することでLambdaの発火が確認できるはずです。

うまくいかない場合は、クラウドウォッチなどを用いて確認してみてください。

まとめ

100忘れる予感がしたので作成したが、誰かの助けになれば幸いです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?