无法为azurerm_api_management_api使用Terraform for_each块求助
问题根源
你的Terraform配置无法正常工作,核心原因是变量中content_value存储的是file()函数的字符串字面量,而非实际读取的OpenAPI文件内容。Terraform不会自动解析字符串中的函数调用,导致API Management服务接收到的是无效的配置文本。
修复方案
推荐采用类型安全的方式重构配置,确保正确加载OpenAPI文件:
1. 优化变量定义
将content_value改为存储文件路径,并明确变量类型,避免潜在配置错误:
variable "apimanagement" { type = map(object({ name = string revision = string display_name = string path = string protocols = list(string) content_format = string content_path = string # 仅存储文件路径 })) default = { api_management_1 = { name = "flight-health" revision = "1" display_name = "flt-health" path = "extranet/v1" protocols = ["https"] content_format = "openapi" content_path = "${path.module}/openapione.yaml" } api_management_2 = { name = "availabilities" revision = "2" display_name = "avail" path = "extranet/v1" protocols = ["http"] content_format = "openapi" content_path = "${path.module}/openapitwo.yaml" } } }
2. 更新资源配置
在资源块中调用file()函数,读取路径对应的OpenAPI文件内容:
resource "azurerm_api_management_api" "sharatapimgmntapi" { for_each = var.apimanagement name = each.value.name resource_group_name = azurerm_resource_group.windows-function-rg.name api_management_name = azurerm_api_management.apim.name revision = each.value.revision display_name = each.value.display_name path = each.value.path protocols = each.value.protocols import { content_format = each.value.content_format content_value = file(each.value.content_path) # 实际读取文件内容 } }
验证步骤
执行terraform plan,检查输出中content_value字段是否显示为OpenAPI文件的实际YAML内容,而非file(...)字符串。若内容正确,说明配置修复完成。
内容的提问来源于stack exchange,提问作者Sharat Bhaskar
相关产品推荐
相关产品推荐

