You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform创建APIM多GET操作后Azure门户不显示问题求助

问题描述

已通过Terraform创建Azure资源组、APIM实例、HealthCheck API及其GET操作。尝试创建第二个GET API操作(testData)时,Terraform计划与执行均显示成功,状态文件也有相应变更,但Azure门户中该操作未出现在HealthCheck API下。请问如何成功创建多个GET操作?

现有Terraform代码

资源组

resource "azurerm_resource_group" "testrg" {
  name     = "test-resources"
  location = "eastus2"
}

APIM实例

resource "azurerm_api_management" "testApim" {
  name                = "test-apim"
  location            = azurerm_resource_group.testrg.location
  resource_group_name = azurerm_resource_group.testrg.name
  publisher_name      = "My Company"
  publisher_email     = "company@terraform.io"

  sku_name = "Developer_1"
}

HealthCheck API

resource "azurerm_api_management_api" "testApi" {
  name                = "test-api"
  resource_group_name = azurerm_resource_group.testrg.name
  api_management_name = azurerm_api_management.testApim.name
  revision            = "1"
  display_name        = "HealthCheck"
  service_url         = "<url>"
  protocols           = ["https"]
}

第一个GET操作(HealthCheck)

resource "azurerm_api_management_api_operation" "healthcheck" {
  operation_id        = "get"
  api_name            = data.azurerm_api_management_api.testApi.name
  api_management_name = data.azurerm_api_management_api.testApim.api_management_name
  resource_group_name = data.azurerm_api_management_api.testrg.resource_group_name
  display_name        = "HealthCheck"
  method              = "GET"
  url_template        = "/Healthcheck"
  response {
    status_code = 200
  }
}

尝试创建的第二个GET操作(testData)

resource "azurerm_api_management_api_operation" "testData" {
  operation_id        = "get"
  api_name            = data.azurerm_api_management_api.testApi.name
  api_management_name = data.azurerm_api_management_api.testApim.api_management_name
  resource_group_name = data.azurerm_api_management_api.testrg.resource_group_name
  display_name        = "Testdata"
  method              = "GET"
  url_template        = "/Testdata"
  response {
    status_code = 200
  }
}

问题原因及解决方法

1. 错误引用数据源而非资源

操作代码中错误使用data.azurerm_api_management_api来引用API、APIM实例和资源组,但这些都是当前配置中通过resource块创建的资源,应直接引用资源属性,而非数据源。数据源data用于读取已存在的外部资源,不适合引用当前Terraform正在管理的资源。

2. 重复的operation_id

两个操作的operation_id均设为"get",而operation_id是API下操作的唯一标识,重复ID会导致第二个操作无法正确创建或覆盖第一个操作,这是Azure门户中看不到第二个操作的核心原因。

修正后的代码

第一个GET操作(HealthCheck)

resource "azurerm_api_management_api_operation" "healthcheck" {
  operation_id        = "healthcheck-get" # 设置唯一操作ID
  api_name            = azurerm_api_management_api.testApi.name
  api_management_name = azurerm_api_management.testApim.name
  resource_group_name = azurerm_resource_group.testrg.name
  display_name        = "HealthCheck"
  method              = "GET"
  url_template        = "/Healthcheck"
  response {
    status_code = 200
  }
}

第二个GET操作(testData)

resource "azurerm_api_management_api_operation" "testData" {
  operation_id        = "testdata-get" # 设置唯一操作ID
  api_name            = azurerm_api_management_api.testApi.name
  api_management_name = azurerm_api_management.testApim.name
  resource_group_name = azurerm_resource_group.testrg.name
  display_name        = "Testdata"
  method              = "GET"
  url_template        = "/Testdata"
  response {
    status_code = 200
  }
}

验证步骤

  1. 执行terraform plan确认变更,确保两个操作都被识别为新增资源。
  2. 执行terraform apply完成部署。
  3. 登录Azure门户进入APIM实例的HealthCheck API页面,刷新后即可看到两个GET操作。

内容的提问来源于stack exchange,提问作者Asterix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:57:47