Azure Functions 觸發程序和繫結概念

在本文中,您會了解函數觸發程序和繫結的高階概念。

觸發程序會導致執行函數。 觸發程序會定義如何叫用函數,而且函式必須只有一個觸發程序。 觸發程序具有相關聯的資料,它通常提供作為函式的承載。

繫結至函式是以宣告方式將另一個資源連接到函式的方式;繫結能以「輸入繫結」、「輸出繫結」或兩者連接。 來自繫結的資料是作為參數提供給函式。

您可以混合使用不同繫結,以符合您的需求。 繫結是選擇性的,而且一個函數可能有一或多個輸入和/或輸出繫結。

觸發程序和繫結可讓您避免硬式編碼對其他服務的存取。 您的函式會接收函式參數中的資料 (例如佇列訊息的內容)。 您可以使用函式的傳回值來傳送資料 (例如用以建立佇列訊息)。

請考慮下列如何實作不同函數的範例。

範例案例 觸發程序 輸入繫結 輸出繫結
新的佇列訊息會送達,以執行函數來寫入至另一個佇列。 佇列* None 佇列*
排程的工作會讀取 Blob 儲存體內容,並建立新的 Cosmos DB 文件。 計時器 Blob 儲存體 Cosmos DB
事件方格用來讀取 Blob 儲存體中的影像和 Cosmos DB 中的文件以傳送電子郵件。 事件方格 Blob 儲存體和 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 也另具有 streamstring 兩種選項。

繫結方向

所有觸發程序和繫結在 function.json 檔案中都具有 direction 屬性:

  • 對於觸發程序,方向一律為 in
  • 輸入和輸出繫結使用 inout
  • 某些繫結支援特殊方向 inout。 如果您使用 inout,則只有入口網站 [整合] 索引標籤的 [進階編輯器] 可供使用。

當您使用類別庫中的屬性來設定觸發程序和繫結時,請在屬性建構函式中提供方向,或從參數類型推斷方向。

將繫結新增至函數

您可以使用輸入或輸出繫結,以將函數連線至其他服務。 將繫結的特定定義新增至函數,以新增繫結。 若要了解作法,請參閱在 Azure Functions 中將繫結新增至現有函數

支援的繫結

此表顯示主要版本的 Azure Functions 執行階段中所支援的繫結:

類型 1.x 2.x 和更新版本1 觸發程序 輸入 輸出
Blob 儲存體
Azure Cosmos DB
Azure SQL (預覽)
Dapr3
Event Grid
事件中樞
HTTP 和 Webhook
IoT 中心
Kafka2
Mobile Apps
通知中樞
佇列儲存體
RabbitMQ2
SendGrid
服務匯流排
SignalR
表格儲存體
計時器
Twilio

1 從 2.x 版執行階段開始,必須註冊 HTTP 和計時器以外的所有繫結。 請參閱註冊繫結延伸模組

2 觸發程序在取用方案中不受支援。 需要執行階段驅動的觸發程序

3 僅在 Kubernetes、IoT Edge 和其他自我裝載模式中受到支援。

如需哪些繫結為預覽狀態或已核准可用於實際執行環境的資訊,請參閱支援的語言

繫結程式碼範例

使用下表來尋找特定繫結類型的範例,而這些範例顯示如何處理函數中的繫結。 首先,選擇對應至您專案的語言索引標籤。

服務 範例 範例
Blob 儲存體 觸發程序
輸入
輸出
連結
Azure Cosmos DB 觸發程序
輸入
輸出
連結
Azure SQL (預覽) 輸入
輸出
連結
事件方格 觸發程序
輸出
連結
事件中樞 觸發程序
輸出
IoT 中樞 觸發程序
輸出
HTTP 觸發程序 連結
佇列儲存體 觸發程序
輸出
連結
RabbitMQ 觸發程序
輸出
SendGrid 輸出
服務匯流排 觸發程序
輸出
連結
SignalR 觸發程序
輸入
輸出
表格儲存體 輸入
輸出
計時器 觸發程序 連結
Twilio 輸出 連結

自訂繫結

您可以建立自訂輸入和輸出繫結。 繫結必須以 .NET 編寫,但可以從任何支援的語言取用。 如需建立自訂繫結的詳細資訊,請參閱建立自訂輸入和輸出繫結

資源

後續步驟