Open2

AWS Amplifyの自分用トラブルシューティング

吉村吉村

Env

OS: Win11
Node.js: 20.12.2 / npm 10.5.2

@aws-amplify/cli: 12.11.1
aws-amplify: 6.0.30

aws-cli: 2.15.41 Python/3.11.3 Windows/10 exe/AMD64 prompt/off

Amplifyは現状バックエンドの生成ツールとしてAmplify CLI(Gen1)とGen2を用意している。
Gen2の方はまだプレビュー版ということで、今回はCLIでの実行を想定している。
プレビュー版触ってみた限りでは開発体験良かったので、早くGAされて欲しい。

2024/5/7 GAされました。上記取り消し線はGA前環境です。
引き続きGen2で詰まったところ等々このスクラップに吊り下げていきます。

@aws-amplify/backend: 1.0.0
@aws-amplify/backend-cli: 1.0.1
aws-amplify: 6.2.0

吉村吉村

amplify init時に想定プロファイルと別のプロファイルでinitが実行される

※Gen1時のスクラップです。Gen2がGAされたのでもう無いと思います。

詳しく掘ってないが、以下の状況の時に起こる。

  • aws configureでアクセスキー・シークレットキーを利用したdefaultプロファイルを設定済み
  • amplify initしたいアカウントは別のアカウント(SSO Login)

ようは.aws/configが以下のような状態かつ、credentialにdefaultのアクセスキーが存在している状態。

[profile default]
region={region}

[profile sso-profile]
sso_session=sso-session-another-account
sso_account_id={another account id}
sso_role_name={role}
region={region}
output=json

[sso-session sso-session-another-account]
sso_start_url=https://{storeid}.awsapps.com/start
sso_region={region}
sso_registration_scopes=sso:account:access

この際、amplify init時にsso-profileを指定してもデフォルトのアカウントを利用してバックエンド・プロジェクトを作成してしまう。

> aws sso login --profile sso-profile
> # ログイン処理…

> amplify init
> # 対話型シェルで初期設定。デフォルト設定を拒否し、各種設定を行う。
> ? Initialize the project with the above configuration? # No

> # 設定の最後の方に設定を行うプロファイル選択。SSOのプロファイルを指定
> ? Please choose the profile you want to use # sso-profile

> # ... デプロイとamplifyフォルダの作成が行われる。
> # another accountの方で作られて欲しいが、アクセスキーを生成したIAM Userが所属するアカウントでAmplifyのプロジェクトが作られる。

「一度Web GUIで作成してamplify pullすれば上手いこと見繕ってくれないだろうか」等々やってみたが無理そうだったので、環境変数を事前に設定し、aws-cliに利用するプロファイルを明示することで回避した。

> # Powershellのプロセス環境変数設定。bashならexportでいいんじゃないだろうか。
> Env:AWS_PROFILE='sso-profile'

エディタやコンソール立ち上げるたびに設定する必要はあるが、どうせSSO Loginは必須なので一手間増えたところでREADMEとかにメモっておけば問題ないと考えて採用。

他にもaws-sso-utilを使う手などもあるが、ただでさえややこしいツールチェインに他のライブラリを介入させたくない、aws-sso-util自体が公式対応がなされるまでの予備手段である、最近ある程度公式対応されつつあるなどの理由から見送った。

先にGen2から生成したアプリを試し、こちらでは問題なかった(npx amplify <command> --profile <profile-name>でコマンドごとにprofile指定できる)ため、CLIでもそのまま機能すると思っていたが全然そんなことはなかった。
「SSO設定しとるってことはアクセスキーはもう廃止しとるやろ!」という判断なんだろうか。
なんにせよ、自分の環境のレアケースだと思うので備忘録程度に置いておくにとどめる。

参考:
https://docs.amplify.aws/javascript/tools/cli/start/set-up-cli/
https://docs.amplify.aws/react/start/getting-started/setup/
https://zenn.dev/bloomblock/articles/694ab11600f3b8
https://zenn.dev/pantone170145/articles/aws-amplify-use-sso-account