分享方式:


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 物件之函式 HttpExampleRun 方法上:

[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) 定義於函式 HttpTriggerQueueOutputrun 方法上;該函式會寫入至 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

注意:

  1. Azure Functions 執行階段 1.x 版的支援將於 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 資料總管 輸入
輸出
Azure SQL 觸發程序
輸入
輸出
連結
事件方格 觸發程序
輸出
連結
事件中樞 觸發程序
輸出
IoT 中樞 觸發程序
輸出
HTTP 觸發程序 連結
佇列儲存體 觸發程序
輸出
連結
RabbitMQ 觸發程序
輸出
SendGrid 輸出
服務匯流排 觸發程序
輸出
連結
SignalR 觸發程序
輸入
輸出
表格儲存體 輸入
輸出
計時器 觸發程序 連結
Twilio 輸出 連結
服務 範例 範例
Blob 儲存體 觸發程序
輸入
輸出
連結
Azure Cosmos DB 觸發程序
輸入
輸出
連結
Azure SQL 觸發程序
輸入
輸出
事件方格 觸發程序
輸出
連結
事件中樞 觸發程序
輸出
IoT 中樞 觸發程序
輸出
HTTP 觸發程序 連結
佇列儲存體 觸發程序
輸出
連結
RabbitMQ 觸發程序
輸出
SendGrid 輸出
服務匯流排 觸發程序
輸出
連結
SignalR 觸發程序
輸入
輸出
表格儲存體 輸入
輸出
計時器 觸發程序 連結
Twilio 輸出 連結

Python 的繫結程式碼取決於 Python 模型版本。

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

自訂繫結

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