API 管理 - 在 Terraform 中将后端服务设置为操作策略
API Management - Set Backend Service as Operation Policy in Terraform
我正在使用 Terraform 在 Azure 中创建一个 APIM。到目前为止,我已经能够创建 APIM 实例、API 和 API 中的操作。因为我希望 API 的每个操作都指向一个单独的逻辑应用程序,所以我的理解是我不能将其设置为 azurerm_api_management_backend
,而是需要在 XML 的操作策略中设置它.
我的操作策略是这样的:
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="/subscriptions/xxx/resourceGroups/hm-iac-msdn-neu-rg/providers/Microsoft.Logic/workflows/testLogicApp" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
XML
}
我已经创建了逻辑应用程序并从 Azure CLI 检索了资源 ID,并将其包含在 set-backend-service
节点中。但是尽管从 CLI 获得了 ID,我还是得到了以下响应:
│ Error: creating or updating API Operation Policy (Resource Group "apim-resource-group" / API Management Service "harry-test-apim" / API "test_api_dev" / Operation "get-complaints"): apimanagement.APIOperationPolicyClient#CreateOrUpdate: Failure responding to request: StatusCode=400 -- Original Error: autorest/azure: Service returned an error. Status=400 Code="ValidationError" Message="One or more fields contain incorrect values:" Details=[{"code":"ValidationError","message":"Error in element 'set-backend-service' on line 5, column 10: Backend with id '/subscriptions/xxx/resourceGroups/hm-iac-msdn-neu-rg/providers/Microsoft.Logic/workflows/testLogicApp' could not be found.","target":"set-backend-service"}]
我更愿意使用资源 ID 来设置它,而不是使用 base-url
。
backend-id 与 ARM id 不同。不好找,所以解决方法是在APIM前端生成策略,然后在代码中应用。
我正在使用 Terraform 在 Azure 中创建一个 APIM。到目前为止,我已经能够创建 APIM 实例、API 和 API 中的操作。因为我希望 API 的每个操作都指向一个单独的逻辑应用程序,所以我的理解是我不能将其设置为 azurerm_api_management_backend
,而是需要在 XML 的操作策略中设置它.
我的操作策略是这样的:
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="/subscriptions/xxx/resourceGroups/hm-iac-msdn-neu-rg/providers/Microsoft.Logic/workflows/testLogicApp" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
XML
}
我已经创建了逻辑应用程序并从 Azure CLI 检索了资源 ID,并将其包含在 set-backend-service
节点中。但是尽管从 CLI 获得了 ID,我还是得到了以下响应:
│ Error: creating or updating API Operation Policy (Resource Group "apim-resource-group" / API Management Service "harry-test-apim" / API "test_api_dev" / Operation "get-complaints"): apimanagement.APIOperationPolicyClient#CreateOrUpdate: Failure responding to request: StatusCode=400 -- Original Error: autorest/azure: Service returned an error. Status=400 Code="ValidationError" Message="One or more fields contain incorrect values:" Details=[{"code":"ValidationError","message":"Error in element 'set-backend-service' on line 5, column 10: Backend with id '/subscriptions/xxx/resourceGroups/hm-iac-msdn-neu-rg/providers/Microsoft.Logic/workflows/testLogicApp' could not be found.","target":"set-backend-service"}]
我更愿意使用资源 ID 来设置它,而不是使用 base-url
。
backend-id 与 ARM id 不同。不好找,所以解决方法是在APIM前端生成策略,然后在代码中应用。