🪤

【AWS SAM】デプロイ時にハマりやすいstack関連の罠

2023/09/02に公開

デプロイ時に陥った、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を追加してあげると良さそう。

参考

https://github.com/aws/aws-sam-cli/issues/3243
https://zenn.dev/tsuvic/articles/40c3836cff492a

Discussion