移除google_compute_network_endpoints后,Terraform为何未删除另一端点?
google_compute_network_endpoints资源后,端点保留情况的疑问 我通过以下Terraform代码向GCP网络端点组添加端点:
resource "google_compute_network_endpoint" "endpoint1" { network_endpoint_group = google_compute_network_endpoint_group.neggroup.name port = google_compute_network_endpoint_group.neggroup.default_port zone = local.primary_zone ip_address = "10.10.10.1" } resource "google_compute_network_endpoints" "endpoint2" { network_endpoint_group = google_compute_network_endpoint_group.neggroup.name zone = local.primary_zone network_endpoints { port = "7301" ip_address = "10.10.10.1" } }
补充信息:目标网络端点组的network_endpoint_type为"NON_GCP_PRIVATE_IP_PORT",默认端口为7300。
之后我移除了上述代码中的google_compute_network_endpoints.endpoint2资源,执行terraform plan后发现,计划仅销毁google_compute_network_endpoints.endpoint2相关的端点,而不会删除由google_compute_network_endpoint.endpoint1创建的端点。我的预期是移除该资源后仍能保留endpoint1对应的端点,请问这种情况是否正常?还是我的端点添加方式有误?
terraform plan的输出内容如下:
- 销毁资源 "google_compute_network_endpoints" "endpoint2" { - id = "xxxx/us-east1-b/yyyy/endpoints" -> null - network_endpoint_group = "zzzzz" -> null - project = "aaaaa" -> null - zone = "us-east1-b" -> null - network_endpoints { - ip_address = "10.10.10.1" -> null - port = 7300 -> null } - network_endpoints { - ip_address = "10.10.10.1" -> null - port = 7301 -> null } }
计划:0 个添加,0 个变更,1 个销毁。
这种情况完全正常,你的端点添加方式没有问题。
核心原因是google_compute_network_endpoint和google_compute_network_endpoints是两个独立的Terraform资源,各自管理属于自己的网络端点:
google_compute_network_endpoint是单个端点的独立管理资源,每个实例对应一个网络端点,Terraform会单独跟踪它的生命周期,只有当你移除这个资源定义时,才会销毁对应的端点。google_compute_network_endpoints是批量端点的集合管理资源,它的作用是将一组端点绑定到同一个资源实例下,当你移除这个资源定义时,Terraform会销毁所有由它管控的端点,但不会影响其他独立资源(比如google_compute_network_endpoint.endpoint1)管理的端点。
你看到terraform plan输出中endpoint2资源下有两个端点,可能是因为该资源实例在之前的部署中实际管控了这两个端点(比如历史配置变更导致),但这并不影响endpoint1的独立性——只要google_compute_network_endpoint.endpoint1的资源定义还在你的配置文件中,Terraform就会持续维护这个端点的存在,不会因为endpoint2资源的移除而受到影响。
内容的提问来源于stack exchange,提问作者user1400856

