如何通过Azure Bicep获取Microsoft.Web/sites/functions并接入API Management
通过Azure Bicep将Function App的HTTP触发函数导入API Management
问题背景
原本可通过以下REST API获取Function App下的所有函数:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/functions?api-version=2022-03-01
但Bicep内置的资源列表函数中没有对应的list*方法,需求是获取Function App中所有带@HttpTriggers的函数,并将这些函数映射添加到Azure API Management。
解决方案
由于Bicep没有直接提供列出Function App函数的内置函数,可通过以下两种方式实现需求:
方法1:通过az rest调用REST API实现
在Bicep中借助az rest命令调用原REST API获取函数列表,筛选出HTTP触发的函数后,批量创建APIM的API及操作。
示例代码:
param subscriptionId string = subscription().subscriptionId param resourceGroupName string param functionAppName string param apimServiceName string param apiBaseName string = 'FunctionAppHttpApis' // 调用REST API获取Function App所有函数 var allFunctions = json(az rest --method get --uri "/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Web/sites/${functionAppName}/functions?api-version=2022-03-01" --query "value" -o json) // 筛选出带HTTP触发器的函数 var httpTriggerFunctions = [for func in allFunctions: { functionName: func.name httpMethod: func.properties.config.bindings[0].method invokePath: '/${func.name}' } if func.properties.config.bindings[0].type == 'httpTrigger'] // 创建APIM基础API resource apimBaseApi 'Microsoft.ApiManagement/service/apis@2023-03-01-preview' = { name: '${apimServiceName}/${apiBaseName}' properties: { displayName: 'Function App HTTP触发API集合' path: 'function-app' protocols: ['https'] serviceUrl: 'https://${functionAppName}.azurewebsites.net' } } // 为每个HTTP触发函数创建APIM操作 resource apimFunctionOperations 'Microsoft.ApiManagement/service/apis/operations@2023-03-01-preview' = [for func in httpTriggerFunctions: { parent: apimBaseApi name: func.functionName properties: { displayName: func.functionName method: func.httpMethod urlTemplate: func.invokePath } }]
方法2:部署后自动化补充
如果需要纯ARM/Bicep原生部署流程,可先完成Function App和APIM的基础资源部署,再通过Azure CLI/PowerShell脚本在部署后调用REST API获取函数列表,批量导入到APIM;也可借助Azure Policy触发自动导入逻辑。
注意事项
- 部署身份需具备Function App的读取权限和APIM的写入权限
- 筛选HTTP触发器的逻辑需根据实际函数绑定结构调整,部分函数可能存在多个绑定,需遍历所有绑定项找到
type为httpTrigger的条目 - 使用
az rest方式时,部署环境需已安装并配置Azure CLI
内容的提问来源于stack exchange,提问作者Mohit Kumar
相关产品推荐
相关产品推荐

