【问题标题】:Create new operation in Azure APIM api with terraform使用 terraform 在 Azure APIM api 中创建新操作
【发布时间】:2021-11-19 23:06:59
【问题描述】:

我已经使用以下代码在 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 与某些策略相关联,而不是作为根级别。只是操作策略级别(必须为此新策略创建一个新模块)

【问题讨论】:

    标签: azure terraform azure-api-management


    【解决方案1】:

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

    【讨论】:

    • 嗯,关于第二种方法。它们有不同的基本 URL。所以是:API-foo。内部:{操作 1 URL a}、{操作 2 和 3 URL b}。如果我只创建一个文件,如您所说,使用所有不同的 openapi 定义,我不能只为共享相同基本 URL 的操作创建具有唯一基本 URL 的单个策略吗?或者我该怎么做?也只是将一个 openapi 定义放在一个文件中的下一个定义的下方就可以了吗?
    • 也可以使用openapi json中的操作模块创建操作吗?在大多数示例中,我看到他们以前使用模式,但不太清楚如何为此定义模式
    • 如果您打算只为两个不同的后端 API 使用一个 API,则必须为操作创建不同的策略。在策略中,您需要使用 &lt;set-backend-service base-url="base URL of the backend service" /&gt; 来指向另一个后端 api。您还可以指向 Azure API 管理后端,在其中定义一次 URL,然后使用相同的策略引用它,例如 &lt;set-backend-service backend-id="identifier of the backend entity specifying base URL of the backend service" /&gt;
    • 目前无法使用完整的api定义创建单个操作。但是您可以手动从您的 api 定义文件中提取操作定义并将其用于操作模式。
    • 我读到了,但不太清楚如何提取操作以从模式中导入。我没有找到他们指出的页面。这个例子如何?获取模式中的操作? github.com/RaphaelYoshiga/TerraformBasics/blob/master/…
    猜你喜欢
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2023-03-02
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多