在我公司中,我们的应用程序具有相同的环境: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 /功能进行了并排比较,没有发现任何明显的差异。
在此先感谢您的帮助!
答案 0 :(得分:1)
在Terraform部署期间,我遇到了同样的问题,对我来说,解决方案是添加api_management_backend,并且在策略上我可以引用它。
答案 1 :(得分:0)
我要说的问题是您没有设置base-url属性,因此APIM服务无法使用id检测后端组件。如本article所述,您需要同时指定base-url和backend-id。
答案 2 :(得分:0)
在解决了该问题几天后,似乎出现的问题是要使用后端,首先需要声明该后端,以便API管理器将其视为可用。我无法在用户界面中找到可以查看或编辑这些“可用”后端的任何地方,但是我基于(非常稀疏的)here描述得出了这个结论。
当通过UI手动添加API时,该过程似乎也是自动完成的。但是,当尝试使用Terraform进行操作时情况并非如此,因此看来正确的过程是首先使用Powershell发布后端,然后尝试使用TF将其添加到API。