共用方式為


Azure Functions 觸發程式和繫結

在本文中,您將瞭解函數觸發器和函數綁定的高階概念。

觸發程序會導致執行函數。 觸發器定義了如何叫用函數,並且函數必須只有一個觸發器。 觸發程序也可以將資料傳入函式中,就像使用方法呼叫一樣。

將函式綁定是一種以宣告式地將函式連接到其他資源的方式。 繫結會將資料傳遞至函式 (輸入繫結),或可讓您使用繫結參數從函式 (輸出繫結) 寫出資料。 您的函式觸發程序基本上是特殊類型的輸入繫結。

您可以根據函式的特定案例,混合和比對繫結。 繫結是選擇性的,而且函式可能有一或多個輸入和/或輸出繫結。

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

請考慮下列範例,說明如何實作函式:

範例案例 觸發程序 輸入繫結 輸出繫結
新的佇列訊息會到達,它會執行函式來寫入另一個佇列。 佇列* 沒有 佇列*
排程作業會讀取 Azure Blob 儲存體內容,並建立新的 Azure Cosmos DB 檔。 計時器 Blob 儲存體 Azure Cosmos DB
Azure 事件方格可用來從 Blob 儲存體讀取映像,並從 Azure Cosmos DB 讀取檔以傳送電子郵件。 事件方格 Blob 儲存體和 Azure Cosmos DB SendGrid

* 代表不同的佇列。

這些範例並不意味著詳盡無遺,但它們說明瞭如何一起使用觸發器和繫結。 如需更完整的案例集,請參閱 Azure Functions 案例

秘訣

Azure Functions 不需要您使用輸入和輸出系結來連線到 Azure 服務。 您始終都可在程式碼中建立 Azure SDK 用戶端,並將其改用於資料傳輸。 如需詳細資訊,請參閱連線至服務

觸發程序和繫結定義

下列範例顯示 HTTP 觸發函式,其輸出繫結會將訊息寫入 Azure 儲存體佇列。

對於 C# 類別庫函式,您可以使用 C# 屬性裝飾方法和參數來設定觸發程序與繫結。 您套用的特定屬性可能取決於 C# 執行階段模型:

HTTP 觸發程序 (HttpTrigger) 定義於會傳回 Run 物件之函式 HttpExampleMultiResponse 方法上:

[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
    FunctionContext executionContext)
{

此範例顯示物件 MultiResponse 定義。 物件定義會傳回 HttpResponse HTTP 要求,並使用繫結將 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) 是在針對名為 run 之函式的 HttpExample 方法上定義 。 函式會寫入一個儲存佇列,該佇列名為outqueue,由@QueueOutput參數上的msg註解定義。

@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 函式的觸發程式和繫結的方式取決於 Azure Functions Node.js 的特定版本:

在 Azure Functions 第 4 版的 Node.js 中,您可以使用從 @azure/functions 模組匯出的物件來設定觸發器和綁定。 如需詳細資訊,請參閱 Node.js 開發人員指南

匯出物件 http 上的方法 app 定義 HTTP 觸發器。 storageQueue 方法於 output 定義此觸發程式的輸出繫結。

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.' };
    },
});

匯出物件 http 上的方法 app 定義 HTTP 觸發器。 storageQueue 方法於 output 定義此觸發程式的輸出繫結。

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 開發人員指南

函式的定義方式取決於適用於 Azure Functions 的 Python 版本:

在適用於 Azure Functions 第 2 版的 Python 中,您可以使用裝飾器直接在程式碼中定義函式:

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 執行階段中所支援的繫結:

類型 4.x1 1.x2 觸發程序 輸入 輸出
Blob 儲存體
Azure Cosmos DB
Azure 資料總管
Azure SQL
達普4
事件方格
事件中樞
HTTP 和 Webhook \(英文\)
IoT 中心
Kafka3
行動應用程式
模型內容通訊協定
通知中樞
佇列儲存體
雷迪斯
RabbitMQ3
SendGrid
服務匯流排
Azure SignalR 服務
表格儲存
計時器
Twilio
  1. 註冊除 HTTP 和計時器外的所有綁定。 請參閱註冊 Azure Functions 繫結延伸模組。 使用 Functions 執行時 1.x 版本時,此步驟並非必要。
  2. Azure Functions 執行環境 1.x 版本的支援將於 2026 年 9 月 14 日結束將應用程式遷移到 4.x 版本以獲得完整支援。
  3. 消費方案不支援觸發器。 此繫結類型需要執行階段驅動觸發程序
  4. 此綁定類型僅支援 Kubernetes、Azure IoT Edge 及其他自架模式。

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

