使用 Azure Functions 執行隨選程式碼

已完成

現在我們已建立了函式應用程式,接下來就來看看如何組建、設定和執行函式。 我們將在下一個練習中執行函式,因此您不需要本單元中完成任何工作。

觸發程序

函式是事件驅動,也就是說函式是為回應事件而執行。 啟動函式的事件類型稱為觸發程序。 每個函式都必須只設定一個觸發程序。

您可以使用 HTTP 要求、排程計時器和來自下列 Azure 服務的事件來觸發程序函數執行:

Azure 服務 觸發程序描述
Blob 儲存體 偵測到新的或更新的 Blob 時,啟動函式。
Azure Cosmos DB 偵測到插入及更新時,啟動函式。
Event Grid 從事件方格接收事件時,啟動函式。
事件中樞 從事件中樞接收事件時,啟動函式。
佇列儲存體 在佇列上收到新項目時,啟動函式。 佇列訊息會當成函式輸入提供。
服務匯流排 啟動函式以回應來自服務匯流排佇列的訊息。

繫結

繫結是將資料與服務連線到您函式的宣告方式。 繫結與各種資料來源互動,所以您不必在函式中撰寫程式碼,就可以連線資料來源並管理連線。 平台會為您處理這種複雜性,這屬於繫結程式碼的一部分。 每個繫結都有方向:您的程式碼會從輸入繫結讀取資料,並將資料寫入輸出繫結。 每個函式都有零或多個繫結,以管理函式所處理的輸入與輸出資料。

觸發程序是輸入繫結類型,可以啟動部分程式碼的執行。

Azure 提供大量的繫結以連線到不同的儲存體和傳訊服務。

定義繫結範例

讓我們看看使用輸入繫結 (觸發程序) 和輸出繫結設定函式的範例。 假設我們想要每當新訊息出現在 Azure 佇列儲存體時,就在 Azure 資料表儲存體寫入新的資料列。 此案例可以使用 Azure 佇列儲存體「觸發程序」和 Azure 資料表儲存體「輸出繫結」來實作。

下列程式碼片段為此案例的 function.json 檔案。

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

我們的 JSON 設定指定在訊息新增至名為 myqueue-items 的佇列時,觸發函式。 接著將函式傳回值寫入 Azure 表格儲存體的 outTable

如果是 PowerShell 函式,函式會使用 Push-OutputBinding Cmdlet,明確寫入輸出繫結。

此範例簡單說明如何設定函式的繫結。 我們可以使用 SendGrid 繫結將輸出變更為電子郵件,或將事件放在 Azure 服務匯流排上,以在我們的架構中通知某個其他元件。 我們甚至可以有多個輸出繫結,以將資料推送至各種服務。

提示

若要在 Azure 入口網站中檢視或編輯 function.json 的內容,請從 [首頁] 選取您的函式應用程式,然後在右側窗格中選取 [JSON 檢視]。 資源 JSON 檢視會顯示資源識別碼和可編輯的 JSON 程式碼。 若要關閉 JSON 檢視,請選取窗格右上角的 [X]

並非所有 Azure Functions 支援的語言都會使用 function.json 檔案來定義函式。

在 Azure 入口網站中建立函式

Azure Functions 具有預先定義的函式範本,其以特定類型的觸發程序為基礎。 這些範本可讓您輕鬆地以您選擇的語言開始建立第一個函式。

本課程模組不受 Azure Functions 支援的所有語言支援,而且入口網站本身不支援以 Azure Functions 支援的所有語言建立函式。

對於使用 function.json 檔案定義函式的支援語言,您可以直接在Azure 入口網站中建立和編輯這些函式。 這些入口網站支援的語言包括:JavaScript、PowerShell、Python 和 C# 指令碼 (.csx)。 直接在程式碼本身中定義函式的語言必須在入口網站外部開發,並將其部署到 Azure。 這些非入口網站支援的語言包括:C#、Java、Python (v2 程式設計模型) 和 JavaScript/TypeScript (Node.js v4 程式設計模型)。

函式範本

在入口網站中建立第一個函式時,您可以為函式選取預先定義的觸發程序。 根據您的選擇,Azure 會產生預設的程式碼和設定資訊,例如在接收輸入資料時,建立事件記錄項目。

