Azure Functions 觸發程序和繫結概念
在本文中,您會了解函數觸發程序和繫結的高階概念。
觸發程序會導致函式執行。 觸發程序會定義如何叫用函數,而且函式必須只有一個觸發程序。 觸發程序具有相關聯的資料,它通常提供作為函式的承載。
繫結至函式是以宣告方式將另一個資源連接到函式的方式;繫結能以「輸入繫結」、「輸出繫結」或兩者連接。 繫結中的資料會提供給函式作為參數。
您可以混合使用不同繫結,以符合您的需求。 繫結是選擇性的,而且一個函數可能有一或多個輸入和/或輸出繫結。
觸發程序和繫結可讓您避免硬式編碼對其他服務的存取。 您的函式會接收函式參數中的資料 (例如,佇列訊息的內容)。 您可以使用函式的傳回值來傳送資料 (例如,用以建立佇列訊息)。
請考慮下列如何實作不同函數的範例。
範例案例 | 觸發程序 | 輸入繫結 | 輸出繫結 |
---|---|---|---|
新的佇列訊息會送達,以執行函數來寫入至另一個佇列。 | 佇列* | None | 佇列* |
排程的工作會讀取 Blob 儲存體內容,並建立新的 Azure Cosmos DB 文件。 | 計時器 | Blob 儲存體 | Azure Cosmos DB |
事件方格用來讀取 Blob 儲存體中的影像和 Azure Cosmos DB 中的文件以傳送電子郵件。 | 事件方格 | Blob 儲存體和 Azure Cosmos DB | SendGrid |
使用 Microsoft Graph 更新 Excel 工作表的 Webhook。 | HTTP | None | Microsoft Graph |
* 代表不同的佇列
這些範例並不詳盡,但提供來說明如何同時使用觸發程序和繫結。
觸發程序和繫結定義
根據開發語言,觸發程序和繫結會以不同方式定義。
語言 | 觸發程序和繫結透過下列方式設定... |
---|---|
C# 類別庫 | 使用 C# 屬性裝飾方法和參數 |
Java | 使用 JAVA 註釋裝飾方法和參數 |
JavaScript/PowerShell/Python/TypeScript | 更新 function.json (結構描述) |
對於依賴 function.json 的語言,入口網站會提供 UI 以在 [整合] 索引標籤中新增繫結。您也可以在函式的 [程式碼 + 測試] 索引標籤中,直接在入口網站編輯檔案。 Visual Studio Code可讓您遵循一組方便的提示,輕鬆地將繫結新增至 function.json 檔案。
在 .NET 和 JAVA 中,參數類型會定義輸入資料的資料類型。 例如,使用 string
繫結至佇列觸發程序的文字、要以二進位讀取的位元組陣列,以及要還原序列化為物件的自訂類型。 由於 .NET 類別庫函式和 JAVA 函式不依賴 function.json 進行繫結定義,因此無法在入口網站中建立和編輯。 C# 入口網站編輯是以 C# 指令碼為基礎,使用 function.json 而不是屬性。
若要深入了解如何將繫結新增至現有函數,請參閱使用繫結以將函數連線至 Azure 服務。
對於 JavaScript 等具有動態類型的語言,則會使用 function.json 檔案中的 dataType
屬性。 例如,若要讀取二進位格式的 HTTP 要求內容,請將 dataType
設定為 binary
:
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
dataType
的其他選項為 stream
和 string
。
繫結方向
所有觸發程序和繫結在 function.json 檔案中都具有 direction
屬性:
- 對於觸發程序,方向一律為
in
- 輸入和輸出繫結使用
in
和out
- 部分繫結支援特殊方向
inout
。 如果您使用inout
,則只有入口網站 [整合] 索引標籤的 [進階編輯器] 可供使用。
當您使用類別庫中的屬性來設定觸發程序和繫結時,請在屬性建構函式中提供方向,或從參數類型推斷方向。
將繫結新增至函數
您可以使用輸入或輸出繫結,以將函數連線至其他服務。 將繫結的特定定義新增至函數,以新增繫結。 若要了解作法,請參閱在 Azure Functions 中將繫結新增至現有函數。
支援的繫結
此表顯示主要版本的 Azure Functions 執行階段中所支援的繫結:
類型 | 1.x1 | 2.x 和更新版本2 | 觸發程序 | 輸入 | 輸出 |
---|---|---|---|---|---|
Blob 儲存體 | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure 資料總管 | ✔ | ✔ | ✔ | ||
Azure SQL | ✔ | ✔ | ✔ | ✔ | |
Dapr4 | ✔ | ✔ | ✔ | ✔ | |
Event Grid | ✔ | ✔ | ✔ | ✔ | |
事件中樞 | ✔ | ✔ | ✔ | ✔ | |
HTTP 和 Webhook | ✔ | ✔ | ✔ | ✔ | |
IoT 中樞 | ✔ | ✔ | ✔ | ||
Kafka3 | ✔ | ✔ | ✔ | ||
行動應用程式 | ✔ | ✔ | ✔ | ||
通知中樞 | ✔ | ✔ | |||
佇列儲存體 | ✔ | ✔ | ✔ | ✔ | |
Redis | ✔ | ✔ | |||
RabbitMQ3 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
服務匯流排 | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
表格儲存體 | ✔ | ✔ | ✔ | ✔ | |
計時器 | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
1對 1.x 版 Azure Functions 執行階段的支援將於 2026 年 9 月 14 日結束。 強烈建議您將應用程式移轉至 4.x 版,以取得完整支援。
2 從 2.x 版執行階段開始,必須註冊 HTTP 和計時器以外的所有繫結。 請參閱註冊繫結延伸模組。
3 觸發程序在取用方案中不受支援。 需要執行階段驅動的觸發程序。
4 僅在 Kubernetes、IoT Edge 和其他自我裝載模式中受到支援。
如需哪些繫結為預覽狀態或已核准可用於實際執行環境的資訊,請參閱支援的語言。
只有在支援基礎服務 SDK 時才支援特定的繫結延伸模組版本。 基礎服務 SDK 版本中支援的變更會影響對使用延伸模組的支援。
繫結程式碼範例
使用下表來尋找特定繫結類型的範例,而這些範例顯示如何處理函數中的繫結。 首先,選擇對應專案的語言索引標籤。
C# 的繫結程式碼取決於 特定的流程模型。
服務 | 範例 | 範例 |
---|---|---|
Blob 儲存體 | 觸發程序 輸入 輸出 |
連結 |
Azure Cosmos DB | 觸發程序 輸入 輸出 |
連結 |
Azure 資料總管 | 輸入 輸出 |
連結 |
Azure SQL | 觸發程序 輸入 輸出 |
|
事件方格 | 觸發程序 輸出 |
連結 |
事件中樞 | 觸發程序 輸出 |
|
IoT 中樞 | 觸發程序 輸出 |
|
HTTP | 觸發程序 | 連結 |
佇列儲存體 | 觸發程序 輸出 |
連結 |
RabbitMQ | 觸發程序 輸出 |
|
SendGrid | 輸出 | |
服務匯流排 | 觸發程序 輸出 |
連結 |
SignalR | 觸發程序 輸入 輸出 |
|
表格儲存體 | 輸入 輸出 |
|
計時器 | 觸發程序 | 連結 |
Twilio | 輸出 | 連結 |
服務 | 範例 | 範例 |
---|---|---|
Blob 儲存體 | 觸發程序 輸入 輸出 |
連結 |
Azure Cosmos DB | 觸發程序 輸入 輸出 |
連結 |
Azure 資料總管 | 輸入 輸出 |
|
Azure SQL | 觸發程序 輸入 輸出 |
連結 |
事件方格 | 觸發程序 輸出 |
連結 |
事件中樞 | 觸發程序 輸出 |
|
IoT 中樞 | 觸發程序 輸出 |
|
HTTP | 觸發程序 | 連結 |
佇列儲存體 | 觸發程序 輸出 |
連結 |
RabbitMQ | 觸發程序 輸出 |
|
SendGrid | 輸出 | |
服務匯流排 | 觸發程序 輸出 |
連結 |
SignalR | 觸發程序 輸入 輸出 |
|
表格儲存體 | 輸入 輸出 |
|
計時器 | 觸發程序 | 連結 |
Twilio | 輸出 | 連結 |
服務 | 範例 | 範例 |
---|---|---|
Blob 儲存體 | 觸發程序 輸入 輸出 |
連結 |
Azure Cosmos DB | 觸發程序 輸入 輸出 |
連結 |
Azure SQL | 觸發程序 輸入 輸出 |
|
事件方格 | 觸發程序 輸出 |
連結 |
事件中樞 | 觸發程序 輸出 |
|
IoT 中樞 | 觸發程序 輸出 |
|
HTTP | 觸發程序 | 連結 |
佇列儲存體 | 觸發程序 輸出 |
連結 |
RabbitMQ | 觸發程序 輸出 |
|
SendGrid | 輸出 | |
服務匯流排 | 觸發程序 輸出 |
連結 |
SignalR | 觸發程序 輸入 輸出 |
|
表格儲存體 | 輸入 輸出 |
|
計時器 | 觸發程序 | 連結 |
Twilio | 輸出 | 連結 |
Python 的繫結程式碼取決於 Python 模型版本。
自訂繫結
您可以建立自訂輸入和輸出繫結。 繫結必須以 .NET 編寫,但可以從任何支援的語言取用。 如需建立自訂繫結的詳細資訊,請參閱建立自訂輸入和輸出繫結。