共用方式為


教學課程:開始使用 Azure Redis 中的 Azure Functions 觸發程式和系結

本教學課程示範如何使用 Azure Functions 和 Azure 受控 Redis(預覽版)或 Azure Cache for Redis 來實作基本觸發程式。 接續引導您使用 Visual Studio Code (VS Code),以 C# 撰寫和部署 Azure 函數。

在本教學課程中,您會了解如何:

  • 設定必要的工具。
  • 設定並連線至快取。
  • 建立 Azure 函數並將程式碼部署至其中。
  • 確認觸發程序的記錄。

必要條件

使用 Azure 入口網站或您慣用的 CLI 工具來建立新的 Azure Cache for Redis 執行個體。 本教學課程使用 平衡 B1 實例,這是很好的起點。 請務必在使用 快速入門指南 來開始使用時選取此實例。

預設設定應已足夠。 本教學課程使用公用端點進行示範,但仍建議您針對實際執行環境的任何內容使用私人端點。

建立快取可能需要幾分鐘的時間。 您在程序完成時可以移至下一節。

設定 Visual Studio Code

  1. 如果您尚未安裝適用於 VS Code 的 Azure Functions 延伸模組,請在 [延伸模組] 功能表上搜尋 Azure Functions,並選擇 [安裝]。 如果您未安裝 C# 延伸模組,請也進行安裝。

    VS Code 中已安裝所需延伸模組的螢幕擷取畫面。

  2. 移至 [Azure] 索引標籤。登入您的 Azure 帳戶。

  3. 若要保存您所建立的專案,請在電腦上建立新的本機資料夾。 本教學課程使用 RedisAzureFunctionDemo 作為範例。

  4. 在 [Azure] 索引標籤,選取 [工作區] 索引標籤右上角的閃電圖示以建立新函數應用程式。

  5. 選取 [建立函數...]

    顯示從 VS Code 新增函式圖示的螢幕擷取畫面。

  6. 選取所建立資料夾以開始建立新的 Azure Functions 專案。 您會收到多個畫面上的圖示。 選取:

    • C# 作為語言。
    • .NET 8.0 隔離的 LTS 做為 .NET 執行階段。
    • Skip for now 作為專案範本。

    如果您未安裝 .NET Core SDK,則系統也將提示您進行安裝。

    重要

    針對 .NET 函式,建議針對內含式模型使用隔離式背景工作角色模型。 如需內含式和隔離式背景工作角色模型的比較,請參閱 Azure Functions 上適用於 .NET 的隔離式背景工作角色模型與內含式模型之間的差異 (英文)。 此範例會使用隔離式背景工作角色模型

  7. 確認新的專案顯示在 [總管] 窗格上。

    VS Code 中工作區的螢幕擷取畫面。

安裝必要 NuGet 套件

您必須安裝 Microsoft.Azure.Functions.Worker.Extensions.Redis (適用於 Redis 延伸模組的 NuGet 套件),允許使用 Redis Keyspace 通知作為 Azure Functions 中的觸發程式。

移至 VS Code 中的 [終端] 索引標籤並輸入下列命令來安裝此套件:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease

注意

Microsoft.Azure.Functions.Worker.Extensions.Redis 套件會用於 .NET 隔離式背景工作處理序函式。 .NET 內含式函式和所有其他語言都會改用 Microsoft.Azure.WebJobs.Extensions.Redis 套件。

  1. 移至新建立的 Azure 受控 Redis 實例。

  2. 移至 Azure 入口網站 中的快取,然後在 [資源] 功能表上找出 [存取密鑰]。 記下或複製 [主要] 方塊的內容。 您將使用此專案來建立 連接字串。

  3. 使用下列格式建置 連接字串{your-cache-hostname}:10000,password={your-access-key},ssl=True,abortConnect=False。 如果您已停用 TLS/SSL,請改用 ssl=False

  4. 使用您選擇的方法連線到 Redis 實例,例如 Redis CLI 或 Redis Insights。 如需如何使用 Redis CLI 連線到 Redis 實例的指示,請參閱 搭配 Azure 受控 Redis 使用 Redis 命令行工具。

  5. 使用 CONFIG SET 命令設定 keyspace 通知:

    CONFIG SET notify-keyspace-events KEA
    

    KEA 是設定字串,可啟用所有金鑰和事件的 Keyspace 通知。 如需 Keyspace 設定字串的詳細資訊,請參閱 Redis 文件

