Cognito Workshop と追加お試しのメモ
やること
Cognito を触ったことがないので、このワークショップをやる。
メモしながら手を動かしていく。
サインインオプション
- ユーザー名, email, tel を選べる。
- パスワードポリシーの設定可能文字数、特殊文字(アルファベット、記号を含む) etc...
MFA の強制も可能
ユーザー自身がパスワードリセット可能かどうかも設定可能。

- ユーザーがサインインページからサインアップ(アカウント登録)できるかどうかのハンドリングもできる。
- 社内サービスとかだと、管理者が作るような運用がありそう。
属性検証
このページが参考になる。
メールアドレスが正しいかどうか、メールを送って検証するという文脈(だと思う)

属性変更の確認の 「未完了の更新があるときに元の属性値をアクティブに保つ - 推奨」について
昔 Cognito メールアドレス(属性)の変更は以下の仕様だったらしい。
- メールアドレスを変更するように API を叩くと、その瞬間にユーザープールが更新される。
- つまり前のメールアドレスでログインはできない。
- 更新メールアドレスを間違えると、メールアドレスが正しいかどうかの検証メールが届かない。
- 検証が完了していないので、新しいメールアドレスでログインできなくて詰む。(管理者がなんとかできる?)
今はこの問題に対応されていて、このチェックボックスが存在しているという経緯のように見える。
必須の属性
必須の属性が色々と選択できる。
address, birthdate, picture, profile, etc…
メッセージ配信の設定
SES, Cognito のどちらからメールを送信するか選択できる。
Cognito は一日最大50件しか送信できない。
どちらも SES で検証済みのメールアドレスを指定できる。
アプリケーションを統合
Cognito が用意してくれる UI を使わない Option もある。
Cognito の UI を使う場合、ドメインについては xxx.amazoncognito.com か、カスタムドメインを利用できる。
JWT に関する設定
ID Token, Access Token, Refresh Token の有効期限を設定可能。

トークンの取り消し有効化
OpenID Config
https://cognito-idp.{region}.amazonaws.com/{userpoolid}/.well-known/openid-configuration にアクセスすると、
Config 一覧が見られる。
Postman での認証
Postman でも、ここから HostedUIのログイン画面を呼び出して認証できる

Auth URL
- https://{your-cognito-domain}.auth.{your-region}.amazoncognito.com/oauth2/authorize
AccessTokenURL
- https://{your-cognito-domain}.auth.{your-region}.amazoncognito.com/oauth2/token
API Gateway で作った Pets API に認証を追加する
API Gateway に Authorizers という機能がある。
Authorizer type に Lambda, Cognito が選択できた。(今回はもちろんCognito)
Test Authorizer
- Authorization に Postman で取得した id_token を使って
Bearer {id_token}とすることで、認証のテストができる。
- Authorization に Postman で取得した id_token を使って
URL ごとに認証を追加することができる。
↓ GET /pets にだけ追加している時

Postman でテスト
ok

ワークショップ外のお試し
気になること
- 管理者がユーザーを作成し、作成されたユーザーの verify なしでユーザー作成・ログインできるか
- 利用者にパスワード変更を行わせず、管理者がパスワードを変更できるか。
やってみる
セルフサービスのアカウントの復旧を有効化 を OFF にすることで、利用者がパスワード変更を行えなくなる。
自己登録の有効化 を OFF にすることで、利用者がアカウントを作成できない。(Cognito の UI に signup リンクが表示されない。 )
「Cognito アシスト型の検証および確認」 でメッセージを自動的に送信しないを選択することで、アカウント作成時にメールが送信されない。

ユーザー作成
Cognito の JS の SDK を使って作成する形で検証する。
(実際には AWS コンソールを使わず、サービスの管理画面を作成することになるはずなので)
AdminCreateUserCommand が使える。
使ったコードがこれ。
const createUser = async () => {
const input = {
UserPoolId: "...",
Username: "...", // email にした
TemporaryPassword: "...", // パスワード
MessageAction: "SUPPRESS", // SUPPRESS にすると作成完了メールが送信されない
};
const command = new AdminCreateUserCommand(input);
const response = await client.send(command);
};
上記のようにすることで、パスワードを管理者が設定し、ユーザーを作成することができる。
ログイン後、パスワード変更を求める画面が表示される。
(管理者が設定したパスワードを再度使うことも可能。)

パスワードを変更すると、「確認済み」、変更前は「パスワードを強制的に変更」というステータスになる。

