練習 - 探索輸入和輸出繫結類型
在此練習中,我們會建立函式,該函式會在收到 HTTP 要求時執行,而且會藉由傳回訊息來回應每個要求。
請查看以下進階說明,瞭解我們要建置的項目。
建立函式應用程式
讓我們建立可在此課程模組中使用的函式應用程式。 函式應用程式可讓您將多個函式以邏輯單位分組,以方便您管理、部署和共用資源。
使用您用來啟動沙箱的相同帳戶來登入 Azure 入口網站。
在資源功能表或 [首頁] 頁面,選取 [建立資源]。 [建立資源] 窗格隨即會顯示。
在 [建立資源] 功能表中,選取 [計算],然後在結果清單中選取 [函式應用程式]。 您可能需要在 [搜尋服務和市集] 視窗中搜尋函式應用程式。
選取 [取用],然後選取 [選取] 按鈕。 [建立函數應用程式] 頁面隨即出現。
在 [基本] 索引標籤上,為每個設定輸入下列值。
設定 值 Description 專案詳細資料 訂用帳戶 指引訂用帳戶 您要用於此練習的 Azure 訂用帳戶。 資源群組 從下拉式清單選取 [沙箱資源群組名稱] 沙箱的資源群組。 執行個體詳細資料 函數應用程式名稱 輸入全域唯一名稱 此名稱可識別新的函式應用程式。 有效字元是 a-z
、0-9
和-
。執行階段堆疊 從下拉式清單中,選取 [Node.js] 此課程模組的範例程式碼是以 JavaScript 撰寫。 版本 接受預設 此練習使用預設值已足夠。 區域 從下拉式清單中,選取 [位置] 選取最靠近區域。 接受所有其他選項的預設值。 選取 [檢閱 + 建立] 來驗證您的設定,然後選取 [建立] 來佈建和部署函式應用程式。
部署可能需要一些時間。 在帳戶名稱旁邊的全域控制項中,選取 [通知] 圖示,並注意 [部署成功] 訊息。
在函式部署完成時,選取 [前往資源]。 隨即顯示函式應用程式的 [概觀] 窗格。
使用啟用沙箱時所用的相同帳戶來登入 Azure 入口網站。
在資源功能表或 [首頁] 頁面,選取 [建立資源]。 [建立資源] 窗格隨即會顯示。
在 [建立資源] 功能表中,選取 [計算],然後在結果清單中選取 [函式應用程式]。 您可能需要在 [搜尋服務和市集] 視窗中搜尋函式應用程式。
選取 [取用],然後選取 [選取] 按鈕。 [建立函數應用程式] 頁面隨即出現。
在 [基本] 索引標籤上,為每個設定輸入下列值。
設定 值 Description 專案詳細資料 訂用帳戶 指引訂用帳戶 您要用於此練習的 Azure 訂用帳戶。 資源群組 從下拉式清單選取 [沙箱資源群組名稱] 沙箱的資源群組。 執行個體詳細資料 函數應用程式名稱 輸入全域唯一名稱 此名稱可識別新的函式應用程式。 有效字元是 a-z
、0-9
和-
。執行階段堆疊 從下拉式清單中,選取 [PowerShell Core] 此課程模組的範例程式碼是以 PowerShell 撰寫。 版本 接受預設 此練習使用預設值已足夠。 區域 從下拉式清單中,選取 [位置] 選取最靠近區域。 接受所有其他選項的預設值。 選取 [檢閱 + 建立] 來驗證您的輸入,然後選取 [建立] 來佈建和部署函式應用程式。
部署可能需要一些時間。 在帳戶名稱旁邊的全域控制項中,選取 [通知] 圖示,並注意 [部署成功] 訊息。
在函式部署完成時,選取 [前往資源]。 隨即顯示函式應用程式的 [概觀] 窗格。
提示
如果在 Azure 入口網站中尋找您的函式應用程式時發生問題,請了解如何在 Azure 入口網站中將函式應用程式新增至您的最愛。
建立函式
既然我們已經有函式應用程式,現在正是建立函式的時機。 每個函式都有啟動它的觸發程序。 在本課程模組中,我們會使用預先定義的範本來定義 HTTP 觸發程序。
在 [概觀] 頁面上的 [函式] 索引標籤中,選取 [在 Azure 入口網站中建立] 底下的 [建立函式] 按鈕。
[建立函式] 窗格隨即出現。
在 [選取範本] 區段中,選取 [HTTP 觸發程序] 範本,然後選取 [下一步]。
在 [範本詳細資料] 區段中,確認下列設定。
在 [函式名稱] 文字輸入框中,使用預設名稱 HttpTrigger1。 Azure 會自動為您建立的函式建立唯一名稱。 您可選擇不同的名稱,但記得要使用有意義的名稱。
在 [授權層級] 文字方塊中,使用預設值 [函式]。 授權層級可決定要求上必須出示哪些金鑰,才能執行要求。 [函式] 授權層級需要函式專屬的金鑰,我們可在建立函式後找到此金鑰。
選取 建立。 當觸發程序函式傳播至函式應用程式時,[函式應用程式] 的 [函式] 窗格隨即出現,其中列出 HttpTrigger1。
在命令列中,選取 [取得函式 URL]。 [取得函式 URL] 對話方塊隨即顯示。
在下拉式清單中,選取 [預設 (函式金鑰)]、選取 URL 結尾的 [複製到剪貼簿] 圖示,然後選取 [確定] 來關閉對話方塊。
在新瀏覽器索引標籤的網址列中,貼上您複製的函式 URL。 按 Enter 鍵,以在您的瀏覽器中執行要求。 函式應用程式初始化時,回應可能需要幾分鐘的時間。 若您收到逾時錯誤,請重新整理以重新傳送要求。
請參考瀏覽器中顯示的下列範例,當函式回應時,您應會看到類似的輸出。
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
將以下查詢字串
&name=Joe
新增至 URL 的結尾。 您的結果 URL 應該類似下列範例:https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe
按 Enter 鍵,以在您的瀏覽器中執行要求。 請參考瀏覽器中顯示的下列範例,當函式回應時,您應會看到類似的輸出。
Hello, Joe. This HTTP triggered function executed successfully.
如同到目前為止您從此練習所見,您必須在建立函式時定義觸發程序。 每個函式都有單一觸發程序。 在此範例中,我們使用 HTTP 觸發程序,這表示我們的函式會在接收 HTTP 要求時啟動。 範本中的預設實作 (在下列螢幕擷取畫面中以 JavaScript 顯示) 會傳回查詢字串或要求本文中的參數 name 值。 如果未提供任何查詢字串,函式會以訊息回應,要求進行呼叫的人提供一個名稱值。
在 Azure 入口網站的 [函式] 功能表中,選取 [程式碼 + 測試]。
您函式的 [程式碼 + 測試] 窗格隨即顯示,其中會顯示 index.js 檔案的內容。 您函式的預設 JavaScript 程式碼應該類似於下列範例。
module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); const name = (req.query.name || (req.body && req.body.name)); const responseMessage = name ? "Hello, " + name + ". This HTTP triggered function executed successfully." : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."; context.res = { // status: 200, /* Defaults to 200 */ body: responseMessage }; }
讓我們很快地查看函式的其他檔案,function.json 設定檔。 從程式碼區塊上方的檔案路徑中的下拉式清單選取 [function.json],以存取此檔案。 設定資料會顯示在下列 JSON 清單中。
{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "res" } ] }
此函式具有名為 req、類型為
httpTrigger
的觸發程序繫結,以及名為 res、類型為http
的輸出繫結。
在函式的上述程式碼中,我們看到了透過 req 參數存取了傳入 HTTP 要求的承載。 同樣地,我們藉由設定 res 參數傳送了 HTTP 回應。 繫結確實能為我們處理一些較繁重的工作!
既然我們有了函式應用程式,就讓我們建立函式。 每個函式都有啟動它的觸發程序。 在本課程模組中,我們會使用範本來建立 HTTP 觸發程序。
在 [概觀] 頁面上的 [函式] 索引標籤中,選取 [在 Azure 入口網站中建立] 底下的 [建立函式] 按鈕。
[建立函式] 窗格隨即出現。
在 [選取範本] 區段中,選取 [HTTP 觸發程序] 範本,然後選取 [下一步]。
在 [範本詳細資料] 區段中,確認下列設定。
選取 建立。 您 [函式] 的 [HttpTrigger1] 窗格隨即出現。
在命令列中,選取 [取得函式 URL]。 [取得函式 URL] 對話方塊隨即顯示。
從下拉式清單中選取 [預設 (函式金鑰)]、選取 URL 結尾的 [複製到剪貼簿] 圖示,然後選取 [確定] 以關閉對話方塊。
在新瀏覽器索引標籤的網址列中,貼上您複製的函式 URL。 按 Enter 鍵,以在您的瀏覽器中執行要求。 函式應用程式初始化時,回應可能需要幾分鐘的時間。 若您收到逾時錯誤,請重新整理以重新傳送要求。
請參考瀏覽器中顯示的下列範例,當函式回應時,您應會看到類似的輸出。
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
將查詢字串
&name=Joe
新增至 URL 的結尾。 您的結果 URL 應該類似下列範例:https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe
按 Enter 鍵,以在您的瀏覽器中執行要求。 請參考瀏覽器中顯示的下列範例,當函式回應時,您應會看到類似的輸出。
Hello, Joe. This HTTP triggered function executed successfully.
如同到目前為止您從此練習所見,您必須在建立函式時定義觸發程序。 每個函式都有單一觸發程序。 在此範例中,我們使用 HTTP 觸發程序,這表示我們的函式會在接收 HTTP 要求時啟動。 範本中的預設實作 (在下列螢幕擷取畫面中以 PowerShell 顯示) 會使用
Push-OutputBinding
Cmdlet,以查詢字串或要求本文中的 name 參數值進行回應。 如果未提供任何字串,函式會以訊息回應,提示進行呼叫的人提供一個名稱值。在 [函式] 功能表中,選取 [程式碼 + 測試]。 您函式的 [程式碼 + 測試] 窗格隨即顯示,其中顯示 run.ps1 檔案的內容。
您函式的預設 PowerShell 程式碼應該類似於下列範例。
using namespace System.Net # Input bindings are passed in via param block. param($Request, $TriggerMetadata) # Write to the Azure Functions log stream. Write-Host "PowerShell HTTP trigger function processed a request." # Interact with query parameters or the body of the request. $name = $Request.Query.Name if (-not $name) { $name = $Request.Body.Name } $body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response." if ($name) { $body = "Hello, $name. This HTTP triggered function executed successfully." } # Associate values to output bindings by calling 'Push-OutputBinding'. Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = $body })
讓我們很快地查看函式的其他檔案,function.json 設定檔。 從檔案路徑下拉式清單中選取 function.json,以此開啟該檔案。 設定資料會顯示在下列 JSON 清單中。
{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "Request", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "Response" } ] }
如您所見,此函式具有名為 Request、類型為
httpTrigger
的觸發程序繫結,以及名為 Response、類型為http
的輸出繫結。 在函式的上述程式碼中,我們看到如何透過 Request 參數,存取傳入 HTTP 要求的承載。 同樣地,我們只要設定 Response 參數,就可以傳送 HTTP 回應。 繫結確實能為我們處理一些較繁重的工作。
探索繫結類型
在 [函式] 功能表中,選取 [整合]。 您函數的 [整合] 窗格隨即出現。
請注意,已經定義觸發程序和輸出繫結,如下圖所示。 整合檢視會調整成最適合螢幕的寬度和高度。 如果您的螢幕夠寬,則可水平顯示相同資訊。
您可以看到,我們無法新增「一個」以上的觸發程序。 若要變更函式的觸發程序,您需要刪除觸發程序並建立新的觸發程序。 不過,[輸入] 和 [輸出] 區段可讓您新增多個繫結,因此要求可以接受多個輸入值並傳回多個輸出值。
在 [輸入] 方塊中,選取 [新增輸入]。 [建立輸入] 窗格隨即出現。 選取 [繫結類型] 的下拉式清單,以便檢視所有可能的輸入繫結類型清單。
請花一些時間考慮如何在解決方案中使用每個輸入繫結。
稍後在此課程模組中,我們會新增輸入繫結,但現在,請選取 [取消] 以關閉此窗格。
在 [輸出] 方塊中,選取 [新增輸出]。 [建立輸出] 窗格隨即出現。 選取 [繫結類型] 的下拉式清單,以便檢視所有可能的輸出繫結類型清單。
如您所見,有數種輸出繫結類型。 稍後在此課程模組中,我們會新增輸出繫結,但現在,請選取 [取消] 以關閉此窗格。
在 [函式] 功能表中,選取 [整合]。 您函數的 [整合] 窗格隨即出現。
請注意,已經定義觸發程序和輸出繫結,如下圖所示。 整合檢視會調整成最適合螢幕的寬度和高度。 如果您的螢幕不夠寬,則可垂直顯示相同資訊。
您可以看到,我們無法新增「一個」以上的觸發程序。 若要變更函式的觸發程序,您需要刪除觸發程序並建立新的觸發程序。 不過,[輸入] 和 [輸出] 區段可讓您新增多個繫結,因此函式可接受多個輸入值並傳回多個輸出值。
在 [輸入] 方塊中,選取 [新增輸入]。 [建立輸入] 窗格隨即出現。 選取 [繫結類型] 的下拉式清單,以便檢視所有可能的輸入繫結類型清單。
請花一些時間考慮如何在解決方案中使用每個輸入繫結。 有許多可能性可供選擇。
稍後在此課程模組中,我們會新增輸入繫結,但現在,請選取 [取消] 以關閉此窗格。
在 [輸出] 方塊中,選取 [新增輸出]。 [建立輸出] 窗格隨即出現。 選取 [繫結類型] 的下拉式清單,以便檢視所有可能的輸出繫結類型清單。
如您所見,有數種輸出繫結類型。 稍後在此課程模組中,我們會新增輸出繫結,但現在,請選取 [取消] 以關閉此窗格。
到目前為止,我們已了解如何建立函式應用程式,並將函式新增至其中。 我們看到執行中的簡單函式,也就是在進行 HTTP 要求時執行的函式。 我們也已探索 Azure 入口網站,以及可供函式使用的輸入和輸出繫結類型。 在下一個單元中,我們將使用輸入繫結從資料庫讀取文字。