通常,你會建立能對一連串關鍵事件做出反應的系統。 無論你是在建置網頁 API、回應資料庫變更,或處理事件串流或訊息,都可以使用 Azure Functions 來實作這些系統。
在許多情況下,函式會與雲端服務整合,以提供功能豐富的實作。 以下列表展示了 Azure 函式常見(但絕非完整)的情境。
在文章頂端選取開發語言。
處理檔案上傳
你可以用多種方式使用函式來處理檔案進出 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();
}
}
}
即時串流和事件處理
雲端應用程式、物聯網裝置與網路裝置產生並收集大量遙測資料。 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);
}
機器學習和人工智慧
Azure Functions 提供與 AI 和 Azure 服務整合的無伺服器計算資源,以簡化建置雲端裝載的智慧型應用程式。 你可以使用 Functions 程式設計模型來建立並架設遠端模型內容協定(MCP)伺服器,並實作各種 AI 工具。 欲了解更多資訊,請參閱 工具與 MCP 伺服器。
Azure OpenAI 綁定擴充功能讓你能將 Azure OpenAI 服務中的 AI 特性與行為,例如檢索增強生成(RAG)整合到函式程式碼執行中。 欲了解更多資訊,請參閱 檢索增強生成。
函數也可以呼叫 TensorFlow 模型或 Azure AI 服務,以處理和分類影像串流。
如需詳細資訊,請參閱 在 Azure Functions 中使用 AI 工具和模型。
執行排程的工作
函式可讓您根據所定義的 cron 排程來執行程式碼。
請參考 Azure 入口網站中「建立一個按排程執行的功能」。
例如,你可以每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 的 webhook 監控 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();
}
建置無伺服器工作流程
函式通常作為無伺服器工作流程拓撲中的計算元件,例如 Logic Apps 的工作流程。 您也可以使用 Durable Functions 延伸模組,來建立長時間執行的協調流程。 如需詳細資訊,請參閱 Durable Functions 概觀。
回應資料庫變更
部分流程在儲存資料變更時需要記錄、稽核或其他操作。 函式觸發程序提供一個好方法,可在資料發生變更以初始化這類作業時收到通知。
請考慮下列範例:
建立可靠的訊息系統
您可以使用 Functions 搭配 Azure 傳訊服務,來建立進階事件驅動傳訊解決方案。
例如,您可以使用 Azure 儲存體佇列上的觸發程序,將一系列函式執行鏈結在一起。 或使用服務匯流排佇列和觸發程序作為線上訂購系統。
這些文章說明如何將輸出寫入記憶體佇列:
這些文章示範如何從 Azure 服務匯流排佇列或主題觸發。