概要
AWS Cloudformationで作成したインスタンスプロファイルがうまく削除できずに残ってしまった場合、どのように削除すればいいのか?という疑問にぶち当たったので、こちらで紹介します。
経緯
EC2テンプレートやインスタンスプロファイルを含むリソースをAWS Cloudformationで作成しました。
インスタンスプロファイルは、IAMロールをEC2インスタンスに関連付けるために使用されるものです。インスタンスプロファイルそのものについては以下の記事で図解がありわかりやすいです。
しかし、EC2が不要となり削除することに。
いざCloudformationからスタックごと削除しようとすると、IAMユーザー権限の問題でインスタンスプロファイルが削除できませんでした。その時は一旦SKIPして、後でインスタンスプロファイルが紐づいたIAMロールを削除してすれば綺麗に消えると思っていたので、そのままSKIPしました。
しかし、該当のスタックからそのIAMロールを削除しようとしたら、以下のエラーになりました。
Resource handler returned message: "Cannot delete entity, must remove roles from instance profile first.
これに関しては、該当のIAMロールを管理コンソールから確認します。
↑のように、「インスタンスプロファイルのARN」と概要に書いてありますね。
ここを見れば「このIAMロールがインスタンスプロファイルに紐づいているんだな」ということがわかります。
※最初見つからずに「どこに書いてあるの?」と思いましたw
「編集」を押せばインスタンスプロファイルとの切り離しができるのかな?と思いましたが、それはできず。
このロール自体を手動で削除したらIAMロールの削除自体は実行できました。
これでインスタンスプロファイルも一緒に消えたかな...
と思っていたら、まだインスタンスプロファイルは残っているんです。
管理コンソールから確認する場合は、起動テンプレートの「高度な詳細」から選択できるインスタンスプロファイルがプルダウンで表示されるのでそこから残っているかどうか確認できます(後述docのCLIコマンドでも確認可能)。
使わないのに残っているのは気持ち悪いですよね。
しかし...管理コンソールからはどこを探してもインスタンスプロファイルを削除する方法はありませんでした。
削除する方法
ということで、公式ドキュメントを見るとCLIコマンドで削除ができるとのことです。
ロールと同じ名前でない限り、コンソールを使用してインスタンスプロファイルを削除することはできません。ロールを削除する過程でインスタンスプロファイルを削除する必要があります。ロールを同時に削除することなくインスタンスプロファイルを削除するには、AWS CLI または AWS API を使用する必要があります。詳細については、次のセクションを参照してください。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_manage_delete.html
以下のCLIコマンドを使います。
後ろのinstance-profile-name
に、削除したいインスタンスプロファイルの名前を指定してください。
aws iam delete-instance-profile --instance-profile-name instance-profile-name
ようやく削除できた...。
インスタンスプロファイル、管理コンソールでいじれるようにしてくれないかなぁ...