練習 - 在本機執行及測試 Azure 函式

已完成

在先前的單元中,您已了解如何從 Maven 原型建立無伺服器 Web 服務 Azure 函式。 您也了解如何在 Cloud Shell 中建置及執行函式,以及如何設定殼層環境來測試您的函式。

在本練習中,您將應用所學到的知識,以在 Cloud Shell 中開啟 HTTP 連接埠來測試函式。 然後在殼層中建置並執行您的函式,並使用網頁瀏覽器來建立 API URL 以測試函式。

開啟 HTTP 連接埠以進行測試

您必須先開啟連接埠以便 HTTP 要求對應至函式,才能從遠端測試函式。 此動作會產生公用 URL,其可供稍後在本練習中用來測試函式。

  1. 在 Azure Cloud Shell 中,使用下列 cURL 命令來開啟 HTTP 連接埠以進行測試:

    curl -X POST http://localhost:8888/openPort/7071
    
  2. 連接埠開啟時,您會看到類似下列範例的 JSON 回應:

    {"message":"Port 7071 is open","url":"https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/"}
    

    JSON 回應會串連成單一行,如先前的範例所示。 不過,下列範例示範如果 JSON 回應已格式化時的相似之處:

    {
        "message": "Port 7071 is open",
        "url": "https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/"
    }
    

    此範例應該有助檢查回應中包含的資料。

  3. 從 Cloud Shell 執行個體中的 JSON 回應複製 URL。 稍後在本練習中,您會使用該 URL 在網頁瀏覽器中測試函式。

在 Cloud Shell 中建置並執行函式

在開啟連接埠以進行測試後,您就能夠建置並執行函式。

  1. 在 Azure Cloud Shell 中切換至應用程式的根資料夾。 例如:

    cd ~/event-reporting
    
  2. 使用下列 Maven 命令來清理專案目錄並建置函式:

    mvn clean package
    

    Maven 會顯示建置程式的執行狀態。 在您第一次建置函式時,Maven 會下載數十個支援檔案;這些檔案是在 pom.xmlhost.json 檔案中列出的相依性。 下列摘要顯示成功建置的簡略範例:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Azure Java Functions 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    . . .
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 8.509 s
    [INFO] Finished at: 2020-01-01T04:55:05+00:00
    [INFO] Final Memory: 57M/306M
    [INFO] ------------------------------------------------------------------------
    
  3. 當 Maven 完成建置及封裝函式時,請使用下列 Maven 命令來執行函式:

    mvn azure-functions:run
    

    Maven 會顯示啟動程序的執行狀態。 下列摘要顯示成功啟動的簡略範例:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Azure Java Functions 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- azure-functions-maven-plugin:1.4.1:run (default-cli) @ event-reporting ---
    [INFO] Azure Function App's staging directory found at: /home/user/event-reporting/target/azure-functions/event-reporting-20200101063700664
    [INFO] Azure Functions Core Tools found.
    
                      %%%%%%
                     %%%%%%
                @   %%%%%%    @
              @@   %%%%%%      @@
           @@@    %%%%%%%%%%%    @@@
         @@      %%%%%%%%%%        @@
           @@         %%%%       @@
             @@      %%%       @@
               @@    %%      @@
                    %%
                    %
    
    Azure Functions Core Tools (2.7.2184 Commit hash: 5afacc827c2848e4debc23bb96604f1ffce09cc7)
    Function Runtime Version: 2.0.12961.0
    . . .
    Hosting environment: Production
    Content root path: /home/user/event-reporting/target/azure-functions/event-reporting-20200101063700664
    Now listening on: http://0.0.0.0:7071
    Application started. Press Ctrl+C to shut down.
    
    Http Functions:
    
            HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
    
    

    無伺服器函式正在接聽 HTTP 要求。

  4. 複製 HTTP 連接埠後面的 URL 區段,例如:

    /api/HttpExample
    

    您會在本練習的下一節中使用該 URL 摘要,以在網頁瀏覽器中測試函式。

從網頁瀏覽器測試函式

在本練習先前的部分中,您已開啟 HTTP 連接埠以進行測試;此連接埠可供在網頁瀏覽器中測試應用程式。 若要這樣做,請使用下列步驟。

  1. 為函式的 API 建立 URL:

    1. 取得先前在本練習<開啟 HTTP 連接埠以進行測試>一節中複製的 URL,例如:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
      
    2. 附加先前在本練習<在 Cloud Shell 中建置並執行函式>一節中複製的函式 API URL 摘錄,例如:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample
      
    3. 附加可將名稱傳遞至 API URL 的查詢字串,例如:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample?name=Bob
      
    4. 複製此完整建構的 URL 以供下列步驟使用。

  2. 在網頁瀏覽器中開啟新的索引標籤,並將先前步驟中的完整建構 URL 貼入位址欄位。

  3. 當指示網頁瀏覽器要求 URL 時,您會看到傳回網頁瀏覽器的純文字訊息,此訊息會針對您在查詢字串中傳遞的名稱進行個人化。 例如:

    Hello, Bob
    

    您應該會在 Azure Cloud Shell 中看到類似下列範例的狀態訊息,其指出已成功處理要求:

    [1/1/20 7:08:11 AM] Executing HTTP request: {
    [1/1/20 7:08:11 AM]   "requestId": "12345678-1234-1234-1234-123456789abc",
    [1/1/20 7:08:11 AM]   "method": "GET",
    [1/1/20 7:08:11 AM]   "uri": "/api/HttpExample"
    [1/1/20 7:08:11 AM] }
    [1/1/20 7:08:12 AM] Executing 'Functions.HttpExample' (Reason='This function was programmatically called via the host APIs.', Id=12345678-1234-1234-1234-123456789abc)
    [1/1/20 7:08:12 AM] Java HTTP trigger processed a request.
    [1/1/20 7:08:12 AM] Function "HttpExample" (Id: 12345678-1234-1234-1234-123456789abc) invoked by Java Worker
    [1/1/20 7:08:12 AM] Host lock lease acquired by instance ID '00000000000000000000000052DF09EB'.
    [1/1/20 7:08:12 AM] Executed 'Functions.HttpExample' (Succeeded, Id=12345678-1234-1234-1234-123456789abc)
    [1/1/20 7:08:13 AM] Executed HTTP request: {
    [1/1/20 7:08:13 AM]   "requestId": "12345678-1234-1234-1234-123456789abc",
    [1/1/20 7:08:13 AM]   "method": "GET",
    [1/1/20 7:08:13 AM]   "uri": "/api/HttpExample",
    [1/1/20 7:08:13 AM]   "identities": [
    [1/1/20 7:08:13 AM]     {
    [1/1/20 7:08:13 AM]       "type": "WebJobsAuthLevel",
    [1/1/20 7:08:13 AM]       "level": "Admin"
    [1/1/20 7:08:13 AM]     }
    [1/1/20 7:08:13 AM]   ],
    [1/1/20 7:08:13 AM]   "status": 200,
    [1/1/20 7:08:13 AM]   "duration": 1759
    [1/1/20 7:08:13 AM] }
    

如果您未看到任何錯誤,就表示已成功在本機測試函式!

在繼續前,請先切換回 Cloud Shell 並按 Ctrl+C 來關閉測試伺服器。

在下一個單元中,您會了解如何將函式部署至 Azure Functions。