在本文中,您將瞭解函數觸發器和函數綁定的高階概念。
觸發程序會導致執行函數。 觸發器定義了如何叫用函數,並且函數必須只有一個觸發器。 觸發程序也可以將資料傳入函式中,就像使用方法呼叫一樣。
將函式綁定是一種以宣告式地將函式連接到其他資源的方式。 繫結會將資料傳遞至函式 (輸入繫結),或可讓您使用繫結參數從函式 (輸出繫結) 寫出資料。 您的函式觸發程序基本上是特殊類型的輸入繫結。
您可以根據函式的特定案例,混合和比對繫結。 繫結是選擇性的,而且函式可能有一或多個輸入和/或輸出繫結。
觸發程序和繫結可讓您避免以硬式編碼存取其他服務。 您的函式會接收函式參數中的資料 (例如佇列訊息的內容)。 您可以使用函式的傳回值來傳送資料 (例如用以建立佇列訊息)。
請考慮下列範例,說明如何實作函式:
| 範例案例 | 觸發程序 | 輸入繫結 | 輸出繫結 |
|---|---|---|---|
| 新的佇列訊息會到達,它會執行函式來寫入另一個佇列。 | 佇列* | 沒有 | 佇列* |
| 排程作業會讀取 Azure Blob 儲存體內容,並建立新的 Azure Cosmos DB 檔。 | 計時器 | Blob 儲存體 | Azure Cosmos DB |
| Azure 事件方格可用來從 Blob 儲存體讀取映像,並從 Azure Cosmos DB 讀取檔以傳送電子郵件。 | 事件方格 | Blob 儲存體和 Azure Cosmos DB | SendGrid |
* 代表不同的佇列。
這些範例並不意味著詳盡無遺,但它們說明瞭如何一起使用觸發器和繫結。 如需更完整的案例集,請參閱 Azure Functions 案例。
秘訣
Azure Functions 不需要您使用輸入和輸出系結來連線到 Azure 服務。 您始終都可在程式碼中建立 Azure SDK 用戶端,並將其改用於資料傳輸。 如需詳細資訊,請參閱連線至服務。
觸發程序和繫結定義
下列範例顯示 HTTP 觸發函式,其輸出繫結會將訊息寫入 Azure 儲存體佇列。
對於 C# 類別庫函式,您可以使用 C# 屬性裝飾方法和參數來設定觸發程序與繫結。 您套用的特定屬性可能取決於 C# 執行階段模型:
HTTP 觸發程序 (HttpTrigger) 定義於會傳回 Run 物件之函式 HttpExample 的 MultiResponse 方法上:
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
此範例顯示物件 MultiResponse 定義。 物件定義會傳回 HttpResponse HTTP 要求,並使用繫結將 QueueOutput 訊息寫入儲存體佇列:
public class MultiResponse
{
[QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
如需詳細資訊,請參閱隔離工作模型的 C# 指南。
舊版 C# 腳本函式會使用 function.json 定義檔。 如需詳細資訊,請參閱 Azure Functions C# 指令碼 (.csx) 開發人員參考。
對於 Java 函數,您可以透過註釋特定方法和參數來配置觸發程式和連結。 這個 HTTP 觸發程序 (@HttpTrigger) 是在針對名為 run 之函式的 HttpTriggerQueueOutput 方法上定義 。 此函式會寫入 @QueueOutput 註釋在 message 參數上定義的儲存佇列:
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
如需詳細資訊,請參閱 Java 開發人員指南。
您定義 Node.js 函式的觸發程式和繫結的方式取決於 Azure Functions Node.js 的特定版本:
在 Azure Functions 第 4 版的 Node.js 中,您可以使用從 @azure/functions 模組匯出的物件來設定觸發器和綁定。 如需詳細資訊,請參閱 Node.js 開發人員指南。
匯出物件 http 上的方法 app 定義 HTTP 觸發器。
storageQueue 方法於 output 定義此觸發程式的輸出繫結。
const { app, output } = require('@azure/functions');
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
},
});
匯出物件 http 上的方法 app 定義 HTTP 觸發器。
storageQueue 方法於 output 定義此觸發程式的輸出繫結。
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: httpTrigger1,
});
此範例 function.json 檔案會定義函式:
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
如需詳細資訊,請參閱 PowerShell 開發人員指南。
函式的定義方式取決於適用於 Azure Functions 的 Python 版本:
在適用於 Azure Functions 第 2 版的 Python 中,您可以使用裝飾器直接在程式碼中定義函式:
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
約束考慮
並非所有服務都支援輸入和輸出繫結。 如需特定繫結的程式碼範例,請參閱您的特定繫結延伸模組。
根據開發語言,觸發程序和繫結會以不同方式定義。 請務必在本文 頂部 選擇您的語言。
觸發程序與繫結名稱僅限於英數字元和
_,底線。
將繫結新增至函式的工作
您可以使用輸入或輸出繫結,以將函數連線至其他服務。 將繫結的特定定義新增至函數,以新增繫結。 若要了解作法,請參閱在 Azure Functions 中將繫結新增至現有函數。
Azure Functions 函式支援多個必須正確設定的繫結。 例如,函式可以從佇列 (輸入繫結) 讀取資料,並同時將資料寫入資料庫 (輸出繫結)。
支援的繫結
此表顯示主要版本的 Azure Functions 執行階段中所支援的繫結:
| 類型 | 1.x1 | 2.x 和更新版本2 | 觸發程序 | 輸入 | 輸出 |
|---|---|---|---|---|---|
| Blob 儲存體 | ✔ | ✔ | ✔ | ✔ | ✔ |
| Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
| Azure 資料總管 | ✔ | ✔ | ✔ | ||
| Azure SQL | ✔ | ✔ | ✔ | ✔ | |
| 達普4 | ✔ | ✔ | ✔ | ✔ | |
| 事件方格 | ✔ | ✔ | ✔ | ✔ | |
| 事件中樞 | ✔ | ✔ | ✔ | ✔ | |
| HTTP 和 Webhook \(英文\) | ✔ | ✔ | ✔ | ✔ | |
| IoT 中心 | ✔ | ✔ | ✔ | ||
| Kafka3 | ✔ | ✔ | ✔ | ||
| 行動應用程式 | ✔ | ✔ | ✔ | ||
| 模型內容通訊協定 | ✔ | ✔ | |||
| 通知中樞 | ✔ | ✔ | |||
| 佇列儲存體 | ✔ | ✔ | ✔ | ✔ | |
| 雷迪斯 | ✔ | ✔ | ✔ | ✔ | |
| RabbitMQ3 | ✔ | ✔ | ✔ | ||
| SendGrid | ✔ | ✔ | ✔ | ||
| 服務匯流排 | ✔ | ✔ | ✔ | ✔ | |
| Azure SignalR 服務 | ✔ | ✔ | ✔ | ✔ | |
| 表格儲存 | ✔ | ✔ | ✔ | ✔ | |
| 計時器 | ✔ | ✔ | ✔ | ||
| Twilio | ✔ | ✔ | ✔ |
1對 1.x 版 Azure Functions 執行階段的支援將於 2026 年 9 月 14 日結束。 強烈建議您將應用程式移轉至 4.x 版,以取得完整支援。
2 從 2.x 版本執行階段開始,除 HTTP 和計時器之外的所有繫結都必須註冊。 請參閱註冊 Azure Functions 繫結延伸模組。
3 觸發程序在取用方案中不受支援。 此繫結類型需要執行階段驅動觸發程序。
4 此繫結類型僅在 Kubernetes、Azure IoT Edge 和其他自我裝載模式中受支援。
如需哪些繫結為預覽狀態或已核准可用於實際執行環境的資訊,請參閱支援的語言。
只有在支援基礎服務SDK時,才支援特定版本的繫結延伸模組。 基礎服務 SDK 版本中支援的變更會影響對使用延伸模組的支援。
繫結的程式碼範例
使用下表尋找更多特定繫結類型的範例,以了解如何在函式中使用繫結。 首先,選擇對應專案的語言索引標籤。
C# 的繫結程式碼取決於 特定的流程模型。
| 服務 | 範例 | 範例 |
|---|---|---|
| Blob 儲存體 |
觸發程序 輸入 輸出 |
連結 |
| Azure Cosmos DB |
觸發程序 輸入 輸出 |
連結 |
| Azure Data Explorer |
輸入 輸出 |
連結 |
| Azure SQL |
觸發程序 輸入 輸出 |
連結 |
| 事件方格 |
觸發程序 輸出 |
連結 |
| 事件中樞 |
觸發程序 輸出 |
|
| IoT 中心 |
觸發程序 輸出 |
|
| HTTP | 觸發程序 | 連結 |
| 佇列儲存體 |
觸發程序 輸出 |
連結 |
| RabbitMQ |
觸發程序 輸出 |
|
| SendGrid | 輸出 | |
| 服務匯流排 |
觸發程序 輸出 |
連結 |
| Azure SignalR Service |
觸發程序 輸入 輸出 |
|
| 表格儲存體 |
輸入 輸出 |
|
| 計時器 | 觸發程序 | 連結 |
| Twilio | 輸出 | 連結 |
| 服務 | 範例 | 範例 |
|---|---|---|
| Blob 儲存體 |
觸發程序 輸入 輸出 |
連結 |
| Azure Cosmos DB |
觸發程序 輸入 輸出 |
連結 |
| Azure Data Explorer |
輸入 輸出 |
連結 |
| Azure SQL |
觸發程序 輸入 輸出 |
|
| 事件方格 |
觸發程序 輸出 |
連結 |
| 事件中樞 |
觸發程序 輸出 |
|
| IoT 中心 |
觸發程序 輸出 |
|
| HTTP | 觸發程序 | 連結 |
| 佇列儲存體 |
觸發程序 輸出 |
連結 |
| RabbitMQ |
觸發程序 輸出 |
|
| SendGrid | 輸出 | |
| 服務匯流排 |
觸發程序 輸出 |
連結 |
| Azure SignalR Service |
觸發程序 輸入 輸出 |
|
| 表格儲存體 |
輸入 輸出 |
|
| 計時器 | 觸發程序 | 連結 |
| Twilio | 輸出 |
| 服務 | 範例 | 範例 |
|---|---|---|
| Blob 儲存體 |
觸發程序 輸入 輸出 |
連結 |
| Azure Cosmos DB |
觸發程序 輸入 輸出 |
連結 |
| Azure Data Explorer |
輸入 輸出 |
|
| Azure SQL |
觸發程序 輸入 輸出 |
連結 |
| 事件方格 |
觸發程序 輸出 |
|
| 事件中樞 |
觸發程序 輸出 |
|
| IoT 中心 |
觸發程序 輸出 |
|
| HTTP | 觸發程序 | 連結 |
| 佇列儲存體 |
觸發程序 輸出 |
連結 |
| RabbitMQ |
觸發程序 輸出 |
|
| SendGrid | 輸出 | |
| 服務匯流排 |
觸發程序 輸出 |
連結 |
| Azure SignalR Service |
觸發程序 輸入 輸出 |
|
| 表格儲存體 |
輸入 輸出 |
|
| 計時器 | 觸發程序 | |
| Twilio | 輸出 |
| 服務 | 範例 | 範例 |
|---|---|---|
| Blob 儲存體 |
觸發程序 輸入 輸出 |
|
| Azure Cosmos DB |
觸發程序 輸入 輸出 |
|
| Azure SQL |
觸發程序 輸入 輸出 |
|
| 事件方格 |
觸發程序 輸出 |
|
| 事件中樞 |
觸發程序 輸出 |
|
| IoT 中心 |
觸發程序 輸出 |
|
| HTTP | 觸發程序 | 連結 |
| 佇列儲存體 |
觸發程序 輸出 |
|
| RabbitMQ |
觸發程序 輸出 |
|
| SendGrid | 輸出 | |
| 服務匯流排 |
觸發程序 輸出 |
|
| Azure SignalR Service |
觸發程序 輸入 輸出 |
|
| 表格儲存體 |
輸入 輸出 |
|
| 計時器 | 觸發程序 | |
| Twilio | 輸出 |
Python 的繫結程式碼取決於 Python 模型版本。
自訂繫結
您可以建立自訂輸入和輸出繫結。 繫結必須以 .NET 撰寫,但可以從任何支援的語言取用。 如需建立自訂繫結的詳細資訊,請參閱建立自訂輸入和輸出繫結。