terraformでIAMユーザを削除できなかった
terraformでIAMユーザを削除しようとしたところ
aws_iam_user.user1: Destroying... [id=user1]
aws_iam_user.user2: Destroying... [id=user2]
╷
│ Error: deleting IAM User user1: DeleteConflict: Cannot delete entity, must delete access keys first.
│ status code: 409, request id: <id>
│
│
╵
╷
│ Error: deleting IAM User user2: DeleteConflict: Cannot delete entity, must delete access keys first.
│ status code: 409, request id: <id>
このように出力されて削除できなかった。
tfファイルはこんな感じ
resource "aws_iam_user" "user1" {
name = "user1"
}
解決
このようにforce_destroy
をtrueにするとdestroyが出来るようになった
(一度applyで適用し、再度destroy)
resource "aws_iam_user" "user1" {
name = "user1"
force_destroy = true
}
force_destroy
を詳しく見てみる
ドキュメントより引用
force_destroy - (Optional, default false) When destroying this user, destroy even if it has non-Terraform-managed IAM access keys, login profile or MFA devices. Without force_destroy a user with non-Terraform-managed access keys and login profile will fail to be destroyed.
- デフォルトでfalse
- trueにすると、terraform管理外のリソースも削除する
ログインプロファイルがterraform管理外であったため、削除できなかった...っぽい...?
またこのように書かれていました
NOTE: If policies are attached to the user via the aws_iam_policy_attachment resource and you are modifying the user name or path, the force_destroy argument must be set to true and applied before attempting the operation otherwise you will encounter a DeleteConflict error. The aws_iam_user_policy_attachment resource (recommended) does not have this requirement.
-
aws_iam_policy_attachment
に変更を加える場合、force_destroy
が必要- 記載がないとDeleteConflict error.
-
aws_iam_user_policy_attachment
の場合は起こらない
aws_iam_user_policy_attachment
を使えということですね
でも
aws_iam_user_policy_attachment
使ってるんだよな
resource "aws_iam_user_policy_attachment" "attach1" {
user = aws_iam_user.user1.name
policy_arn = data.aws_iam_policy.S3FullAccess.arn
}
不審に思ってもう一度apply、destoryを実行したら問題なく削除出来た。
なんだったんだろう