Serverless Framework で AWS SSO プロファイルが認識されない問題の解決方法
Serverless Framework で AWS SSO プロファイルを使用する際、「AWS profile doesn't seem to be configured」エラーに遭遇したことはありませんか。SSM パラメータの解決でエラーが発生し、デプロイができなくなる問題について、実際の事例とともに解決方法を簡単にまとめました。
発生した問題について
Serverless Framework で AWS SSO プロファイルを使ってデプロイを実行すると、次のようなエラーメッセージが表示されることがあります。
Error:
Cannot resolve serverless.yml: Variables resolution errored with:
- Cannot resolve variable at "custom.userPoolClientId.development": AWS profile "default" doesn't seem to be configured,
- Cannot resolve variable at "custom.userPoolClientId.production": AWS profile "default" doesn't seem to be configured,
- Cannot resolve variable at "custom.hubspotAccessToken.default": AWS profile "default" doesn't seem to be configured,
- Cannot resolve variable at "custom.hubspotAccessToken.production": AWS profile "default" doesn't seem to be configured
このエラーが発生する原因は、Serverless Framework が AWS SSO プロファイルを正しく認識できないためです。その結果、SSM パラメータの解決に失敗してしまいます。
serverless-better-credentials プラグインで解決する
この問題を解決するには、serverless-better-credentials
プラグインを利用します。
プラグインのインストールから始めましょう。
npm install --save-dev serverless-better-credentials
次に、serverless.yml
ファイルの plugins
セクションにプラグインを追加します。
plugins:
- serverless-better-credentials
- serverless-prune-plugin # 既存のプラグインがある場合
AWS SDK が設定ファイルを正しく読み込むために、環境変数の設定も必要です。
export AWS_SDK_LOAD_CONFIG=1
設定が完了したら、Serverless コマンドでデプロイを実行できます。
sls deploy --stage development
sls deploy --stage development --aws-profile default
プラグインが正しく動作していれば、ログに以下のようなコメントが出力されます。
[serverless-better-credentials]
Attempting to automatically open the SSO authorization page in your default browser.
✔ serverless-better-credentials: credentials resolved from config SsoCredentials: AWS_PROFILE (default)
Deploying shifter-userpools-trigger to stage development (us-east-1)
✔ Service deployed to stack shifter-userpools-trigger-development (82s)
もしうまく動かない場合は、SSO のセッションが切れている可能性もあります。ログインを再実行してみましょう。
# SSOログインの実行
aws sso login --profile default
まとめ
Serverless Framework で AWS SSO プロファイルを使用する際の問題は、serverless-better-credentials
プラグインの導入によって解決できます。このプラグインにより、AWS SSO プロファイルの正しい認識が可能になり、SSM パラメータの正常な解決が実現されるでしょう。デプロイプロセスも安定化します。
複数の AWS アカウントを扱う開発環境において、この解決方法は特に威力を発揮するはずです。効率的な開発環境の構築に役立つでしょう。
参考資料
serverless-better-credentials GitHub
Discussion