概要
以前インフラエンジニアとして働いていた現場での出来事。アプリチームからの依頼でCognitoのユーザープールを作成。アプリチームに引き渡し、帰ったらゲームをしようと思いながら休んでいたら…
アプリチーム「ユーザープールのカスタム属性1つ足りなかったので追加してください」
自分「ごめんなさい、今すぐ追加しますorz」
こんな感じでユーザープール作成時にカスタム属性を1つ入れ忘れミスしちゃったーと思いつつ、心の中のもう1人の自分がこんな事を思っていた。
「いや、そのカスタム属性の設定した記憶があるぞ…」
思い立ったが吉日、Slackでそのカスタム属性を検索すると、、以前にも同じカスタム属性が足りないとアプリチームから指摘されている人を発見!
これは単なるヒューマンエラーじゃないと思い検証の結果、とある条件下においてCognitoのユーザープール作成後にカスタム属性が消える現象を確認したので以下に記す。
環境・条件
・AWS Console (CLIは試してないです)
・AWS Cognitoのユーザープール作成時
・標準属性として存在する属性をあえてカスタム属性として設定した時 (アプリチームからの依頼でそのようにしてました)
以上の条件下においてユーザープール作成後に設定したカスタム属性が消えます。
実践
AWS ConsoleにてCognitoの「ユーザープールを作成する」をクリック
属性の追加画面にて、標準属性として存在する「locale」をカスタム属性として設定
ユーザープール作成前の最終確認画面ではカスタム属性「locale」は存在する
ユーザープールは正常に作成されたらしいが…
作成されたユーザープールを確認しにいくと「locale」の属性だけなくなっています
AWSサポートへの問い合わせ結果・対策
AWSサポートに以下を問い合わせを行った。
①ユーザープール作成時に設定したカスタム属性が消えたのは標準属性として存在する属性をカスタム属性にしたからで合ってる?
②ユーザープール作成後は「locale」をカスタム属性として追加できたのは何で?
遠回しに設定ミスなんじゃない?、みたいな一次回答が来たので検証環境の添付画像とともに再現性ある事象である旨説明。
後日担当者から返信がきて、以下のような説明だった。
・Amazon側でも上記の事象について確認できた
・①についてyes
・②についてユーザープール作成時と作成後の属性追加では使用しているAPIが違うから
という返答を頂きました。ご担当者さんありがとうございました。
対策は2通り。
1つ目は前述の通り、ユーザープール作成後にカスタム属性を追加すること。
2つ目は色々いじくっていたら発見した方法で、、
ユーザープール作成時の最終確認画面で「属性」をクリックして属性設定の画面に戻りましょう
※ 現時点でカスタム属性が「test, locale」となっているのを覚えておいてください
属性の設定画面に戻ったら「確認」をクリックして、最終確認画面に戻りましょう(何をやってるんだと思われるかもしれませんがやりましょう(笑))
最終確認画面を確認すると…カスタム属性が「custom:test, custom:locale」に変わってますね!?
この状態で「ユーザープールの作成」をクリックすればカスタム属性が消えずにユーザープールを作成することができます。