Cognitoユーザが削除されたタイミングでユーザに紐づくDyanamoDBやS3に格納されているデータを削除したい

Cognito関連情報削除アイキャッチ

AWSでアプリ開発をしている方にはCognitoのユーザが削除された際、そのユーザに関連するデータを削除したいという要件が出てくると思います。Cognitoのトリガで実装できないのでしょうか。
参考:Cognitoには様々なトリガが用意されています。


今回筆者にもそのような要件があったので実現方法を調査しました。

目次

結論 ユーザ削除時のCognitoのトリガはない。ユーザ側で実装する必要あり

残念ながらCognitoでのユーザ削除をトリガにLambda関数を実行することはできませんでした。ユーザ削除関数を作ってその中でCognitoのユーザ削除APIを呼ぶ必要があります。

実現したかった事 Cognitoでユーザ削除トリガがあれば使いたかった

当初想定したアーキテクチャ フロントエンドからCognitoのAPIを直接呼び出す

まず考えていたアーキテクチャはフロントエンドが直接CognitoAPIを実行し、JWTを取得。そのJWTを使ってAPIGatewayを呼び出すというものでした。
ここでCognitoのユーザが消された際にLambdaなどをトリガしてDynamoDBやS3に入っているそのユーザに関係するデータを消せればいいな、と考えていました。

フロントエンドからCognitoのAPIを呼び出すアーキテクチャ図
図1 アーキテクチャ

Cognitoのトリガでユーザ削除起因のものは存在しなかった


まず思いつくのがCognitoのトリガですが、マネジメントコンソールから確認するにユーザが削除された際のトリガはなさそうでした。
公式ドキュメントを参照しても無さそうです。別の手段を考えるしかありません。

代替手段

没案 EventBridgeやCloudTrailのログを契機にLambda関数をトリガできないか

Cognitoのトリガがないのであれば、EventBridgeやCloudTrailのログを契機にLambdaをトリガする案がありそうです。
しかし、各種AWS公式ドキュメントを参照しても、EventBridgeやCloudTrailに出力される情報はありませんでした。そのためAWSサポートに実現可否を確認してみました。以下、回答をざっくりまとめたもの。

ユーザ削除はCloudTrailログやCloudWatchログに記録されないのでLambda関数をトリガするのは不可能

この案は却下となりました。

代替案 フロントエンドからCognitoのAPI直接呼出しをやめてLambda関数にラッピングさせる

フロントエンドからCognitoAPI直呼び出しはあきらめました。ユーザ削除APIを作成してそこからCognitoを含む各種リソースの削除を実装しました。

フロントエンドからLambda経由でCognitoのAPIを呼び出すアーキテクチャ図
図2 Cognito関数をLambda関数にラッピングさせる

フロントエンドから呼び出すのはAPIGateway-Lambdaにしておけば実装の自由度は上がります。

フロントエンドからCognitoなどのAPIを直接呼び出すのは実装の自由度が奪われるので慎重になったほうがいいですね。

まとめ

Cognitoユーザが削除されたトリガーは2023年1月時点では存在しない。実現にはLambdaなどでCognitoのAPIをラッピングする必要がある。フロントエンドを開発する際、AWSサービスのAPIを直接呼び出す実装は慎重になったほうが良いことを学びました。

PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!

SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次