我无法在一个 API 管理 GW 下创建多个 api。每个API都有相同的后端,但开放的api文档不同。下面是我的代码。不确定我收到的错误是因为我在循环中使用的逻辑还是因为提供程序版本。
resource "azurerm_api_management" "apim" {
name = "azdlgleuw-apim-bhaskar-007"
resource_group_name = azurerm_resource_group.windows-function-rg.name
location = "west Europe"
publisher_name = "sharat"
publisher_email = "[email protected]"
virtual_network_type = "Internal"
sku_name = "Developer_1"
virtual_network_configuration {
subnet_id = azurerm_subnet.api-subnet.id
}
depends_on = [azurerm_subnet_network_security_group_association.apim-subnet-nsg,azurerm_public_ip.api-pip]
public_ip_address_id = azurerm_public_ip.api-pip.id
}
resource "azurerm_api_management_api" "sharatapimgmntapi" {
for_each = var.apimanagementapi
name = each.value["name"]
resource_group_name = azurerm_resource_group.windows-function-rg.name
api_management_name = azurerm_api_management.apim.name
revision = each.value["revision"]
display_name = each.value["display_name"]
path = each.value["path"]
protocols = each.value["protocols"]
import {
content_format = "openapi"
content_value = file("${path.module}/${each.value["content_value"]}")
}
}
resource "azurerm_api_management_api_policy" "example" {
for_each = var.apimanagementapi
api_name = azurerm_api_management_api.sharatapimgmntapi[each.key].name
api_management_name = azurerm_api_management.apim.name
resource_group_name = azurerm_resource_group.windows-function-rg.name
xml_content = <<XML
<policies>
<inbound>
<base />
<set-backend-service base-url="https://functionapp-001.azurewebsites.net/api" />
</inbound>
</policies>
XML
}
variable "apimanagementapi" {
type = map(any)
default = {
apimanagementapi_1 = {
name = "bhaskar-import-api-001"
revision = "1"
display_name = "sharat-latestAPI"
path = "extranet/v1"
protocols = ["https"]
content_value = "ExtranetAPIopenapi.yaml"
},
apimanagementapi_2 = {
name = "bhaskar-import-moreapi-001"
revision = "1"
display_name = "bhaskar-latestAPI"
path = "ext/v2"
protocols = ["https"]
content_value = "moreapi.yaml"
},
apimanagementapi_3 = {
name = "bhaskar-import-newapi-001"
revision = "1"
display_name = "nan-latestAPI"
path = "ex/v3"
protocols = ["https"]
content_value = "newapi.yaml"
}
}
}
我的目录中有所有这些内容值文件。
错误:
│ Error: creating/updating Api (Subscription: "xxxxxxxxxxxx"
│ Resource Group Name: "azdlgleuw-rg-bhaskarapigw-001"
│ Service Name: "azdlgleuw-apim-bhaskar-007"
│ Api: "bhaskar-import-moreapi-001;rev=1"): polling after CreateOrUpdate: executing request: unexpected status 404 (404 Not Found) with error: ResourceNotFound: Api not found.
│
│ with azurerm_api_management_api.sharatapimgmntapi["apimanagementapi_2"],
│ on main.tf line 318, in resource "azurerm_api_management_api" "sharatapimgmntapi":
│ 318: resource "azurerm_api_management_api" "sharatapimgmntapi" {
│
│ Error: creating/updating Api (Subscription: "xxxxxxxxxxxxxxxxxxxxxx"
│ Resource Group Name: "azdlgleuw-rg-bhaskarapigw-001"
│ Service Name: "azdlgleuw-apim-bhaskar-007"
│ Api: "bhaskar-import-newapi-001;rev=1"): polling after CreateOrUpdate: executing request: unexpected status 404 (404 Not Found) with error: ResourceNotFound: Api not found.
│
│ with azurerm_api_management_api.sharatapimgmntapi["apimanagementapi_3"],
│ on main.tf line 318, in resource "azurerm_api_management_api" "sharatapimgmntapi":
│ 318: resource "azurerm_api_management_api" "sharatapimgmntapi" {
添加
azurerm_resource_group
块,如下所示,并在部署代码时访问它。
还可以使用以下最新版本的
azurerm
提供程序进行部署。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "3.99.0"
}
}
}
provider "azurerm" {
features{}
}
data "azurerm_resource_group" "windows-function-rg"{
name = "xxxx"
}
resource "azurerm_api_management" "apim" {
name = "sampleapimjah"
resource_group_name = data.azurerm_resource_group.windows-function-rg.name
location = "west Europe"
publisher_name = "sharat"
publisher_email = "[email protected]"
# virtual_network_type = "Internal"
sku_name = "Developer_1"
}
resource "azurerm_api_management_api" "sharatapimgmntapi" {
for_each = var.apimanagementapi
name = each.value["name"]
resource_group_name = data.azurerm_resource_group.windows-function-rg.name
api_management_name = azurerm_api_management.apim.name
revision = each.value["revision"]
display_name = each.value["display_name"]
path = each.value["path"]
protocols = each.value["protocols"]
}
resource "azurerm_api_management_api_policy" "example" {
for_each = var.apimanagementapi
api_name = azurerm_api_management_api.sharatapimgmntapi[each.key].name
api_management_name = azurerm_api_management.apim.name
resource_group_name = data.azurerm_resource_group.windows-function-rg.name
xml_content = <<XML
<policies>
<inbound>
<base />
<set-backend-service base-url="https://sharattes-functionapp-001.azurewebsites.net/api" />
</inbound>
</policies>
XML
}
var.tf
:
variable "apimanagementapi" {
type = map(any)
default = {
apimanagementapi_1 = {
name = "bhaskar-import-api-001"
revision = "1"
display_name = "sharat-latestAPI"
path = "extranet/v1"
protocols = ["https"]
content_value = "ExtranetAPIopenapi.yaml"
},
apimanagementapi_2 = {
name = "bhaskar-import-moreapi-001"
revision = "1"
display_name = "bhaskar-latestAPI"
path = "ext/v2"
protocols = ["https"]
content_value = "moreapi.yaml"
},
apimanagementapi_3 = {
name = "bhaskar-import-newapi-001"
revision = "1"
display_name = "nan-latestAPI"
path = "ex/v3"
protocols = ["https"]
content_value = "newapi.yaml"
}
}
}