使用terraform在Azure APIM api中创建新操作



我已经用下面的代码在Azure中创建了一个API。

resource "azurerm_api_management_api" "api-foo" {
name                = "Example"
resource_group_name = data.azurerm_resource_group.rg.name
api_management_name = data.azurerm_api_management.apim_service.name
revision            = "1"
display_name        = "example-foo"
path                = "apifoo"
protocols           = ["https", "http"]
description         = "some text here"
import {
content_format = "openapi-link"
content_value  = "https://publicapi.azurewebsites.net/swagger/v1/swagger.json"
}
}

也是根级策略。

resource "azurerm_api_management_api_policy" "api-foo" {
api_name            = azurerm_api_management_api.api-foo.name
api_management_name = data.azurerm_api_management.apim_service.name
resource_group_name = data.azurerm_resource_group.rg.name
#operation_id        = azurerm_api_management_api_operation.api-foo.operation_id
xml_content = <<XML
<policies>
<inbound>
<set-backend-service base-url="https://publicapi.azurewebsites.net" />
<base />     
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
XML
}

现在我有了更多带有新端点的swager定义,我想将它们添加到相同的Api中,但我不知道如何使用terraform实现这一点。也不想去掉我已经有的那个。如果我用新的swager文件替换content_value,我将删除我已经拥有的。有办法做到这一点吗?另外,在创建操作Id后,我如何在输出中获得操作Id ?我希望新操作的ID关联到一些策略,但不是作为根级别。仅操作策略级别(必须为这个新策略创建一个新模块)

您不能在Azure api管理实例中为同一api添加不同的swagger/openapi定义。通过导入api定义,api操作将由您选择作为目标的api下面的Azure api管理服务自动生成。您可以在相同的Azure api管理实例中创建新api(使用与第一个api不同的api后缀)并在那里导入新定义,或者您可以手动将api定义合并到一个文件中(假设api共享相同的基本api url)并用它替换现有的api。第三个选项是将第二个api定义中的操作手动添加到Azure api管理实例中的第一个api下面,但这将是很麻烦的,因为你还必须手动调整每个操作的策略,使其后端指向第二个api定义的基础URL。

最新更新