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

如何通过Terraform在Azure API Manager中新增API版本

Terraform实现Azure APIM现有API新增版本方案

在Azure APIM中给已有API追加新版本,核心是正确关联已有的API版本集,不需要重建原有API,不管是新增版本还是反向工程现有v1、v2配置都可以按下面的逻辑实现。

核心资源对应关系

你在Portal UI里看到的版本分组、单个版本API的层级,在Terraform azurerm provider里对应两类资源,不要搞混:

  • azurerm_api_management_api_version_set:版本集,是所有同API不同版本的上层容器,给已有API加版本时绝对不要新建重复的版本集,直接引用现有API绑定的版本集即可
  • azurerm_api_management_api:具体的单个版本API,比如你要新增的v3版本,通过version_set_id字段关联到上述版本集,同时通过version字段指定当前版本号
    后续给版本配置操作、后端策略、产品绑定、OpenAPI导入的逻辑,和你配置现有v1、v2版本的写法完全一致,没有特殊规则。

可直接套用的代码示例

注意:示例中保留了现有资源的引用逻辑,反向工程现有配置时可以直接对照替换参数

# 引用已存在的资源组和APIM实例,不需要新建
data "azurerm_resource_group" "apim_rg" {
  name = "替换为你现有APIM所在的资源组名"
}

data "azurerm_api_management" "apim_instance" {
  name                = "替换为你现有APIM实例名"
  resource_group_name = data.azurerm_resource_group.apim_rg.name
}

# 引用现有API已经绑定的版本集,版本集名称可以在Portal现有API的「版本」设置页查到
data "azurerm_api_management_api_version_set" "existing_version_set" {
  name                = "替换为现有API绑定的版本集名"
  resource_group_name = data.azurerm_resource_group.apim_rg.name
  api_management_name = data.azurerm_api_management.apim_instance.name
}

# 新建目标版本API,示例为新增v3版本
resource "azurerm_api_management_api" "api_v3" {
  name                = "自定义新版本API的资源名,比如 demo-api-v3"
  resource_group_name = data.azurerm_resource_group.apim_rg.name
  api_management_name = data.azurerm_api_management.apim_instance.name
  revision            = "1"
  display_name        = "对外展示的API名,比如 Demo API V3"
  # 核心配置:关联版本集+指定版本号
  version             = "v3"
  version_set_id      = data.azurerm_api_management_api_version_set.existing_version_set.id
  # 路径和同组其他版本保持一致即可,APIM会根据版本标识自动路由
  path                = "demo-api"
  protocols           = ["https"]
}

# 示例:给新版本配置后端转发策略,其他操作、产品绑定等配置和v1/v2写法完全一致
resource "azurerm_api_management_api_policy" "api_v3_policy" {
  api_name            = azurerm_api_management_api.api_v3.name
  api_management_name = data.azurerm_api_management.apim_instance.name
  resource_group_name = data.azurerm_resource_group.apim_rg.name
  xml_content = <<XML
<policies>
  <inbound>
    <base />
    <set-backend-service base-url="替换为v3版本对应的后端服务地址" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
</policies>
XML
}

反向工程现有配置的注意事项

  • 导出v1、v2配置时,所有版本必须关联同一个版本集ID,如果每个版本都单独建了版本集,apply后会在Portal里显示成多个独立API,不会归到同一个版本分组下
  • 如果你的API最开始是无版本状态,后续才开启版本功能,导出配置时重点核对无版本API的is_current标记和版本集关联关系,避免出现配置漂移
  • 执行terraform plan时重点检查变更计划,如果出现要删除/重建现有版本集、替换已有v1/v2 API的提示,立刻终止操作,检查版本集关联参数是否正确,不要直接apply

操作界面参考

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:31:01