Azure api 管理 api 策略 terraform

时间:2021-07-01 12:36:31

标签: terraform azure-api-management terraform-provider-azure

我正在尝试使用 terraform 实现一些 api 管理策略。 我创建了一个 api_managementapi_management_api,到目前为止,问题为零,我确实使用 xml_content 向 api 添加了一个策略,并且在创建 base 策略时效果很好..但是如果我想创建多个策略,我会收到一个错误,指出该策略已经存在。

我的地形结构如下:

resource "azurerm_api_management_api" "example" {
  api_management_name = azurerm_api_management.example.name
  display_name = "Api name ${var.env}"
  name = "api-name-${var.env}"
  path = "apiName${var.env}"
  protocols = ["http"]
  resource_group_name = azurerm_resource_group.example.name
  revision = "1"
}

resource "azurerm_api_management_api_policy" "base-policy" {
  api_management_name = azurerm_api_management.example.name
  api_name = azurerm_api_management_api.example.name
  resource_group_name = azurerm_resource_group.example.name
  xml_content = file("./policy.xml")
}
resource "azurerm_api_management_api_policy" "base-policy-random" {
  api_management_name = azurerm_api_management.example.name
  api_name = azurerm_api_management_api.example.name
  resource_group_name = azurerm_resource_group.example.name
  xml_content = file("./policy_2.xml")
}

当我应用此 terraform 时,出现以下错误:

A resource with the ID "/subscriptions/ID/resourceGroups/example/providers/Microsoft.ApiManagement/service/example/apis/example/policies/policy" already exists - to be managed via Terraform this resource needs to be imported into the State. Please see the resource documentation for "azurerm_api_management_api_policy" for more information.

目前在我的 API 策略中,我只应用了 base 策略,我想创建第二个策略,例如名为 policy_two,但据我所知,terraform 试图创建一个第二个名为 base 的策略,这就是它失败的原因。所以我想知道如何指定策略名称?

我希望我已经足够清楚我的问题,非常感谢你们的时间

1 个答案:

答案 0 :(得分:0)

对于一个 API,您只能有一个“BasePolicy”。
这是在 API 管理中设计的。

但是您可以为每个 operation "operation_id" 指定一个策略:

resource "azurerm_api_management_api_operation" "example" {
  #...
}

resource "azurerm_api_management_api_operation_policy" "example" {
  api_name            = azurerm_api_management_api_operation.example.api_name
  api_management_name = azurerm_api_management_api_operation.example.api_management_name
  resource_group_name = azurerm_api_management_api_operation.example.resource_group_name
  operation_id        = azurerm_api_management_api_operation.example.operation_id

  xml_content = <<XML
<policies>
  <inbound>
    <find-and-replace from="xyz" to="abc" />
  </inbound>
</policies>
XML

}