如何通过Terraform对接API Management与已部署Function App
Terraform 配置 Azure API Management 对接已部署 Function App 方法
AzureRM Provider v3.0+ 版本已经原生支持该对接能力,和控制台点选的效果完全一致,不需要手动拼接函数密钥、后端地址,配置步骤如下:
- 第一步:引用已部署的存量资源
因为你的Function App和APIM已经提前部署完成,先通过Terraform数据源读取两个资源的属性,不需要重复创建:
# 读取已存在的APIM实例 data "azurerm_api_management" "apim" { name = "<替换为你的APIM实例名称>" resource_group_name = "<替换为APIM所在资源组名称>" } # 读取已存在的Linux Function App,Windows版本替换为azurerm_windows_function_app数据源即可 data "azurerm_linux_function_app" "func" { name = "<替换为你的Function App名称>" resource_group_name = "<替换为Function App所在资源组名称>" }
- 第二步:创建APIM后端绑定Function App
这一步对应控制台里「添加API -> 选择Function App」的核心绑定逻辑,配置后APIM会自动同步Function的访问密钥,后续密钥轮换也会自动适配,不需要手动维护:
resource "azurerm_api_management_backend" "func_backend" { name = "azure-func-backend" resource_group_name = data.azurerm_api_management.apim.resource_group_name api_management_name = data.azurerm_api_management.apim.name protocol = "https" url = "https://${data.azurerm_linux_function_app.func.default_hostname}" # 指定后端类型为Azure Function App credentials { source = "Azure-Function-App" } # 绑定Function App资源ID,完成身份关联 azure_function_app { function_app_id = data.azurerm_linux_function_app.func.id } }
- 第三步:创建APIM API与路由转发规则
绑定后端后,按需创建API和对应操作,把请求转发到Function App的HTTP触发器即可:
resource "azurerm_api_management_api" "func_api" { name = "func-http-api" resource_group_name = data.azurerm_api_management.apim.resource_group_name api_management_name = data.azurerm_api_management.apim.name revision = "1" display_name = "HTTP触发器接口" path = "func" protocols = ["https"] } # 示例:绑定单个HTTP触发器路由,替换method和url_template为你实际的函数配置 resource "azurerm_api_management_api_operation" "http_trigger" { operation_id = "http-trigger-op" api_name = azurerm_api_management_api.func_api.name api_management_name = data.azurerm_api_management.apim.name resource_group_name = data.azurerm_api_management.apim.resource_group_name display_name = "HTTP触发入口" method = "GET,POST" url_template = "/api/HttpExample" # 关联之前创建的Function后端 backend { backend_id = azurerm_api_management_backend.func_backend.id } }
配置注意事项
- 如果Function App开启了网络访问限制,需要把APIM实例的出站IP段加入Function App的允许规则,同区域部署建议开启VNet服务端点,走内网流量转发,避免公网暴露
- 如果需要批量导入Function App下所有HTTP触发器,不需要手动逐个配置operation,可以在
azurerm_api_management_api资源中增加import块,指定导入格式为openapi,源地址为Function App的OpenAPI文档地址(需要提前在Function App配置中开启OpenAPI导出能力) - 对接完成后,所有APIM的访问管控能力(IP限流、JWT校验、订阅鉴权、访问日志等)都可以正常配置,和控制台手动绑定的效果没有差异
- 不要使用低于v3.0版本的AzureRM Provider做该配置,旧版本不支持
azure_function_app配置块,需要手动在请求头中注入x-functions-key,后续函数密钥轮换时会出现服务中断。
内容的提问来源于stack exchange,提问作者HLT
相关产品推荐
相关产品推荐

