練習 - 使用 Core Tools 在本機建立函式

已完成

Azure Functions Core Tools 可讓您在自己的電腦上開發本機函式,方法是:

  • 建立函式專案所需之檔案和資料夾。
  • 提供可從專案根目錄在本機執行的 Functions 主機。

您決定開發計算單利的函式,以使用 Azure Functions 開始在本機工作。 最後,您可以建立更複雜的函式,以共同運作並呼叫其他服務和資料庫。 使用 Core Tools 建置執行基本貸款計算的函式是好的開始。 您也想要嘗試先在自己的電腦上執行函式,再將其發佈至 Azure。 您可以使用 Core Tools 在 Azure Cloud Shell 中完成全部作業。

Azure Cloud Shell 隨附 Core Tools、Azure CLI,以及可用來撰寫程式碼的編輯器。 請務必先選取上面的 [啟用沙箱],再繼續進行。

建立本機 Azure Functions 專案

在此練習中,請使用 Cloud Shell 開發您一個使用 Core Tools 的 JavaScript 函式。 Cloud Shell 已安裝正確版本的 Core Tools 和 Node.js。

  1. 從根資料夾中,執行 func init 以在新的 loan-wizard 資料夾中建立函式專案。

    func init loan-wizard
    
  2. 當系統提示選取背景工作角色執行階段時,請針對 [節點] 輸入 3

  3. 當系統提示選取語言時,請針對 [JavaScript] 輸入 1

    輸出會列出要寫入磁碟的檔案,包括下列檔案:

    • host.json 可支援執行階段執行個體與特定觸發程序和繫結類型的應用程式層級設定。
    • local.settings.json 可設定僅限本機的行為和應用程式設定 (本機環境變數)。
    • package.json 是 JavaScript 特定的檔案,其可追蹤您在程式碼中安裝和使用的任何套件。
    • .gitignore and extensions.json 分別是 Git 版本控制工具和 Visual Studio Code 所使用的設定檔。 您目前可以予以忽略。

建立 HTTP 觸發函式

該建立函式了!

  1. 在 Cloud Shell 中,瀏覽至新的 loan-wizard 目錄。

    cd ~/loan-wizard
    
  2. 執行 func new 以啟動函式建立精靈。

    func new
    
  3. 當系統提示選取範本時,請針對 [HTTP 觸發程序] 輸入 7

  4. 當系統提示您為 HTTP 觸發程序提供函式名稱時,請輸入 simple-interest

  5. 執行下列命令,以開啟 Cloud Shell 編輯器。

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    精靈會在名為 simple-interest.jssrc/functions 下面的函式專案中建立新檔案,其中會包含預設範本內容。 此程式碼可支援適用於 Azure Functions 的 Node.js v4 程式設計模型。 請花點時間使用編輯器探索這些專案檔。 此螢幕擷取畫面會顯示已展開的資料夾,並在編輯器中開啟 simple-interest.js

執行簡易利息函式

Core Tools 為我們在 simple-interest.js 中建立的預設函式實作會在查詢字串或輸入 HTTP 要求的本文中尋找名為 name 的輸入,並傳回字串 Hello, [name]。 這對於如何使用 HTTP 觸發程序提供了良好說明,但您可將該程式碼更換為使用三個輸入參數計算單利的程式碼。

  1. 在編輯器的 [檔案] 窗格中展開 src>函式 資料夾,然後選取 simple-interest.js 以在編輯器中開啟該檔案。

  2. 以下列程式碼取代 simple-interest.js 的完整內容:

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    此指令碼會在 HTTP 要求的查詢字串中尋找名為 principalrateterm 的參數。 然後,它會傳回單利計算的結果 (principal * rate * term)。

  3. Ctrl+S 來儲存檔案,然後按 Ctrl+Q 來關閉編輯器。

在 Cloud Shell 中執行函式

若要在本機執行新的函式並進行試用,請使用 func start 在背景處理序中啟動 Functions 執行階段 (func.exe),如此您即可在其執行時使用命令列。 然後,請使用命令列工具 curl 和函式互動。

如果您從自己的電腦使用 Core Tools,則只需從第二個終端視窗或網頁瀏覽器使用 curl。 Core Tools 所產生的輸出會在第一個終端視窗中即時顯示。 在 Cloud Shell 中,您受限於單一終端,因此需要在背景處理序中執行 Core Tools (func.exe)。

  1. 執行下列命令,在背景中以無訊息方式啟動 Functions 主機。

    func start &> ~/output.txt &
    

    如同 func new,Cloud Shell 仍應位於 loan-wizard 目錄中。

    Functions 主機現在正將其輸出 寫入檔案 ~/output.txt。 您可以在其執行時繼續使用命令列。

    使用 ps 命令來確認 func 處理序正在執行。

  2. 輸入下列命令以檢視輸出記錄。

    code ~/output.txt
    

    在輸出中,您會看到一則訊息,其中會列出 Functions: simple-interest: 可同時作為 GET 和 POST HTTP 要求 http://localhost:7071/api/simple-interest 供使用。

    注意

    如果您看到錯誤訊息,請選取 Ctrl+C 以停止主機。 請確定程式碼檔案的內容與範例相同。

    此 localhost URL 不會發佈至 Web,只能在 Cloud Shell 工作階段中執行的工具中存取。

  3. 選取 Ctrl+Q 以關閉編輯器。

  4. 執行下列命令,將 HTTP GET 要求傳送至您在本機執行的函式。

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    Please supply principal, rate and term in the query string 的輸出指出我們的函式已被成功叫用,並且能夠將回應傳回給我們,但您沒有如預期般加以呼叫。 您需要在 HTTP 要求中提供參數。

  5. 再次叫用函式。 這次請提供所有查詢字串參數的值。

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    這次的輸出是 6300。 您的函式如預期般運作!

  6. 再次輸入下列命令以檢視輸出記錄。

    code ~/output.txt
    

    啟動記錄項目之後,您每次使用 curl 呼叫函式時都會看到附加了一組時間戳記的記錄項目:

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. 選取 Ctrl+Q 以關閉編輯器。