你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
通常,构建对一系列关键事件做出反应的系统。 无论是构建 Web API、响应数据库更改还是处理事件流或消息,都可以使用 Azure Functions 来实现这些系统。
在许多情况下,函数与一系列云服务相集成,可提供功能丰富的实现。 以下列表显示了 Azure Functions 的常见(但绝不详尽)方案。
在文章顶部选择开发语言。
处理文件上传
可以通过多种方式使用函数来将文件处理到 blob 存储容器中或从 blob 存储容器传出。 若要详细了解在 blob 容器上触发的选项,请参阅最佳做法文档中的使用 blob。
例如,在零售解决方案中,合作伙伴系统可以将产品目录信息作为文件提交到 blob 存储中。 上传文件时,可以使用 Blob 触发的函数验证、转换和处理文件到主系统中。
以下教程使用 blob 触发器(基于事件网格)处理 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 等实时输出来准实时地处理数据。
例如,可以使用事件中心触发器从事件中心读取数据,并使用输出绑定在对事件进行解批和转换后将其写入另一个事件中心:
[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 和 Azure 服务集成的无服务器计算资源,以简化构建云托管的智能应用程序。 可以使用 Functions 编程模型创建和托管远程模型内容协议 (MCP) 服务器并实现各种 AI 工具。 有关详细信息,请参阅 “工具和 MCP 服务器”。
借助 Azure OpenAI 绑定扩展,可将 Azure OpenAI 服务的 AI 功能和行为(例如检索扩充生成(RAG)集成到函数代码执行中。 有关详细信息,请参阅 检索增强生成。
函数还可能调用 TensorFlow 模型或 Azure AI 服务来对图像流进行处理和分类。
有关详细信息,请参阅 在 Azure Functions 中使用 AI 工具和模型。
运行计划任务
借助 Functions,可以基于你定义的 cron 计划运行代码。
例如,可以每隔 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 事件数据的函数。 有关详细信息,请参阅 将 Webhook 与 Azure Functions 配合使用来监视 GitHub 事件。
有关示例,请参阅以下代码片段:
[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 概述。
响应数据库更改
某些进程需要在存储的数据更改时记录、审核或执行其他作。 函数触发器提供了一种很好的方式来获取数据更改通知以启动此类操作。
请考虑下列示例:
创建可靠消息系统
可以将 Functions 与 Azure 消息服务配合使用来创建高级事件驱动的消息解决方案。
例如,可以在 Azure 存储队列上使用触发器将一系列函数执行链接在一起。 或者对联机排序系统使用服务总线队列和触发器。
这些文章演示如何将输出写入存储队列:
这些文章演示如何从 Azure 服务总线队列或主题触发。