Azure Functions 觸發程序和繫結概念
在本文中,您會了解函數觸發程序和繫結的高階概念。
觸發程序會導致函式執行。 觸發程序會定義如何叫用函數,而且函式必須只有一個觸發程序。 觸發程序也可以將資料傳入函式中,就像使用方法呼叫一樣。
繫結至函式是以宣告方式將函式連接到其他資源的方式;繫結會將資料傳至您的函式中 (輸入繫結),或是讓您使用繫結參數從函式寫出資料 (輸出繫結)。 您的函式觸發程序基本上是特殊類型的輸入繫結。
您可以根據函式的特定案例,混合和比對不同的繫結。 繫結是選擇性的,而且一個函數可能有一或多個輸入和/或輸出繫結。
觸發程序和繫結可讓您避免硬式編碼對其他服務的存取。 您的函式會接收函式參數中的資料 (例如,佇列訊息的內容)。 您可以使用函式的傳回值來傳送資料 (例如,用以建立佇列訊息)。
請考慮下列如何實作不同函數的範例。
範例案例 | 觸發程序 | 輸入繫結 | 輸出繫結 |
---|---|---|---|
新的佇列訊息會送達,以執行函數來寫入至另一個佇列。 | 佇列* | None | 佇列* |
排程的工作會讀取 Blob 儲存體內容,並建立新的 Azure Cosmos DB 文件。 | 計時器 | Blob 儲存體 | Azure Cosmos DB |
事件方格用來讀取 Blob 儲存體中的影像和 Azure Cosmos DB 中的文件以傳送電子郵件。 | 事件方格 | Blob 儲存體和 Azure Cosmos DB | SendGrid |
* 代表不同的佇列
這些範例並不詳盡,但提供來說明如何同時使用觸發程序和繫結。 如需更完整的案例集,請參閱 Azure Functions 案例。
提示
使用 Functions 時,您無須使用輸入和輸出繫結來連線至 Azure 服務。 您始終都可在程式碼中建立 Azure SDK 用戶端,並將其改用於資料傳輸。 如需詳細資訊,請參閱連線至服務。
觸發程序和繫結定義
函式具有單一觸發程式和一或多個系結。 系結的類型為輸入或輸出。 並非所有服務都支援輸入和輸出繫結。 如需特定繫結程式碼範例,請參閱您的特定繫結延伸模組。
根據開發語言,觸發程序和繫結會以不同方式定義。 請務必在文章頂端選取您的語言。
此範例說明 HTTP 觸發的函式,其中包含將訊息寫入至 Azure 儲存體佇列的輸出繫結。
對於 C# 類別庫函式,觸發程序和繫結的設定方式是使用 C# 屬性來裝飾方法與參數,其具體套用的屬性可能取決於 C# 執行階段模型:
HTTP 觸發程序 (HttpTrigger
) 定義於會傳回 MultiResponse
物件之函式 HttpExample
的 Run
方法上:
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
此範例說明 MultiResponse
物件定義,此定義不僅會對 HTTP 要求傳回 HttpResponse
,也會使用 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
) 定義於函式 HttpTriggerQueueOutput
的 run
方法上;該函式會寫入至 message
參數的 @QueueOutput
註釋所定義的儲存體佇列:
@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 函式定義觸發程序和繫結的方式,取決於 Node.js for Functions 的版本:
在 Node.js for Functions 第 4 版中,您可以使用從 @azure/functions
模組匯出的物件來設定觸發程序和繫結。 如需詳細資訊,請參閱 Node.js 開發人員指南。
此範例說明一個 HTTP 觸發的函式,會為每個接收到的 HTTP 要求建立一個佇列項目。
匯出的 app
物件上的 http
方法會定義 HTTP 觸發程序,而 output
上的 storageQueue
方法會定義此觸發程序的輸出繫結。
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.' };
},
});
匯出的 app
物件上的 http
方法會定義 HTTP 觸發程序,而 output
上的 storageQueue
方法會定義此觸發程序的輸出繫結。
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 開發人員指南。
定義函式的方式取決於 Python for Functions 的版本:
在 Python for Functions 第 2 版中,您可以使用裝飾項目直接在程式碼中定義函式。
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 | ✔ | ✔ | ✔ | ✔ | |
Dapr4 | ✔ | ✔ | ✔ | ✔ | |
Event Grid | ✔ | ✔ | ✔ | ✔ | |
事件中樞 | ✔ | ✔ | ✔ | ✔ | |
HTTP 和 Webhook | ✔ | ✔ | ✔ | ✔ | |
IoT 中樞 | ✔ | ✔ | ✔ | ||
Kafka3 | ✔ | ✔ | ✔ | ||
行動應用程式 | ✔ | ✔ | ✔ | ||
通知中樞 | ✔ | ✔ | |||
佇列儲存體 | ✔ | ✔ | ✔ | ✔ | |
Redis | ✔ | ✔ | |||
RabbitMQ3 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
服務匯流排 | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
表格儲存體 | ✔ | ✔ | ✔ | ✔ | |
計時器 | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
注意:
- Azure Functions 執行階段 1.x 版的支援將於 2026 年 9 月 14 日結束。 強烈建議您將應用程式移轉至 4.x 版,以取得完整支援。
- 從 2.x 版執行階段開始,必須註冊 HTTP 和計時器以外的所有繫結。 請參閱註冊繫結延伸模組。
- 觸發程序在使用量方案中不受支援。 需要執行階段驅動的觸發程序。
- 僅在 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 編寫,但可以從任何支援的語言取用。 如需建立自訂繫結的詳細資訊,請參閱建立自訂輸入和輸出繫結。