你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

Azure Functions 方案

通常,构建对一系列关键事件做出反应的系统。 无论是生成 Web API、响应数据库更改还是处理事件流或消息,都可以使用Azure Functions来实现这些系统。

在许多情况下,函数与一系列云服务相集成,可提供功能丰富的实现。 以下列表显示了适用于Azure Functions的常见(但绝不详尽)方案。

在文章顶部选择开发语言。

处理文件上传

可以通过多种方式使用函数来将文件处理到 blob 存储容器中或从 blob 存储容器传出。 若要详细了解在 blob 容器上触发的选项,请参阅最佳做法文档中的使用 blob。

例如,在零售解决方案中,合作伙伴系统可以将产品目录信息作为文件提交到 blob 存储中。 上传文件时,可以使用 Blob 触发的函数来验证、转换和处理文件到主系统中。

使用 Azure Functions 的文件上传过程图示。

以下教程使用 Azure Blob 触发器(基于Azure 事件网格)来处理 Blob 容器中的文件:

例如,可以将 Blob 触发器与 Blob 容器上的事件订阅配合使用:

[FunctionName("ProcessCatalogData")]
public static async Task Run([BlobTrigger("catalog-uploads/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myCatalogData, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myCatalogData.Length} Bytes");

    using (var reader = new StreamReader(myCatalogData))
    {
        var catalogEntry = await reader.ReadLineAsync();
        while(catalogEntry !=null)
        {
            // Process the catalog entry
            // ...

            catalogEntry = await reader.ReadLineAsync();
        }
    }
}

实时流和事件处理

云应用程序、IoT 设备和网络设备生成并收集大量客户数据。 Azure Functions 可准实时地将这些数据作为热路径进行处理,然后将其存储在 Azure Cosmos DB 中,以供在分析仪表板中使用。

函数还可以使用低延迟事件触发器(如事件网格)和 SignalR 等实时输出来近乎实时地处理数据。

使用 Azure Functions 的实时流处理过程图.

例如,可以使用事件中心触发器从事件中心读取数据,并使用输出绑定在对事件进行解批和转换后将其写入另一个事件中心:

[FunctionName("ProcessorFunction")]
public static async Task Run(
    [EventHubTrigger(
        "%Input_EH_Name%",
        Connection = "InputEventHubConnectionSetting",
        ConsumerGroup = "%Input_EH_ConsumerGroup%")] EventData[] inputMessages,
    [EventHub(
        "%Output_EH_Name%",
        Connection = "OutputEventHubConnectionSetting")] IAsyncCollector<SensorDataRecord> outputMessages,
    PartitionContext partitionContext,
    ILogger log)
{
    var debatcher = new Debatcher(log);
    var debatchedMessages = await debatcher.Debatch(inputMessages, partitionContext.PartitionId);

    var xformer = new Transformer(log);
    await xformer.Transform(debatchedMessages, partitionContext.PartitionId, outputMessages);
}

构建AI驱动应用

使用 Azure Functions 向 AI 客户端提供数据和 API,并为事件驱动应用添加 AI 推理。

让你的数据和API向AI开放

AI客户和代理需要能够受控访问业务数据、API和应用逻辑的工具。 你可以使用 Azure Functions 构建并托管远程 Model Context Protocol (MCP) 服务器,并将这些功能作为工具提供。 Functions 为您的 MCP 服务器提供托管、认证、网络、监控和扩展功能。

例如,你可以将产品库存、客户账户数据或现有的业务API作为工具,供AI客户发现并调用。

图示显示一个 AI 客户端调用由 Azure Functions 托管的远程 MCP 服务器,该服务器提供对业务 API 和数据的受控访问。

将AI推理加入商务活动

某些业务事件需要先经过推理,应用程序才能决定下一步该怎么做。 Azure Functions 托管技能允许你在 Markdown 中定义 AI 驱动的工作,并从计划、HTTP 请求、队列消息、存储变更及其他事件开始。 托管技能可以在返回结果或执行动作前调用工具和服务。

例如,托管技能可以对收到的投诉进行分类并路由到相应的队列。 对于更复杂的工作,动态工作流可以创建一个持久化的多步骤计划,使其能够并行执行任务、等待外部条件,并在工作节点重启后恢复执行。

图示显示在 Azure Functions 上启动托管技能的事件、消息和日程,该 Functions 使用 Foundry 模型,可以调用工具、API、连接器和动作。

运行计划任务

借助 Functions,可以基于你定义的 cron 计划运行代码。

若要了解详细信息,请参阅 在按计划运行的 Azure 门户中创建函数。

例如,可以每隔 15 分钟分析一个金融服务客户数据库中的重复条目,以避免向同一客户发送多个通信。

计划任务的示意图,其中函数每隔 15 分钟清理一个数据库,并根据业务逻辑删除条目。

有关示例,请参阅以下代码片段:

[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, ILogger log)
{
    if (myTimer.IsPastDue)
    {
        log.LogInformation("Timer is running late!");
    }
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

    // Perform the database deduplication
}

生成可缩放的 Web API

HTTP 触发的函数定义 HTTP 终结点。 这些终结点运行可以直接连接或通过使用绑定扩展连接到其他服务的函数代码。 可以将这些终结点组合到一个基于 Web 的 API 中。

还可以将 HTTP 触发的函数终结点用作 Webhook 集成,例如 GitHub Webhook。 通过这种方式,可以创建处理来自GitHub事件的数据的函数。 有关详细信息,请参阅 Azure Functions HTTP 触发器。

使用 Azure Functions 处理 HTTP 请求的示意图。

有关示例,请参阅以下代码片段:

[FunctionName("InsertName")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
    [CosmosDB(
        databaseName: "my-database",
        collectionName: "my-container",
        ConnectionStringSetting = "CosmosDbConnectionString")]IAsyncCollector<dynamic> documentsOut,
    ILogger log)
{
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    string name = data?.name;

    if (name == null)
    {
        return new BadRequestObjectResult("Please pass a name in the request body json");
    }

    // Add a JSON document to the output container.
    await documentsOut.AddAsync(new
    {
        // create a random ID
        id = System.Guid.NewGuid().ToString(),
        name = name
    });

    return new OkResult();
}

构建无服务器工作流

函数通常充当无服务器工作流拓扑中的计算组件,例如逻辑应用工作流。 还可以使用 Durable Functions 扩展创建长时间运行的业务流程。 有关详细信息,请参阅 Durable Functions 概述。

<tags>基于 Azure Functions 的特定无服务器工作流序列的组合图。</tags>

请考虑下列示例:

响应数据库更改

某些进程需要在存储的数据更改时记录、审核或执行其他作。 函数触发器提供了一种很好的方式来获取数据更改通知以启动此类操作。

用于响应数据库更改的函数的关系图。

请考虑下列示例:

  • 快速入门:使用 Azure Functions 响应 Azure SQL 数据库 中的数据库更改

创建可靠消息系统

可以将 Functions 与Azure消息传送服务配合使用来创建高级事件驱动的消息传送解决方案。

例如,可以在Azure 存储队列上使用触发器,将一系列函数执行链接在一起。 或者对联机排序系统使用服务总线队列和触发器。

在可靠消息系统中的 Azure Functions 图示。

这些文章演示如何将输出写入存储队列:

这些文章演示如何从Azure 服务总线队列或主题触发。

后续步骤