🪤
【AWS SAM】デプロイ時にハマりやすいstack関連の罠
デプロイ時に陥った、CloudFormationのstack周りでの潜在的なエラーが発生した時の解決法です。
2パターンのエラーで多くのSAMユーザーが躓きそうだなと思ったので、記事にしました。
case1: stackのスタックの状態に関するエラー
ここでハマってる人割といそう。。
Error: Failed to create managed resources: Waiter StackCreateComplete failed: Waiter encountered a terminal failure state: For expression "Stacks[].StackStatus" we matched expected path: "ROLLBACK_COMPLETE" at least once
Error: Stack aws-sam-cli-managed-default is missing Tags and/or Outputs information and therefore not in a healthy state (Current state:ROLLBACK_COMPLETE). Failing as the stack was likely not created by the AWS SAM CLI
上記エラー2つのような、stackのステータスが ROLLBACK_COMPLETE などのターミナル状態なため、正常なstackとして扱えないとのこと。
解決法
AWS Management ConsoleのCloudFormationで行う場合
アクティブ
内のROLLBACK_COMPLETEのstackを削除する。
※あらかじめ指定したRegionにて
CLIで行う場合
$ aws cloudformation list-stacks
{
"StackSummaries": [
{
"StackId": ~~~~~~,
"StackName": "hogehoge",
~~~~~~
~~~~~~
"StackStatus": "ROLLBACK_COMPLETE",
~~~~~~
~~~~~~
}
]
}
$ sam delete --stack-name hogehoge
case2: IAMユーザー権限周りのアクセス拒否系エラー
Error: Failed to create/update the stack: stack名, Waiter StackCreateComplete failed: Waiter encountered a terminal failure state: For expression "Stacks[].StackStatus" we matched expected path: "CREATE_FAILED" at least once
エラーの内容だけ見てもパッとしない。。
ので、--debug
オプション付けてみる。
$ sam deploy --guided --debug
すると、、
API: iam:CreateRole User:
arn:aws:iam::hogehogehoge
is not authorized to perform:
~~~~
~~~~
と赤字でエラーが出ていた。
要するに、IAMユーザーに対して、必要なPolicyが不足していて失敗しているようだ。
上記エラーの場合だと、iam:CreateRole
権限を持つpolicyが不足していることが示されている。
ちなみに記載はしないが、cloudformation:CreateChangeSet
権限を持つpolicyも必要です。
解決法
deployコマンドに--debug
オプションを付けて、
適宜、IAMユーザーに対して必要なPolicyを追加してあげると良さそう。
参考
Discussion