【问题标题】:Azure API management and App Function backend: Backend with id 'foo' could not be foundAzure API 管理和 App Function 后端:找不到 ID 为“foo”的后端
【发布时间】:2020-03-11 17:43:23
【问题描述】:

在我的公司,我们的应用程序具有相同的环境:IT、ST、AT 和 PRD。我们使用 Terraform 来部署我们的 Azure 资源,目前正在尝试建立一个 API 管理解决方案,将调用传递给 Function App 后端。

设置相当简单,我们声明了一系列 API,并在它们的后端策略中声明了这一点:

<policies>
  <inbound>
    <set-backend-service id="apim-generated-policy" backend-id="function-at" />
  </inbound>
</policies>

在 IT/ST 中,我们已经能够成功设置它。但是,当我们的 Terraform 管道在 AT 上运行时,它总是无法更新我们的 API,并出现以下错误:

Error: Error creating or updating API Operation Policy (Resource Group "rg-at" / API Management Service "api-at" / API "call" / Operation "get-call"):
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 3, column 6: Backend with id 'function-at' could not be found.","target":"set-backend-service"}]

尝试在 Azure UI 中手动添加此行时,出现同样的错误:

Error in element 'set-backend-service' on line 3, column 10:
Backend with id 'function-at' could not be found.

我不明白为什么这拒绝工作。该函数存在并且与 API 管理器位于同一资源组中。我最好的猜测是有人在其他环境中手动更改了未反映在 Terraform 代码中的设置。我该如何解决这个问题?我对 ST 和 AT API/函数进行了并排比较,没有发现任何明显的差异。

提前感谢您的帮助!

【问题讨论】:

    标签: azure terraform azure-api-management azure-function-app


    【解决方案1】:

    我在 Terraform 部署期间遇到了同样的问题,对我来说,解决方案是添加 api_management_backend 并且在策略中我可以参考它。

    【讨论】:

    • 这是正确的。一年后,我们也使用了这个资源并且没有任何问题:)
    【解决方案2】:

    我会说问题是您没有设置 base-url 属性,因此 APIM 服务无法使用 id 检测后端组件。您需要同时指定 base-url 和 backend-id 以防您想使用 id,正如 article 中所解释的那样。

    【讨论】:

    • 感谢您的回答!虽然这不是完全的解决方案,但它确实引导我朝着正确的方向前进。 似乎 API 管理器要使用后端,首先需要了解它。这在 UI 中创建 API 时会自动发生,但在使用 Terraform 或其他解决方案自动执行时,必须使用 Powershell 手动完成。
    【解决方案3】:

    在解决这个问题几天后,问题似乎是要使用后端,这个后端需要首先声明,以便 API 管理器将其视为可用。我无法在 UI 中找到可以查看或编辑这些“可用”后端的任何地方,但我根据(非常稀疏的)描述 here 得出了这个结论。

    当通过 UI 手动添加 API 时,这个过程似乎也是自动完成的。然而,在尝试使用 Terraform 时并非如此,因此正确的过程似乎是首先使用 Powershell 发布后端,然后尝试使用 TF 将其添加到 API。

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多