AWSでアプリ開発をしている方にはCognitoのユーザが削除された際、そのユーザに関連するデータを削除したいという要件が出てくると思います。Cognitoのトリガで実装できないのでしょうか。
参考:Cognitoには様々なトリガが用意されています。
今回筆者にもそのような要件があったので実現方法を調査しました。
結論 ユーザ削除時のCognitoのトリガはない。ユーザ側で実装する必要あり
残念ながらCognitoでのユーザ削除をトリガにLambda関数を実行することはできませんでした。ユーザ削除関数を作ってその中でCognitoのユーザ削除APIを呼ぶ必要があります。
実現したかった事 Cognitoでユーザ削除トリガがあれば使いたかった
当初想定したアーキテクチャ フロントエンドからCognitoのAPIを直接呼び出す
まず考えていたアーキテクチャはフロントエンドが直接CognitoAPIを実行し、JWTを取得。そのJWTを使ってAPIGatewayを呼び出すというものでした。
ここでCognitoのユーザが消された際にLambdaなどをトリガしてDynamoDBやS3に入っているそのユーザに関係するデータを消せればいいな、と考えていました。
Cognitoのトリガでユーザ削除起因のものは存在しなかった
まず思いつくのがCognitoのトリガですが、マネジメントコンソールから確認するにユーザが削除された際のトリガはなさそうでした。
公式ドキュメントを参照しても無さそうです。別の手段を考えるしかありません。
代替手段
没案 EventBridgeやCloudTrailのログを契機にLambda関数をトリガできないか
Cognitoのトリガがないのであれば、EventBridgeやCloudTrailのログを契機にLambdaをトリガする案がありそうです。
しかし、各種AWS公式ドキュメントを参照しても、EventBridgeやCloudTrailに出力される情報はありませんでした。そのためAWSサポートに実現可否を確認してみました。以下、回答をざっくりまとめたもの。
ユーザ削除はCloudTrailログやCloudWatchログに記録されないのでLambda関数をトリガするのは不可能
この案は却下となりました。
代替案 フロントエンドからCognitoのAPI直接呼出しをやめてLambda関数にラッピングさせる
フロントエンドからCognitoAPI直呼び出しはあきらめました。ユーザ削除APIを作成してそこからCognitoを含む各種リソースの削除を実装しました。
フロントエンドから呼び出すのはAPIGateway-Lambdaにしておけば実装の自由度は上がります。
フロントエンドからCognitoなどのAPIを直接呼び出すのは実装の自由度が奪われるので慎重になったほうがいいですね。
まとめ
Cognitoユーザが削除されたトリガーは2023年1月時点では存在しない。実現にはLambdaなどでCognitoのAPIをラッピングする必要がある。フロントエンドを開発する際、AWSサービスのAPIを直接呼び出す実装は慎重になったほうが良いことを学びました。
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当