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トリガーとLambdaのエラー時挙動を検証してみた(DynamoDB連携を目指して)

Last updated at Posted at 2025-04-20

はじめに

Cognitoでは、ユーザー作成時にLambdaをトリガーとして呼び出すことができます。

「このタイミングでDynamoDBにもユーザー情報を保存したい」と考えました。

いざやろうと思うと、Lambdaが失敗した時の挙動やエラーハンドリングについて気になる点があったのでまとめました。

TL;DR(要点)

  • Cognitoの「サインアップ前」トリガーでLambdaが失敗すると、ユーザーの作成自体が失敗する
  • Lambdaの呼び出し失敗した場合、3回までリトライされるが、すべて失敗した場合はユーザー作成は行われない

トリガーの種類と実行タイミング

まず前提として、Cognitoでは以下のようなトリガーがあります。

スクリーンショット 2025-04-20 18.46.06.png

私が設定していたのは「サインアップ前」でしたが、これは「ユーザー作成前」に呼び出されるものでした。

つまり、Lambdaでエラーが起きるとユーザーはそもそも作成されません

Lambdaがエラーを吐いたら?

たとえば以下のようなケースでワザとLambdaが失敗するようにしてみました。

export const handler = async (event) => {
  throw new Error("意図的エラー");
};

その上で、マネコン経でユーザー作成を試みると、マネコン上でやってみると下図のように「ユーザー作成中にエラーが発生しました」と表示されて、Cognitoのユーザーの作成が行われませんでした。

cognito_error.png

ちなみにLambda内のエラーは普通にCloudWatchに出ます。

Lambdaの呼び出しに失敗したら?

そもそも何かしらが原因でLambdaの呼び出しに失敗した場合でも、挙動は同じようです。

Lambdaは同期的に呼び出されて3回までリトライされるそうです。

呼び出し自体が失敗してもDLQとかには貯まらない。

公式ドキュメント↓

1731575404384.png

全てリトライが失敗した場合は、マネコン、CLI、SDKのどれであれ同期実行なのでユーザー作成失敗の趣旨のエラーが返ってくる。

Lambdaでエラーハンドリングをすべきか?

Lambdaが失敗すれば、Cognitoのユーザー作成自体がされない、と言う事が起こります。

それで良いのか?

Lambdaの処理の重要度によって良いか悪いか分かれそう。

なぜ調べたのか(再喝)

やりたかったことは次のようなこと。

Cognitoでユーザー登録

そのユーザー情報をDynamoDBにも保存したい

でも、Lambdaでの保存に失敗したら「Cognitoには登録されてるのにDynamoDBにはいない」という不整合が起こる可能性があるなと。

大丈夫だろうか?そもそも挙動ってどうなってるんだっけ?と気になった経緯でした。

終わりに

現場からは以上ですー。

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?