CloudFormationの削除が失敗そうとしたら、以下のようなエラーが出てスタックが消そうにも消せないという現象がおきた
エラー
Role arn:aws:iam::xxxxxxxx:role/service-role/hogehogeCloudFormation is invalid or cannot be assumed
これの解決策を備忘録的に記載する
原因
私の場合は、エラーに記載されているrole arn:aws:iam::xxxxxxxx:role/service-role/hogehogeCloudFormation
が先に削除されてしまっていたためにCFnのroleが見つからず削除ができないというのが原因だった
解決策
ロールを作って必要なポリシーを付与することでスタックを削除できるようになる
また同じことが起きる気がするのでスクリプト化した。
shell で以下のコマンドを実行することでロールを復活させることができる。
# エラーに記載されているロールの名前を変数に入れる(上記の例の場合"hogehogeCloudFormation"と入力する)
ROLE_NAME=[エラーメッセージに書かれてるロールの名前]
# roleを作る
aws iam create-role --path /service-role/ --role-name $ROLE_NAME --assume-role-policy-document file://<(cat <<EOF
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": { "Service": "cloudformation.amazonaws.com" },
"Action": "sts:AssumeRole"
}
}
EOF
)
# 必要なporicyをアタッチする。この場合はアドミン権限をつけているので注意
aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
備考
ちょうど以下の記事で同じことをやっているが私の場合、roleのpathが合わず、
arn:aws:iam::xxxxxxxx:role/hogehogeCloudFormation
のようなroleが作られてしまうということがあった。
状況に合わせてコマンドの--path
の設定も書き換える必要がありそう