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

如何从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

  1. 进入Azure门户的预算服务,创建/编辑目标资源组的预算规则
  2. 设置预算阈值(例如超出预算90%时触发警报)
  3. 在警报关联环节,选择你创建的Action Group
  4. 保存设置后,当预算触发阈值时,会自动调用Action Group中的Function

关键注意事项

  • 权限配置:需为Function的系统分配/用户分配身份授予Microsoft.MachineLearningServices/workspaces/computes/stop/action权限,以及读取工作区、计算资源的权限
  • 测试验证:先手动访问带参数的Function URL,确认关机逻辑正常执行;再设置低阈值预算触发警报,验证Action Group的调用链路是否通畅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:55:16