如何通过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
相关产品推荐
相关产品推荐

