快速入門:使用事件方格將自訂事件路由傳送至 Azure 函式

在這個快速入門中,你可以在 Visual Studio Code 建立一個帶有事件格觸發器的函式,在 Azure 入口網站建立一個事件格子主題和事件訂閱,然後發送一個測試事件,看看事件格子如何將自訂事件導向你的 Azure 函式。

Azure 事件方格 是一項雲端事件路由服務,將事件從來源傳送給處理程序。 Azure Functions 是其支援的事件處理程式之一。 透過連結兩者,你可以自動回應事件執行程式碼,無需輪詢變更或管理基礎設施。

如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。

先決條件

使用 Visual Studio Code 來建立具有事件方格觸發程序的函式

在本節中,您會使用 Visual Studio Code 來建立具有事件方格觸發程序的函式。

建立函式

  1. 開啟 Visual Studio Code。

  2. 在左側列上,選取 [Azure]。

  3. 在左窗格的 [工作區] 區段中,選取命令行上的 [Azure Functions ]。 然後選取 [建立函式]。

    此螢幕擷取畫面顯示具有用於建立函式之功能表命令的 Azure [Visual Studio Code] 索引標籤。

  4. 選取您要用來儲存函式程式碼的資料夾。

  5. 針對 [建立新專案 ] 命令,針對 [ 語言],選取 [C#]。 選取 [輸入]。

    此螢幕擷取畫面顯示已選取 C Sharp 作為語言來開發 Azure 函式。

  6. 針對 .NET 執行環境,選取 .NET 8.0 隔離 LTS,然後選取 Enter。

  7. 針對函式的範本,選取 [Azure 事件方格觸發程序]。 選取 [輸入]。

  8. 針對 [ 函式名稱],輸入函式的名稱。 選取 [輸入]。

  9. 針對 [命名空間],輸入函式命名空間的名稱。 選取 [輸入]。

  10. 在目前視窗或新視窗中開啟專案,或將專案新增至工作區。

  11. 等候函式建立。 函式建立狀態會出現在右下角。

    顯示函式建立狀態的螢幕擷取畫面。

  12. 檢視「YourFunctionName.cs」檔案中的程式碼,特別是 Run 方法。 其會使用記錄器列印資訊。

    [Function(nameof(MyEventGridTriggerFunc))]
    public void Run([EventGridTrigger] CloudEvent cloudEvent)
    {
        _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
    }
    

將函式部署到 Azure

  1. 如果 [Azure] 窗格尚未開啟,請選取左側列上的 [Azure] 按鈕。

  2. 將滑鼠指標停留在您的專案上,然後選取 [部署至 Azure] 按鈕。

    顯示部署至 Azure 之按鈕的螢幕擷取畫面。

  3. 在命令選擇區的下拉式清單中,選取 [+ 建立新的函式應用程式],然後選取 Enter。

  4. 針對 [名稱],輸入新函式應用程式的全域唯一名稱。 選取 [輸入]。

  5. 針對 [執行階段堆疊],選取 [.NET 8 隔離式方案]。

  6. 針對 Azure 資源的 [位置],選取您鄰近的區域。

  7. 函式應用程式建立狀態會出現在底部窗格的 [AZURE] 索引標籤上。 建立函數應用程式之後,您會看到將您在本機建立的函式部署至函式應用程式的狀態。

  8. 部署成功之後,展開 [建立函式應用程式成功 ] 訊息。 選擇 點擊以檢視資源。 確認左側窗格上的 [資源] 區段中已選取您的函式。

  9. 以滑鼠右鍵按一下您的函式,然後選取 [在入口網站中開啟]。

    螢幕擷取畫面,其中顯示用於在入口網站開啟函式的選取項目。

  10. 如有必要,請登入 Azure,並確認您的函式有出現 [函式應用程式] 頁面。

  11. 在底部窗格上,選取您的函式。

    顯示 [函數應用程式] 頁面上 Azure 函式選取項目的螢幕擷取畫面。

  12. 切換至 [ 記錄] 索引標籤。將此索引標籤保持開啟狀態,以便在本文稍後將事件傳送至事件方格主題時看到記錄的訊息。

    顯示 Azure 入口網站中函式 [記錄] 索引標籤的螢幕擷取畫面。

建立事件網格自訂主題

事件方格主題會提供使用者定義的端點,作為您發佈事件的目的地。

  1. 在網頁瀏覽器視窗的新索引標籤上,登入 Azure 入口網站。

  2. 在上方的搜尋欄中,搜尋「事件網格主題」,然後選擇「事件網格主題」。

    顯示事件方格主題選取項目的螢幕擷取畫面。

  3. 在 [主題] 頁面上,選取命令列上的 [+ 建立]。

    顯示用於建立事件方格主題之按鈕的螢幕擷取畫面。

  4. 在 [建立主題] 窗格上,遵循下列步驟:

    1. 針對 [訂用帳戶],選取您的 Azure 訂用帳戶。

    2. 針對 [資源群組],從先前的步驟中選取相同的資源群組。

    3. 針對 [名稱],提供自訂主題的唯一名稱。 主題名稱必須是唯一的,因為網域名稱系統 (DNS) 項目會表示該名稱。

      請勿使用範例影像中顯示的名稱。 相反地,請建立您自己的名稱。 其必須是 3-50 個字元,且只包含 a-z、A-Z、0-9 和連字號 (-) 等值。

    4. 針對 [區域],選取事件方格主題的位置。

    5. 選取 [檢閱 + 建立]。

      顯示用於建立主題之窗格的螢幕擷取畫面。

    6. 在 [檢閱 + 建立] 索引標籤上檢閱設定,然後選取 [建立]。

  5. 建立自定義主題之後,選取 [移至資源] 以開啟該主題的 [事件方格主題 ] 頁面。

    顯示事件方格自訂主題頁面的螢幕擷取畫面。

訂閱事件網格自訂主題

您可訂閱事件方格主題,告知事件方格您想要追蹤的事件,以及要將事件傳送至何處。

  1. 在自訂主題的 [事件方格主題] 頁面上,選取工具列上的 [+ 事件訂閱]。

    顯示用於在工具列上新增事件訂閱之按鈕的螢幕擷取畫面。

  2. 在 [建立事件訂閱] 窗格上,遵循下列步驟:

    1. 針對 [名稱],輸入事件訂閱的名稱。

    2. 針對 [事件結構描述],選取 [雲端事件結構描述 v1.0]。

    3. 針對 [端點類型],選取 [Azure 函式]。

    4. 選取 [設定端點]。

      顯示事件訂閱值的螢幕擷取畫面。

  3. 在 [選取 Azure 函式] 窗格上,遵循下列步驟:

    1. 針對 [訂用帳戶],選取具有函式的 Azure 訂用帳戶。

    2. 針對 [資源群組],選取具有函式的資源群組。

    3. 針對 [函式應用程式],選取您的函式應用程式。

    4. 針對 [函式],選取函式應用程式中的函式。

    5. 選取 [確認選取項目]。

      此螢幕擷取畫面顯示用於選取先前建立之 Azure 函式的窗格。

  4. 此為選用步驟,但若為生產案例,則建議您執行此步驟。 在 [建立事件訂閱] 窗格上,移至 [其他功能] 索引標籤,然後設定 [每個批次的事件數上限] 和 [偏好的批次大小 (KB)] 的值。

    批次可以提供高輸送量。 針對 每個批次的事件上限,設定訂用帳戶在批次中所包含的事件數目上限。 [偏好的批次大小 (KB)] 會設定偏好的批次大小上限,但如果單一事件大於此閾值,則可以超過此上限。

    顯示事件訂閱批次設定的螢幕擷取畫面。

  5. 在 [建立事件訂閱] 窗格上,選取 [建立]。

將測試事件傳送到事件網格主題

現在,請觸發事件以了解事件方格如何將訊息散發至您的端點。 使用 Azure CLI 或 Azure PowerShell 將測試事件傳送至您的自訂主題。 通常,應用程式或 Azure 服務會傳送事件資料。

第一個範例使用 Azure CLI。 其會取得自訂主題的 URL 和索引鍵,以及範例事件資料。 將您的自訂主題名稱用於 topicname。 這樣會建立範例事件資料。

JSON 的 data 元素是您的事件承載。 任何語式正確的 JSON 都可以進入這個欄位。 您也可以使用主體欄位進行進階路由傳送或篩選。

cURL 工具會傳送 HTTP 要求。 在本文中,您會使用 cURL 將事件傳送到自訂主題。

Azure CLI

  1. 在 Azure 入口網站中選取 [Cloud Shell]。 如果您處於 Azure PowerShell 模式,請選取 [切換至 Bash]。

    顯示 Azure Cloud Shell 中 Bash 視窗的螢幕擷取畫面。

  2. 設定用於命令中的 topicname 和 resourcegroupname 變數。

    將 TOPICNAME 取代為您的事件方格主題名稱。

    topicname="TOPICNAME"
    

    將 RESOURCEGROUPNAME 取代為包含事件方格主題的 Azure 資源群組名稱。

    resourcegroupname="RESOURCEGROUPNAME"
    
  3. 使用下列命令以取得主題的端點。 在您複製並貼上命令之後,請先更新主題名稱和資源群組名稱,再執行命令。

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  4. 使用下列命令以取得自訂主題的索引鍵。 在您複製並貼上命令之後,請先更新主題名稱和資源群組名稱,再執行命令。

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. 使用事件定義複製下列語句,然後選取 Enter。

    event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
    
  6. 執行下列 cURL 命令來張貼事件:

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    
  7. 確認函式的訊息有出現在 Azure 入口網站中函式的 [記錄] 索引標籤上。

    顯示 Azure 函式 [記錄] 索引標籤的螢幕擷取畫面。

Azure PowerShell

第二個範例使用 Azure PowerShell 來執行類似步驟。

  1. 在 Azure 入口網站中,選取 [Cloud Shell ] 或移至 [Azure Cloud Shell] 頁面。 在 Cloud Shell 視窗的左上角,選取 [切換至 PowerShell]。

  2. 設定下列變數。 在您複製並貼上每個命令之後,請先更新主題名稱和資源群組名稱,再執行命令。

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  3. 執行下列命令以取得主題的端點和金鑰:

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  4. 準備事件。 在 Cloud Shell 視窗中,複製並執行下列陳述式:

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct the body by using a hash table
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert the event body from a hash table to a JSON object
    #Append square brackets to the converted JSON payload because they're expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  5. 使用 Invoke-WebRequest Cmdlet 來傳送事件:

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    
  6. 確認函式的訊息有出現在 Azure 入口網站中函式的 [記錄] 索引標籤上。

    顯示函式 [記錄] 索引標籤的螢幕擷取畫面。

驗證函式已收到事件

您已觸發事件,且事件方格將訊息傳送至您在訂閱時設定的端點。 現在,您可以檢查函式是否有收到訊息。

  1. 開啟您的函式的 [叫用] 索引標籤。

    顯示 [監視] 頁面之 [叫用] 索引標籤的螢幕擷取畫面。

  2. 若要顯示詳細資料,請選取叫用。

    顯示叫用詳細資料的螢幕擷取畫面。

    您也可以使用 [ 記錄] 索引標籤。

    此螢幕擷取畫面顯示具有記錄的函式 [監視] 檢視。

清除資源

如果您打算繼續使用此事件,請勿清除您在本文中建立的資源。 否則,請刪除您在本文建立的資源。

  1. 在 Azure 入口網站搜尋方塊中,輸入 [資源群組 ],然後選取 [ 資源群組]。

    顯示資源群組頁面的螢幕快照。

  2. 選取資源群組以開啟其詳細資料的窗格。

  3. 在工具列上,選取 [刪除資源群組]。

  4. 輸入資源群組的名稱並選取 [刪除],以確認刪除。

Cloud Shell 視窗已建立,並已使用出現在 [資源群組] 頁面上的其他資源群組。 如果您稍後不打算再使用 Cloud Shell 視窗,請刪除此資源群組。

您現在知道如何建立主題和事件訂閱,深入了解 Event Grid 可協助您:

如要了解如何使用各種程式設計語言,將事件發佈至事件方格,以及從事件方格取用事件,請參閱下列範例: