Terraform配置Azure APIM操作策略用Logic App资源ID设后端报错如何解决
问题原因
set-backend-service策略的backend-id参数只能引用APIM实例内部预先创建的Backend实体ID,不能直接传入Logic App的Azure资源ARM ID,这是你报错的核心原因。
你之前认为无法使用azurerm_api_management_backend是误解,该资源完全支持绑定Logic App类型的后端,适配你每个操作对应独立Logic App的需求。
解决步骤
- 先为对应Logic App创建APIM Backend实体
你可以直接用azurerm_api_management_backend的logic_app块绑定Logic App的资源ID,无需手动填写调用地址:
resource "azurerm_api_management_backend" "get_complaints_logicapp" { name = "la-get-complaints" api_management_name = azurerm_api_management.test-apimManagement.name resource_group_name = azurerm_resource_group.apimResourceGroup.name protocol = "http" logic_app { # 填入你的Logic App资源ID,也可以直接引用Terraform创建的Logic App的id属性 resource_id = "/subscriptions/xxx/resourceGroups/hm-iac-msdn-neu-rg/providers/Microsoft.Logic/workflows/testLogicApp" } }
- 修改操作策略中的
set-backend-service配置
将backend-id的值替换为上面创建的APIM Backend实体的名称,推荐直接用Terraform引用避免硬编码错误:
resource "azurerm_api_management_api_operation_policy" "apim1_ss_cmpcomplaints_api_dev_get_policy" { api_name = azurerm_api_management_api.apim1_ss_api_dev.name api_management_name = azurerm_api_management.test-apimManagement.name resource_group_name = azurerm_resource_group.apimResourceGroup.name operation_id = "get-complaints" xml_content = <<XML <policies> <inbound> <base /> <set-method id="apim-generated-policy">GET</set-method> <set-backend-service id="apim-generated-policy" backend-id="${azurerm_api_management_backend.get_complaints_logicapp.name}" /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies> XML }
额外注意
如果你的Logic App触发器配置了身份验证限制,需要在APIM Backend配置中添加对应的身份验证规则,或者在入站策略中补充认证头,否则APIM转发请求会返回401错误。
内容的提问来源于stack exchange,提问作者HarryMoy
相关产品推荐
相关产品推荐