設定 Redis 觸發程序的範例程式碼

  1. 在 VS Code 中,將名為 Common.cs 的檔案新增至專案。 這個類別可用來協助剖析 PubSubTrigger 的 JSON 序列化回應。

  2. 複製以下程式碼並貼到 Common.cs 檔案中:

    public class Common
    {
        public const string connectionString = "redisConnectionString";
    
        public class ChannelMessage
        {
            public string SubscriptionChannel { get; set; }
            public string Channel { get; set; }
            public string Message { get; set; }
        }
    }
    
  3. 將名為 RedisTriggers.cs 的檔案新增至專案。

  4. 複製下列程式碼範例並貼至新檔案中:

    using Microsoft.Extensions.Logging;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Azure.Functions.Worker.Extensions.Redis;
    
    public class RedisTriggers
    {
        private readonly ILogger<RedisTriggers> logger;
    
        public RedisTriggers(ILogger<RedisTriggers> logger)
        {
            this.logger = logger;
        }
    
        // PubSubTrigger function listens to messages from the 'pubsubTest' channel.
        [Function("PubSubTrigger")]
        public void PubSub(
        [RedisPubSubTrigger(Common.connectionString, "pubsubTest")] Common.ChannelMessage channelMessage)
        {
        logger.LogInformation($"Function triggered on pub/sub message '{channelMessage.Message}' from channel '{channelMessage.Channel}'.");
        }
    
        // KeyeventTrigger function listens to key events from the 'del' operation.
        [Function("KeyeventTrigger")]
        public void Keyevent(
            [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:del")] Common.ChannelMessage channelMessage)
        {
            logger.LogInformation($"Key '{channelMessage.Message}' deleted.");
        }
    
        // KeyspaceTrigger function listens to key events on the 'keyspaceTest' key.
        [Function("KeyspaceTrigger")]
        public void Keyspace(
            [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:keyspaceTest")] Common.ChannelMessage channelMessage)
        {
            logger.LogInformation($"Key 'keyspaceTest' was updated with operation '{channelMessage.Message}'");
        }
    
        // ListTrigger function listens to changes to the 'listTest' list.
        [Function("ListTrigger")]
        public void List(
            [RedisListTrigger(Common.connectionString, "listTest")] string response)
        {
            logger.LogInformation(response);
        }
    
        // StreamTrigger function listens to changes to the 'streamTest' stream.
        [Function("StreamTrigger")]
        public void Stream(
            [RedisStreamTrigger(Common.connectionString, "streamTest")] string response)
        {
            logger.LogInformation(response);
        }
    }
    
  5. 本教學課程示範在 Redis 作業上觸發的多種方式:

    • PubSubTrigger,當作業發佈至名為 pubsubTest 的 Pub/Sub 通道時,便會觸發此程式碼。
    • KeyspaceTrigger,此程式碼建置在 Pub/Sub 觸發程序上。 使用此程式碼以尋找 keyspaceTest 金鑰的變更。
    • KeyeventTrigger,此程式碼也會建置在 Pub/Sub 觸發程序上。 使用此程式碼以尋找 DEL 命令的使用。
    • ListTrigger,此程式碼會尋找 listTest 清單的變更。
    • StreamTrigger,此程式碼會尋找 streamTest 資料流的變更。

連線至快取

  1. 若要在 Redis 作業上觸發,則必須傳入快取執行個體的連接字串。 此資訊會儲存在系統在資料夾自動建立的 local.settings.json 檔案。 建議您使用本機設定檔案作為安全性最佳做法。

  2. 若要連線至快取,請在 local.settings.json 檔案新增 ConnectionStrings 區段,然後使用 redisConnectionString 參數新增連接字串。 區段應如此範例所示:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "redisConnectionString": "<your-connection-string>"
      }
    }
    

    Common.cs 中的程式碼在本機執行時會尋找此值:

    public const string connectionString = "redisConnectionString";
    

重要

針對教學課程,已簡化此範例。 若要使用生產環境,我們建議您使用 Azure 金鑰保存庫 來儲存 連接字串 資訊,或使用 Microsoft Entra ID 向 Redis 實例進行驗證。

在本機建置和執行程式碼

  1. 切換至 VS Code 中的 [執行和偵錯] 索引標籤,然後選擇綠色箭號以在本機偵測程式碼。 如果您未安裝 Azure Functions 核心工具,系統也將提示您進行安裝。 在此情況下,您必須在安裝後重新啟動 VS Code。

  2. 程式碼應成功建置。 您可在終端輸出中追蹤其進度。

  3. 若要測試觸發程序功能,請嘗試建立並刪除 keyspaceTest 金鑰。

    您可使用偏好的方式以連線至快取。 一個簡單的方式是在 Azure Cache for Redis 入口網站中使用內建控制台工具。 移至 Azure 入口網站中的快取執行個體,然後選擇 [控制台] 以開啟。

    重要

    Azure 受控 Redis 尚無法使用主控台工具。 相反地,請考慮使用 redis-cli 或 Redis Insight 之類的工具,直接在 Redis 實例上執行命令。

    C-Sharp 程式碼和連接字串的螢幕擷取畫面。

    開啟控制台後,請嘗試下列命令:

    • SET keyspaceTest 1
    • SET keyspaceTest 2
    • DEL keyspaceTest
    • PUBLISH pubsubTest testMessage
    • LPUSH listTest test
    • XADD streamTest * name Clippy

    控制台及一些 Redis 命令和結果的螢幕擷取畫面。

  4. 確認觸發程序在終端中啟用。

    VS Code 編輯器的螢幕擷取畫面,其中程式碼執行中。

新增 Redis 繫結

繫結會新增簡化的方式,以讀取或寫入儲存在 Redis 執行個體上的資料。 為了示範繫結的優點,我們新增了另外兩個函式。 一個稱為 SetGetter,其會在每次設定索引鍵時觸發,並使用輸入繫結傳回索引鍵的新值。 另一個稱為 StreamSetter,其會在將新項目新增至串流 myStream 時觸發,並使用輸出繫結將值 true 寫入索引鍵 newStreamEntry

  1. 將名為 RedisBindings.cs 的檔案新增至專案。

  2. 複製下列程式碼範例並貼至新檔案中:

    using Microsoft.Extensions.Logging;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Azure.Functions.Worker.Extensions.Redis;
    
    public class RedisBindings
    {
        private readonly ILogger<RedisBindings> logger;
    
        public RedisBindings(ILogger<RedisBindings> logger)
        {
            this.logger = logger;
        }
    
        //This example uses the PubSub trigger to listen to key events on the 'set' operation. A Redis Input binding is used to get the value of the key being set.
        [Function("SetGetter")]
        public void SetGetter(
            [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] Common.ChannelMessage channelMessage,
            [RedisInput(Common.connectionString, "GET {Message}")] string value)
        {
            logger.LogInformation($"Key '{channelMessage.Message}' was set to value '{value}'");
        }
    
        //This example uses the PubSub trigger to listen to key events to the key 'key1'. When key1 is modified, a Redis Output binding is used to set the value of the 'key1modified' key to 'true'.
        [Function("SetSetter")]
        [RedisOutput(Common.connectionString, "SET")]
        public string SetSetter(
            [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:key1")] Common.ChannelMessage channelMessage)
        {
            logger.LogInformation($"Key '{channelMessage.Message}' was updated. Setting the value of 'key1modified' to 'true'");
            return $"key1modified true";
        }
    }
    
  3. 切換至 VS Code 中的 [執行和偵錯] 索引標籤,然後選擇綠色箭號以在本機偵測程式碼。 程式碼應成功建置。 您可在終端輸出中追蹤其進度。

  4. 若要測試輸入繫結功能,請嘗試設定任何索引鍵的新值,例如使用命令 SET hello world 您應該會看到 SetGetter 函式觸發並傳回更新的值。

  5. 若要測試輸出繫結功能,請嘗試使用命令 XADD myStream * item Order1 將新項目新增至串流 myStream。 請注意,新串流項目上觸發了 StreamSetter 函式,並將 true 值設定為另一個稱為 newStreamEntry 的索引鍵。 此 set 命令也會觸發 SetGetter 函式。

將程式碼部署至 Azure 函數

  1. 建立新的 Azure 函數:

    1. 移至 [Azure] 索引標籤並展開訂用帳戶。

    2. 以滑鼠右鍵按一下 [函數應用程式],然後選擇 [在 Azure 中建立函數應用程式 (進階)]

    在 VS Code 中建立函數應用程式的選取項目螢幕擷取畫面。

  2. 您會收到多個資訊的提示以設定新的函數應用程式:

    • 輸入唯一名稱。
    • 選取 [.NET 8 隔離式] 做為執行階段堆疊。
    • 選擇 [Linux] 或 [Windows] (均可正常運作)。
    • 選擇現有或新的資源群組以保留函數應用程式。
    • 選擇與快去執行個體相同的區域。
    • 選擇 [進階] 作為主控方案。
    • 建立新的 Azure App Service 方案。
    • 選擇 [EP1] 定價層。
    • 選取現有的儲存體帳戶或建立新帳戶。
    • 建立新 Application Insights 資源。 您使用資源以確認觸發程序正常運作。

    重要

    取用函數目前不支援 Redis 觸發程式。

  3. 等候幾分鐘的時間以建立新的函數應用程式。 其會顯示在訂用帳戶中的 [函數應用程式] 下方。 以滑鼠右鍵按一下新的函數應用程式,然後選擇 [部署至函數應用程式]

    在 VS Code 中部署至函數應用程式的選取項目螢幕擷取畫面。

  4. 應用程式隨後建置並開始部署。 您可在輸出視窗中追蹤其進度。

新增連接字串資訊

重要

針對教學課程,已簡化此範例。 若要使用生產環境,我們建議您使用 Azure 金鑰保存庫 來儲存 連接字串 資訊,或使用 Microsoft Entra ID 向 Redis 實例進行驗證。

  1. 在 Azure 入口網站中,移至新的函數應用程式,然後從資源功能表中選取 [環境變數]

  2. 在工作窗格中,移至 [應用程式設定]

  3. 針對 [名稱],輸入 redisConnectionString

  4. 針對 [值],輸入連接字串。

  5. 選取頁面上的 [套用] 以確認。

  6. 瀏覽至 [概觀] 窗格,然後選取 [重新啟動],以使用連接字串資訊重新啟動函數應用程式。

測試觸發程序和繫結

  1. 完成部署並新增連接字串資訊後,請在 Azure 入口網站中開啟函數應用程式。 然後從資源功能表選擇 [記錄資料流]

  2. 等候 Log Analytics 連線,然後使用 Redis 控制台以啟用任意觸發程序。 確認此處已記錄觸發程序。

    資源功能表上函數應用程式資源的記錄串流螢幕擷取畫面。

清除資源

如果您想要繼續使用在本文中建立的資源,請保留該資源群組。

否則,若已完成資源使用,則可刪除您建立的 Azure 資源群組,以避免衍生費用。

重要

刪除資源群組是無法回復的動作。 當您刪除資源群組時,其中包含的所有資源都將永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。 如果您是在包含需保留資源的現有資源群組內部建立資源,則可以個別刪除每個資源,而不必刪除整個資源群組。

刪除資源群組

  1. 登入 Azure 入口網站,然後選取 [資源群組]

  2. 選取您想要刪除的資源群組。

    如果有許多資源群組,請使用 [篩選任何欄位] 方塊,並輸入您針對本文所建立資源群組的名稱。 選取結果清單中的資源群組。

    此螢幕擷取畫面顯示工作窗格中要刪除的資源群組清單。

  3. 選取 [刪除資源群組]

  4. 系統將會要求您確認是否刪除資源群組。 輸入您的資源群組名稱以進行確認,然後選取 [刪除]

    此螢幕擷取畫面顯示需要資源名稱才能確認刪除的表單。

不久後,系統便會刪除該資源群組及其所有的資源。