0
0

aws-cli バージョン違いによるcloudformation deploy 実行ステータスコード255

Last updated at Posted at 2024-09-05

bashのスクリプト内でaws-cliを使ってCloudFormation deployを行っている部分があり、新たにCloudFormation deployのコードを追加したところ、aws-cliのバージョンによって、挙動が異なったので、ソレについて話す。

きっかけ

会社のサービスで使用している年期の入ったCircleCIのビルドスクリプトに、新しくCloudFormation Deployを追加したところ、スタックに変更がなくメッセージ出力されてスクリプトの後続処理が停止した。

No changes to deploy. Stack ExampleStack is up to date

原因

ローカル環境で動作を確認したときのaws-cliバージョンとCircleCIで動いているaws-cli
のバージョンが異なることで、CloudFormation deployの返すスクリプトの終了ステータスコードが異なっていたことで、ローカル環境では発生しなかった問題がCircleCIで発生した。

ローカル環境

  • python: v3.9.13
  • aws-cli: v2.17.40

CircleCI

  • python: v3.6.5
  • aws-cli: v1.15.7

aws-cli: v2.17.40

$ aws cloudformation deploy \
--template-file ./deploy \
--stack-name ExampleStack \
--capabilities CAPABILITY_NAMED_IAM

echo $? # 0

v2.17.40では、終了ステータスコードを0の値を返しており、正常終了している。

aws-cli: v1.15.7

$ aws cloudformation deploy \
--template-file ./deploy \
--stack-name ExampleStack \
--capabilities CAPABILITY_NAMED_IAM

echo $? # 255

v1.15.7では、終了ステータスコードを255の値を返しており、これが原因でスクリプトが途中で終了してしまいそれが原因で後続処理が止まっていた。

解決方法

古のCircleCIのビルドスクリプトを修正したくなかったので、何か良い方法はないかと
aws-cliのドキュメントを漁っていたら、--no-fail-on-empty-changesetをつけることで終了ステータスコードを0にできそうだったのでそれで対応した。

変更後
$ aws cloudformation deploy \
--template-file ./deploy \
--stack-name ExampleStack \
--capabilities CAPABILITY_NAMED_IAM \
+ --no-fail-on-empty-changeset

deploy
https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/
--no-fail-on-empty-changeset (boolean) Specify if the CLI should return a non-zero exit code if there are no changes to be made to the stack. The default behavior is to return a non-zero exit code.

まとめ

古のビルドスクリプト化しないようにしっかりCIはメンテナンスしたほうがいい
このビルドスクリプトはどうやらgitの更新履歴を見る限り7年前にfirst commitされていて、そこから秘伝のタレを今日まで作っていたようだ

技術負債をしっかり解消できるように努めていきたい
・・・そういうことに前向きな組織じゃないと難しいけどネ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0