認証サービスとしてfirebaseと並んで有名なAWSのcognito。
最近いろいろいじっているのですが、正直かなり使い勝手が悪いです。
結論から言って、ちゃんと使用を理解してから設計しないと、後々面倒なことになります。
使うのであれば、データをなるべくcognito側に持たせないように設計しましょう。
理由は以下の通りです
問題1.1秒間に30回しか呼べない
まずこまるのが、コール回数。1秒間に30回は多く見えますが、こんなものはすぐオーバーします。
たとえば、レコードの作成者の名前をセットしようとしたら、実装によりけりですが、かなりの頻度で呼ばれることになるので、すぐ制限をオーバーしてしまいます。
問題2. 一度に生成できるリストが60件まで
呼び出し回数を少なくするために、最初にユーザーのリストを取得しようとしても、一度にとれる件数が60件までとかなり少なめです。
問題3. 途中で設定を変えられない
これも非常に大きな問題ですが、ユーザープールの設定は途中で変更できません。途中で項目を追加しようとしても、できないので、そういった場合はユーザープールを作り直す必要があります。
一応、インポートとかはできるようですが、パスワードは引き継がれない?ので頻繁にできるものではありません。
問題4. 検索が貧弱すぎる
検索機能も貧弱です。デフォルトで用意されているパラメータでしか検索ができません。カスタム属性といって、キーを追加することができますが、カスタム属性の検索はできません。
問題5. 所属するグループがわからない
ユーザーにグループ属性を付けることができますが、通常のユーザー取得APIからのレスポンスにはグループが入っていません。
グループに所属するユーザーを取得するというAPIから取ってくるしかなさそうで使い物になりません。
問題やまづみcognito
いかがだったでしょうか?とにかく使い勝手が最悪です。
確かに、電話番号認証とか手軽にできるので、そういった部分は良いと思いますが、認証以外の機能が本当にひどいの一言に尽きます。
ですので、”認証に必要な情報以外一切もたせない”設計にしたほうが良いでしょう。
もしくは、Congito イベント というものがあるようなので、(使ってないのでできるかわかりませんが)、ユーザー情報が更新されたら、lambdaでイベントを受け取ってDBに内容を転記する。検索はDBの情報を使う。
というような設計にすべきかと思います。