无法使用for_each循环创建多个azurerm_api_management_api

问题描述 投票:0回答:1

我无法在一个 API 管理 GW 下创建多个 api。每个API都有相同的后端,但开放的api文档不同。下面是我的代码。不确定我收到的错误是因为我在循环中使用的逻辑还是因为提供程序版本。

主.tf


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"]}")
  }
}

API 策略管理

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
}

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"
      }
  } 
}

我的目录中有所有这些内容值文件。

错误:

│ 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" {
azure terraform azure-api-management
1个回答
0
投票

添加

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"
          }
      } 
    }

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.