我正在尝试使用 terraform 实现一些 api 管理策略。
我创建了一个 api_management
和 api_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
的策略,这就是它失败的原因。所以我想知道如何指定策略名称?
我希望我已经足够清楚我的问题,非常感谢你们的时间
答案 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
}