Terraform 地形空和非空块地图变量
我想用Terraform做后端服务。我使用资源类型Terraform 地形空和非空块地图变量,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我想用Terraform做后端服务。我使用资源类型google\u计算\u后端\u服务 现在,我有了两个通过gcloud命令创建的后端服务。一个正在使用cdn\u策略,另一个未使用cdn\u策略 第一个后端服务状态如下 ... "cdn_policy": [ { "cache_key_policy": [], "signed_url_cache_max_age_sec": 3600 } ] ... 第二个后端
google\u计算\u后端\u服务
现在,我有了两个通过gcloud
命令创建的后端服务。一个正在使用cdn\u策略
,另一个未使用cdn\u策略
第一个后端服务状态如下
...
"cdn_policy": [
{
"cache_key_policy": [],
"signed_url_cache_max_age_sec": 3600
}
]
...
第二个后端服务是
"cdn_policy": []
如何创建terraform脚本对它们都有效?因此,terraform脚本可以为具有cdn\U策略
包含在其块映射中的后端服务运行,也可以为没有cdn\U策略
的后端服务运行
在我的想法中,我可以创建2个地形脚本。第一个是cdn_政策,第二个是没有cdn_政策。但是,我认为这不是最佳做法
如果我将
cdn_policy=[]
,将导致错误此处不需要名为“cdn_policy”的参数您可以使用动态块根据输入变量中的对象列表创建一组块:
可以使用动态块根据输入变量中的对象列表创建一组块:
我认为,您的答案是第一个后端服务的良好实现,它在tfstate上有cdn_策略块。第二个没有cdn_策略的后端服务呢?“cdn_政策=[]”?因为我以前不知道动态块,所以我竖起大拇指,这是个好主意。如果var.cdn_policy=[]
,那么动态块根本就不会创建,并且从资源中完全忽略。这是一个为列表中的每个项目创建一个块的过程。所以空列表,没有块。包含1项、1块的列表。。。列出2个项目,2个块,等等。我认为,您的答案是第一个后端服务的良好实现,它在tfstate上有cdn_策略块。第二个没有cdn_策略的后端服务呢?“cdn_政策=[]”?因为我以前不知道动态块,所以我竖起大拇指,这是个好主意。如果var.cdn_policy=[]
,那么动态块根本就不会创建,并且从资源中完全忽略。这是一个为列表中的每个项目创建一个块的过程。所以空列表,没有块。包含1项、1块的列表。。。包含2项、2块等的列表。
resource "google_compute_backend_service" "service" {
...
dynamic "cdn_policy" {
for_each = var.cdn_policy
content {
cache_key_policy = cdn_policy.value.cache_key_policy
signed_url_cache_max_age_sec = cdn_policy.value.signed_url_cache_max_age_sec
}
}
}