只有在支援基礎服務SDK時,才支援特定版本的繫結延伸模組。 基礎服務 SDK 版本中支援的變更會影響對使用延伸模組的支援。

SDK 類型

Azure Functions 綁定擴充套件使用 Azure 服務 SDK 來連接 Azure 服務。 綁定所使用的特定 SDK 類型會影響你如何處理函式中的資料。 部分綁定支援 SDK 專屬類型,提供更豐富的功能與與服務的整合;而另一些則使用較通用的類型,如字串或位元組陣列。 若可使用,使用 SDK 專屬類型能帶來更佳型別安全性、更易資料處理及服務專屬功能存取等好處。

下表顯示目前支援 SDK 類型的綁定擴充功能:

Extension 型別 支援層級
Azure Blob 儲存服務 BlobClient
BlobContainerClient
BlockBlobClient
PageBlobClient
AppendBlobClient
觸發點:GA
輸入:GA
Azure Cosmos DB CosmosClient
Database
Container
輸入:GA
Azure 事件網格 CloudEvent
EventGridEvent
觸發點:GA
Azure 事件中心 EventData
EventHubProducerClient
觸發點:GA
Azure 佇列儲存體 QueueClient
QueueMessage
觸發點:GA
Azure 服務總線 ServiceBusClient
ServiceBusReceiver
ServiceBusSender
ServiceBusMessage
觸發點:GA
Azure 表格儲存 TableClient
TableEntity
輸入:GA

SDK 類型的考量:

  • 使用依賴觸發程序資料的繫結運算式時,無法使用觸發程序本身的 SDK 類型。
  • 對於可能使用 SDK 類別的輸出場景,應直接建立並使用 SDK 用戶端,而非使用輸出繫結。
  • Azure Cosmos DB 觸發器使用 Azure Cosmos DB 變更資料流 ,並將變更資料流項目以可序列化成 JSON 的類型暴露。 因此,此觸發器不支援 SDK 類型。

欲了解更多資訊,請參閱 C# 開發者指南中的 SDK 類型

Extension 型別 支援層級 範例
Azure Blob 儲存服務 BlobClient
ContainerClient
StorageStreamDownloader
觸發點:GA
輸入:GA
快速入門
BlobClient
ContainerClient
StorageStreamDownloader
Azure Cosmos DB CosmosClient
DatabaseProxy
ContainerProxy
輸入:預覽 快速入門
ContainerProxy
CosmosClient
DatabaseProxy
Azure 事件中心 EventData 觸發:預覽 快速入門
EventData
Azure 服務總線 ServiceBusReceivedMessage 觸發:預覽 快速入門
ServiceBusReceivedMessage

SDK 類型的考量:

  • 對於可能使用 SDK 類別的輸出場景,應直接建立並使用 SDK 用戶端,而非使用輸出繫結。
  • Azure Cosmos DB 觸發器使用 Azure Cosmos DB 變更資料流 ,並將變更資料流項目以可序列化成 JSON 的類型暴露。 因此,此觸發器不支援 SDK 類型。

SDK 類型僅在使用 Python v2 程式設計模型時被支援。 欲了解更多資訊,請參閱 Python 開發者指南中的 SDK 類型綁定

Extension 型別 支援層級
Azure Blob 儲存服務 BlobClient
ContainerClient
ReadableStream
Preview
Azure 服務總線 ServiceBusClient
ServiceBusReceiver
ServiceBusSender
ServiceBusMessage
Preview

SDK 類型僅在使用 Node v4 程式設計模型時被支援。 更多資訊請參閱 Node.js 開發者指南中的 SDK 類型

Extension 型別 支援層級
Azure Blob 儲存服務 BlobClient
BlobContainerClient
Preview

欲了解更多資訊,請參閱 Java 開發者指南中的 SDK 類型

這很重要

SDK 類型目前不支援 PowerShell 應用程式。

繫結的程式碼範例

使用下表尋找更多特定繫結類型的範例,以了解如何在函式中使用繫結。 首先,選擇對應專案的語言索引標籤。

C# 的繫結程式碼取決於 特定的流程模型

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

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

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

自訂繫結

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