[新增函式] 窗格選取範本,可輕鬆存取最常見的開發環境、觸發程序和相依性。 在 Azure 入口網站中建立函式時,有 20 個以上的範本可供您選擇。 建立後,您便可以進一步自訂程式碼。

從範本建立函式,同時會建立數個檔案,包括設定檔「function.json」和原始程式碼檔案「index.js」。

您可以從 [函式應用程式] 功能表,選取 [函式] 類別下的 [函式],然後建立或編輯函式應用程式的函式。

選取您在函式應用程式中建立的函式後,[函式] 窗格隨即會開啟。 從 [函式] 功能表選取 [程式碼 + 測試],即可存取命令列中的動作,以測試並執行程式碼、儲存或捨棄所做的變更,或取得已發佈的 URL。 從命令列選取 [測試/執行],即可針對包含查詢字串和值的要求,執行使用案例。 程式碼方塊上方的函式路徑會顯示開啟的檔案名稱。 您可以從下拉式清單選取並測試或編輯特定檔案,例如 function.json

函式程式碼和測試編輯器的螢幕擷取畫面,顯示展開的測試/執行檢視,及醒目提示的功能表選項。

在上圖中,右側的窗格顯示 [輸入][輸出] 索引標籤。 選取 [輸入] 索引標籤,藉由新增查詢參數,及提供查詢字串的值,即可組建並測試函式。 [輸出] 索引標籤會顯示要求的結果。

測試 Azure 函式

在入口網站建立函式之後,您就會想要測試該函式。 有以下兩種方法:

  • 在入口網站中測試函式
  • 手動執行

在 Azure 入口網站中進行測試

入口網站也提供測試函式的便利方式。 如先前所述,在先前的螢幕擷取畫面中。 在此窗格中選取 [執行] 後,結果會自動顯示在 [輸出] 索引標籤中,同時 [記錄] 窗格會開啟顯示狀態。

手動執行函式

您可以手動觸發已設定的觸發程序來啟動函式。 例如,如果您使用的是 HTTP 觸發程序,則可以使用下列其中一個 HTTP 測試工具,初始化函式端點 URL 的 HTTP 要求:

警告

如果您有敏感資料,例如認證、秘密、存取權杖、API 金鑰和其他類似資訊,請務必使用一項工具,以必要的安全性功能保護資料、離線或本機運作、不將資料同步處理至雲端,而且不需要您登入線上帳戶。 如此一來,您就可以降低向公眾公開敏感資料的風險。

您可以在入口網站中的函式定義頁面,選取 [取得函式 URL],以取得 HTTP 觸發程序的 URL 端點。

監視和 Application Insights 儀表板

在開發和生產期間,監視函式的能力十分重要。 您可以啟用 Azure 入口網站提供的 Application Insights 整合。 在 [函式應用程式] 功能表的 [設定] 下,依序選取 [Application Insights]、[啟用 Application Insights],然後選取 [套用]。 在對話方塊中,選取 [是]。 Application Insights 儀表板可供快速檢視函式執行的記錄,並顯示 Application Insights 填入的時間戳記、結果碼、持續期間和作業識別碼。

螢幕擷取畫面顯示 HTTP 函式 Application Insights 儀表板,並將函式結果、對應的 HTTP 狀態碼和監視功能表項目醒目提示。

串流記錄窗格

在 Azure 入口網站中啟用 Application Insights 後,您可以新增記錄陳述式至函式偵錯。 每種語言的呼叫方法都會傳遞一個「記錄」物件,可以在執行測試時,新增記錄資訊至 [程式碼 + 測試] 窗格的 [記錄] 窗格中。

context 物件上使用 log 方法,從您的程式碼寫入至記錄,此物件會傳遞至處理常式。 下列範例會寫入至預設記錄層級 (資訊):

context.log('Enter your logging statement here');

使用 Write-Host Cmdlet,從您的程式碼寫入至記錄,如下列範例所示:

Write-Host "Enter your logging statement here"

錯誤、失敗、警告和異常狀況

您可以使用 [函式] 功能表中,[調查] 類別的 [計量] 或選項來監視效能、診斷失敗,或設定數十個預先定義的活頁簿,來管理函式應用程式。 舉凡程式碼的編譯錯誤和警告,到角色的使用統計資料,應有盡有。