如何使用Terraform跳过azurerm_api_management资源内指定proxy块的部署
解决方案
问题原因
count参数仅支持在资源、模块、数据源的根层级使用,不能直接作用于资源内部的嵌套块proxy块属于azurerm_api_management资源的预定义嵌套参数,没有内置custom字段,自定义参数会直接报错
正确实现方式
使用Terraform的dynamic动态块语法实现条件生成嵌套块,修改main.tf中hostname_configuration部分的代码如下:
resource "azurerm_api_management" "apim_demo" { name = var.apim_instance_name location = azurerm_resource_group.apim_rg.location resource_group_name = azurerm_resource_group.apim_rg.name publisher_name = var.apim_publisher_name publisher_email = var.apim_publisher_email sku_name = var.apim_sku_name identity { type = "SystemAssigned" } hostname_configuration { # 第一个固定的proxy块保持不变 proxy { default_ssl_binding = true host_name = "qtech" key_vault_id = "https://ssl-key-test789.vault.azure.net/secrets/my-ssl-certificate" negotiate_client_certificate = true } # 第二个proxy块改为动态生成 dynamic "proxy" { for_each = var.test_condition ? [1] : [] content { default_ssl_binding = false host_name = "ftech" key_vault_id = "https://ssl-key-test789.vault.azure.net/secrets/my-ssl-certificate2" negotiate_client_certificate = true } } } }
代码说明
- 动态块的
for_each通过三元表达式控制:当var.test_condition为true时传入单元素列表,生成1个对应的proxy块;为false时传入空列表,不会生成该proxy块 content块内的配置和原有第二个proxy块的参数完全一致,不需要修改原有配置逻辑
内容的提问来源于stack exchange,提问作者devops-admin
相关产品推荐
相关产品推荐