作ったリソースを全部消して終わり。
FastAPI で自動生成されるドキュメントの json を取得する
[結論]
/openapi.json にアクセスすると自動生成されたドキュメントの json が取得できる。
FastAPI では自動的に API ドキュメントを生成してくれる機能がある。
/docs もしくは /redoc にアクセスすると自動生成されたドキュメントを確認することができる。
そうすると、この OpenAPI の json, yaml が欲しくなる。
https://github.com/tiangolo/fastapi/issues/2712
に書いてあった。
/openapi.json にアクセスすると良い。
VSCode で Pylance のエラーメッセージが日本語で表示されてしまう
Makefile の .PHONY について
まとめ
Docker を使った開発をしていていて
docker compose up etc をイチイチ書くのが面倒なので、
Makefile を使おうとしたら
make: 'hoge' is up to date と怒られちゃった時の話。
(結論)
実行したいコマンドと同名のディレクトリ, ファイルが存在している時は、
.PHONY をつけよう。
(参考) sumito.jp
ファイル構成は以下のような形
. ├── Makefile ├── backend | └── Dockerfile └── docker-compose.yml
🙅♀️ make backend で怒られる Makefile
up: docker compose up -d backend: docker compose exec backend bash
🙆 make backend が通る Makefile
up: docker compose up -d .PHONY: backend backend: docker compose exec backend bash
詳しく
Makefile はそもそも、
[作りたいもの]: [材料] (-----TAB-----) [作り方]
今回で言うと、 backend を作るために
docker compose exec backend bash を実行すると言う書き方。
なので、 make backend とすると backend を作ろうとして
「すでにあるよ」って怒られちゃう。
(参考) omilab.naist.jp
そこで .PHONY
.PHONY は target はファイル名じゃないと言うことを示すための記法。
(参考) www.gnu.org
なので
.PHONY: backend backend: docker compose exec backend bash
とすることで、 backend と言うファイルを作ろうとしているわけではない
と示すことができ、コマンドを実行することができる。
VSCode で分割した editor の group 間を移動するショートカット
PyCharmから徐々にVSCodeへの乗り換えを進めている。
開発時に左右の分割をよく使う。
↓こんな感じ

分割した時に左右を移動するショートカットが見つからずに困っていた。
PyCharmで言う所の Goto Next Splitter と Goto Previous Splitter
見つけたので誰かの役に立てることを願ってメモ。
View: Focus Left Editor Group と View: Focus Right Editor Group だった。

個人的にはそれぞれ
command + shift + ; と command + shift + ' をあてている。
おしまい。
httpsでcloneしたリポジトリへのpushで起きるエラーの解消
httpsを使って git clone したリポジトリへのpushでusernameとpasswordの入力を求められた。
>> git push -u origin head Username for 'https://github.com': Password for 'https://donaisore@github.com': remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/donaisore/my-app.git/'
ここで GitHub の username と password を入力してもpush出来ない。
どうやら二段階認証の設定をしていると起こるっぽい。
↑このページを参考に token を発行した。
>> git push -u origin head
Username: ${username}
Password: ${token}
で完了。
macでNEologdのインストール
このリンクの本を購入して勉強中。
以下でここに書いてあるサンプルコードが少し登場します。
Neologdってなに?
簡単に言えば、新語が登録されているMecab用の辞書らしい。
例えば、以下のようにMaCabで辞書を指定せずに形態素解析実行した時に
import MeCab
m_t = MeCab.Tagger('-Ochasen')
text = '機械学習が好きです。'
print(m_t.parse(test))
機械学習 という単語が上記で言う所の 新語 に当たり、 機械 と 学習 に分けられてしまう。
そこで、NEologd を使う。
macでNEologdのインストール(本題)
ここに全部書いてあるんだけど、実行したものだけ抽出。
動作に必要なライブラリのインストール $ brew install mecab mecab-ipadic git curl xz NEologdのGitHubのプロジェクトをclone(よく分からないところにcloneしたくないので、 user root に移動) $ cd $ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git 辞書のインストール $ ./bin/install-mecab-ipadic-neologd 途中でyesを入力
で完了。
ちなみに
以下のコマンドでインストール時のオプション一覧が取得できる。
$ ./bin/install-mecab-ipadic-neologd -h
-p オプションを使うことで、インストール先のpathを指定出来るらしい。
↓で書いているが、毎度インストール先の確認をするもの面倒なので、指定しちゃうのはアリかも。
インストール後に困ったこと
MeCabで使う辞書を指定する時に、
import MeCab
m_t = MeCab.Tagger('-Ochasen - d {dict_path}')
と、辞書をインストールしたpathを書いて上げる必要があった。
どこか分からん...
となった。
以下のコマンドでインストール先が分かる。
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd" (出力) /usr/local/lib/mecab/dic/mecab-ipadic-neologd

