如何从Action Group传递查询参数至Azure Function并配置ML计算关机
实现Azure Function接收查询参数并配合Action Group触发计算资源关机的方案
一、调整Azure Function以支持查询参数
HTTP触发的Azure Function无需修改URL结构,直接在代码中读取请求的查询参数即可。以下是主流语言的实现示例:
1. C# 示例
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Logging; public static class StopMLComputeFunction { [FunctionName("StopMLCompute")] public static IActionResult Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { // 从查询字符串读取参数 string subscriptionId = req.Query["subscriptionId"]; string resourceGroupName = req.Query["resourceGroupName"]; if (string.IsNullOrEmpty(subscriptionId) || string.IsNullOrEmpty(resourceGroupName)) { return new BadRequestObjectResult("必须提供subscriptionId和resourceGroupName查询参数"); } // 此处插入MASL SDK获取令牌、查询工作区及计算资源并执行关机的逻辑 // ... return new OkObjectResult($"已触发订阅[{subscriptionId}]下资源组[{resourceGroupName}]的计算资源关机操作"); } }
2. Python 示例
import azure.functions as func import logging app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION) @app.route(route="StopMLCompute") def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('处理HTTP触发请求') # 优先读取查询参数,其次读取请求体参数 subscription_id = req.params.get('subscriptionId') resource_group_name = req.params.get('resourceGroupName') if not subscription_id or not resource_group_name: try: req_body = req.get_json() subscription_id = req_body.get('subscriptionId') resource_group_name = req_body.get('resourceGroupName') except ValueError: pass if subscription_id and resource_group_name: # 插入MASL SDK操作逻辑 # ... return func.HttpResponse(f"已触发订阅[{subscription_id}]下资源组[{resource_group_name}]的计算资源关机操作") else: return func.HttpResponse( "请提供subscriptionId和resourceGroupName参数", status_code=400 )
二、配置Action Group向Function传递参数
Action Group调用HTTP Webhook时,支持两种传参方式:
1. 查询参数拼接(GET请求)
直接将参数追加到Function的触发URL后,示例:https://<你的函数应用名>.azurewebsites.net/api/StopMLCompute?subscriptionId=你的订阅ID&resourceGroupName=你的资源组名称
在Action Group中选择GET方法,填入上述拼接后的URL即可。
2. 请求体传参(POST请求)
选择POST方法,自定义请求体内容:
{ "subscriptionId": "你的订阅ID", "resourceGroupName": "你的资源组名称" }
这种方式更适合参数较多或需要加密的场景,需确保Function代码支持从请求体读取参数(如上述Python示例逻辑)。
三、关联预算与Action Group
- 进入Azure门户的预算服务,创建/编辑目标资源组的预算规则
- 设置预算阈值(例如超出预算90%时触发警报)
- 在警报关联环节,选择你创建的Action Group
- 保存设置后,当预算触发阈值时,会自动调用Action Group中的Function
关键注意事项
- 权限配置:需为Function的系统分配/用户分配身份授予
Microsoft.MachineLearningServices/workspaces/computes/stop/action权限,以及读取工作区、计算资源的权限 - 测试验证:先手动访问带参数的Function URL,确认关机逻辑正常执行;再设置低阈值预算触发警报,验证Action Group的调用链路是否通畅
内容的提问来源于stack exchange,提问作者Onki
相关产品推荐
相关产品推荐

