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.js

針對依賴 function.js的語言,入口網站會提供在 [ 整合 ] 索引標籤中新增系結的 UI。您也可以在函式的 [程式 代碼 + 測試 ] 索引標籤中,直接在入口網站中編輯檔案。 Visual Studio Code 可讓您遵循一組便利的提示,輕鬆地將系結 新增至檔案中的 function.js

在 .NET 和 JAVA 中,參數類型會定義輸入資料的資料類型。 例如,使用系結 string 至佇列觸發程式的文字、要讀取為二進位的位元組陣列,以及要還原序列化為物件的自訂類型。 因為 .NET 類別庫函式和 JAVA 函式不依賴系結定義 上的function.js ,所以無法在入口網站中建立和編輯這些函數。 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 ,則只有 Advanced editor 可透過入口網站中的 [ 整合 ] 索引標籤使用。

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

將系結新增至函式

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

支援的繫結

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

類型 1.x 2.x 和更新版本1 觸發程序 輸入 輸出
Blob 儲存體
Azure Cosmos DB
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 觸發程序
輸入
輸出
連結
事件方格 觸發程序
輸出
連結
事件中樞 觸發程序
輸出
IoT 中樞 觸發程序
輸出
HTTP 觸發程序 連結
佇列儲存體 觸發程序
輸出
連結
RabbitMQ 觸發程序
輸出
SendGrid 輸出
服務匯流排 觸發程序
輸出
連結
SignalR 觸發程序
輸入
輸出
資料表儲存體 輸入
輸出
計時器 觸發程序 連結
Twilio 輸出 連結

自訂繫結

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

資源

下一步