共用方式為


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 之函式的 HttpTriggerQueueOutput 方法上定義 。 此函式會寫入 @QueueOutput 註釋在 message 參數上定義的儲存佇列:

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

類型 1.x1 2.x 和更新版本2 觸發程序 輸入 輸出
Blob 儲存體
Azure Cosmos DB
Azure 資料總管
Azure SQL
達普4
事件方格
事件中樞
HTTP 和 Webhook \(英文\)
IoT 中心
Kafka3
行動應用程式
模型內容通訊協定
通知中樞
佇列儲存體
雷迪斯
RabbitMQ3
SendGrid
服務匯流排
Azure SignalR 服務
表格儲存
計時器
Twilio

1對 1.x 版 Azure Functions 執行階段的支援將於 2026 年 9 月 14 日結束。 強烈建議您將應用程式移轉至 4.x 版,以取得完整支援。

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

3 觸發程序在取用方案中不受支援。 此繫結類型需要執行階段驅動觸發程序

4 此繫結類型僅在 Kubernetes、Azure IoT Edge 和其他自我裝載模式中受支援。

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

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

繫結的程式碼範例

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

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 撰寫,但可以從任何支援的語言取用。 如需建立自訂繫結的詳細資訊,請參閱建立自訂輸入和輸出繫結