Terraform:在azure中指定后端类型

sim*_*ati 5 azure azure-api-management terraform

上下文:在 Azure 中手动部署后端服务时,系统会提示我选择类型:自定义、azure 或服务结构。

在此输入图像描述

如何通过 terraform 声明类型(我想选择 Azure 资源)并说出我想使用哪个应用程序?根据文档,它说使用应用程序的资源 ID(我在部署开始时生成的),我尝试了以下操作:

    resource "azurerm_api_management_backend" "polo-backend" {
  name                = "polo-backend"
  resource_group_name = azurerm_resource_group.polo-rg.name
  api_management_name = azurerm_api_management.polo-api-mgmt.name
  protocol            = "http"
  url                 = "https://myurl"
  resource_id = azurerm_windows_web_app.app-service.id
}
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

错误:创建/更新后端:(名称“polo-backend”/服务名称“polo-api-mgmt”/资源组“polo1-default-rg”):apimanagement.BackendClient#CreateOrUpdate:响应请求失败:StatusCode=400 -- 原始错误:autorest/azure:服务返回错误。Status = 400 Code =“ValidationError”Message =“一个或多个字段包含不正确的值:”详细信息= [{“code”:“ValidationError”,“message”:“值应代表绝对http URL”,“target”:“资源 ID"}]

此外..如果应用程序是使用 terraform 生成的,我如何在 URL 部分动态分配 URL?

sim*_*ati 4

所以我找到了我的问题的答案:

基本上,您必须传递资源 ID,即所需资源的文字 URL。通过目前不支持的参数传递它,或者我试图分配的参数是错误的。

所以我设法做的是使用数据模块尽可能地“模板化”代码:

    resource "azurerm_api_management_backend" "polo-backend" {
name                = "polo-backend"
resource_group_name = azurerm_resource_group.polo-rg.name
api_management_name = azurerm_api_management.polo-api-mgmt.name
protocol            = "http"
url                 = "https://${azurerm_windows_web_app.app-service.name}.azurewebsites.net"
resource_id = "https://management.azure.com/subscriptions/${data.azurerm_client_config.mysubid.subscription_id}/resourceGroups/${azurerm_resource_group.polo-rg.name}/providers/Microsoft.Web/sites/${azurerm_windows_web_app.app-service.name}"
}
Run Code Online (Sandbox Code Playgroud)

如果有人有比这更好的解决方案,请随时提出建议!

编辑:感谢您的回答 - 我能够使用以下方法解决错误:

resource_id = "https://${azurerm_windows_function_app.functionapp.name}.azurewebsites.net${azurerm_windows_function_app.functionapp.id}"
Run Code Online (Sandbox Code Playgroud)