使用Terraform创建Google Compute实例组时出现错误但实例组已创建
问题分析与解决方案
首先看你的代码,核心问题出在count参数的使用上——你设置了count = "${var.mastercount}",这会让Terraform创建与master实例数量相同的实例组,每个实例组都会尝试把所有master实例加进去,这显然不是你想要的(你应该是要一个实例组包含所有master VM),这也是执行计划时出现错误的主要原因。
另外还有两处可以优化的细节:
- zone的写法过于冗余,嵌套的变量引用完全没必要
- 新版Terraform已经支持更简洁的变量引用语法
修正后的代码
resource "google_compute_instance_group" "masters" { name = "master-api" description = "Master API group" # 移除count参数,只创建一个实例组 instances = google_compute_instance.master.*.self_link named_port { name = "api" port = "6443" } zone = "${var.region}-b" # 简化zone的拼接写法 }
关键修改说明
- 移除
count参数:这是最核心的修改,这样只会创建一个master-api实例组,自动将所有master实例的self_link列表添加进去,完全匹配你的需求。 - 简化zone表达式:把嵌套的
"${"${var.region}-b"}"简化为"${var.region}-b",代码更易读且功能完全一致。 - 优化引用语法:如果你使用的是Terraform 0.12及以上版本,资源属性引用可以直接写
google_compute_instance.master.*.self_link,不需要额外用${}包裹,语法更简洁。
如果你的master实例本身是通过count参数批量创建的(比如resource "google_compute_instance" "master" { count = var.mastercount ... }),那么google_compute_instance.master.*.self_link会自动生成包含所有master实例self_link的列表,正好可以直接传给实例组的instances参数。
内容的提问来源于stack exchange,提问作者Andy d. H.
相关产品推荐
相关产品推荐

