使用Terraform创建Azure APIM后端遇ValidationError错误求助
用Terraform创建Azure API Management后端时遭遇400验证错误
错误信息
module.apim_backends.azurerm_api_management_backend.example: Creating... ╷ │ Error: creating/updating Backend (Subscription: "e*******-ce34-****-****-0151ca9****4" │ Resource Group Name: "**-**-**-devqa" │ Service Name: "*******" │ Backend: "example"): unexpected status 400 (400 Bad Request) with error: ValidationError: One or more fields contain incorrect values: │ │ with module.apim_backends.azurerm_api_management_backend.example, │ on ..\modules\apimgmt\backends\backends.tf line 1, in resource "azurerm_api_management_backend" "example": │ 1: resource "azurerm_api_management_backend" "example" {
相关Terraform代码
resource "azurerm_api_management_backend" "example" { name = format("%s%s", "example", var.env) description = format("%s%s", "example", var.env) api_management_name = var.apim_name resource_group_name = var.resource_group_name protocol = "http" url = format("%s%s%s", "https://***", var.env, ".azurewebsites.net/api") resource_id = var.example_id tls { validate_certificate_chain = false validate_certificate_name = false } }
Terraform执行计划片段
+ resource "azurerm_api_management_backend" "example" { + api_management_name = "*****" + description = "***" + id = (known after apply) + name = "example" + protocol = "http" + resource_group_name = "rg-*****-*****-*****" + resource_id = "/subscriptions/e*******-ce34-****-****-0151ca9****4/resourceGroups/rg-*****-*****-devqa/providers/Microsoft.Web/sites/example" + url = "https://*******.azurewebsites.net" + tls { + validate_certificate_chain = false + validate_certificate_name = false } }
环境与需求
- 使用Terraform Azurerm Provider 3.107.0
- 仅需创建APIM后端,后续API与策略将通过Swagger由流水线生成,策略示例:
<set-backend-service id="apim-generated-policy" backend-id="example" />
可能的解决方向
修正Azure资源后端的配置方式:当后端为Azure Web App这类Azure托管资源时,应使用
azure_backend块而非顶层的resource_id字段。调整代码如下:resource "azurerm_api_management_backend" "example" { name = format("%s%s", "example", var.env) description = format("%s%s", "example", var.env) api_management_name = var.apim_name resource_group_name = var.resource_group_name protocol = "http" url = format("%s%s%s", "https://***", var.env, ".azurewebsites.net/api") azure_backend { resource_id = var.example_id } tls { validate_certificate_chain = false validate_certificate_name = false } }顶层
resource_id字段适用于非Azure托管的自定义资源,直接设置会触发Azure的验证逻辑冲突。校验URL与资源的一致性:执行计划中显示的URL为
https://*******.azurewebsites.net,但代码中拼接的是带/api后缀的地址,确认变量var.env替换后是否生成了正确的端点,确保URL是Web App的有效可访问地址。检查后端名称的合规性:APIM后端名称要求长度在1-80字符之间,仅允许字母、数字、连字符、下划线和点,确认生成的名称符合规则。
升级Azurerm Provider版本:3.107.0版本可能存在该资源的已知bug,尝试升级到最新的兼容版本(如3.110.0+)后重新执行。
内容的提问来源于stack exchange,提问作者Thomaz
相关产品推荐
相关产品推荐

