Terraform重建GCP虚拟机后IAM角色丢失问题求助
GCE虚拟机重建后IAM角色丢失问题解决
我使用Terraform管理GCE实例,通过google_compute_instance_iam_member或google_compute_instance_iam_binding为实例绑定IAM角色。当修改实例的hostname时,实例会按预期重建,但绑定的IAM角色会丢失,必须再次执行terraform apply才能恢复权限。
相关配置如下:
resource "google_compute_disk" "root_test_iam" { name = "root-test-iam" zone = local.backend_zone type = "pd-ssd" size = 50 image = "ubuntu-2004-lts" lifecycle { prevent_destroy = false } } resource "google_compute_instance" "test_iam" { name = "test-iam" zone = local.backend_zone machine_type = "e2-standard-2" allow_stopping_for_update = false deletion_protection = false hostname = "test-member.xxx-yyy.com" boot_disk { source = google_compute_disk.root_test_iam.self_link auto_delete = false } network_interface { subnetwork = module.network.us_bare_name network_ip = google_compute_address.test_iam_internal.address } service_account { email = google_service_account.backend_machine.email scopes = ["cloud-platform"] } advanced_machine_features { threads_per_core = 2 } } resource "google_compute_instance_iam_member" "root_iam_group" { project = var.project zone = local.backend_zone instance_name = google_compute_instance.test_iam.name role = "roles/compute.osAdminLogin" member = "group:game_backend@xxx.com" }
问题原因
当修改hostname触发实例重建时,GCE会销毁旧实例并创建一个全新的实例资源(即使实例名称保持不变)。而google_compute_instance_iam_member通过instance_name关联实例,Terraform检测到该资源的参数未发生变化,因此不会自动重新执行绑定操作。但旧实例销毁时,对应的IAM绑定会被GCE自动移除,新实例自然就没有权限了。
解决方法
通过lifecycle块的replace_triggered_by参数,让IAM绑定资源在实例重建时自动更新。实例重建后其唯一标识id会发生变化,将其作为触发器即可:
resource "google_compute_instance_iam_member" "root_iam_group" { project = var.project zone = local.backend_zone instance_name = google_compute_instance.test_iam.name role = "roles/compute.osAdminLogin" member = "group:game_backend@xxx.com" lifecycle { # 当实例ID变化时,重新创建IAM绑定 replace_triggered_by = [google_compute_instance.test_iam.id] } }
这样,当实例因hostname修改重建时,Terraform会自动销毁旧的IAM绑定,并为新实例创建新的绑定,无需手动再次执行terraform apply。
如果使用google_compute_instance_iam_binding资源,同样可以添加这个lifecycle配置来解决问题。
内容的提问来源于stack exchange,提问作者a1dude
相关产品推荐
相关产品推荐

