演習 - Azure 関数をローカルで実行してテストする

完了

前のユニットでは、Maven 原型からサーバーレス Web サービス Azure 関数を作成する方法を学習しました。 また、Cloud Shell で関数をビルドして実行する方法と、関数をテストするためにシェル環境を構成する方法についても学習しました。

この演習では、得た知識を応用して、関数をテストするために Cloud Shell で HTTP ポートを開きます。 次に、Cloud Shell で関数をビルドして実行し、Web ブラウザーを使用して関数をテストするための 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 応答は、前の例で示したように 1 行に連結されます。 ただし、次の例は、書式設定された場合に 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 を使用して Web ブラウザーで関数をテストします。

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 の抜粋を使用して Web ブラウザーで関数をテストします。

Web ブラウザーからの関数のテスト

この演習の前半では、テスト用に HTTP ポートを開きました。このポートを使用すると、Web ブラウザーでアプリケーションをテストできます。 そのためには、次のステップに従います。

  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. Web ブラウザーで新しいタブを開き、前の手順で作成した URL をアドレス フィールドに貼り付けます。

  3. URL を要求するように Web ブラウザーに指示すると、クエリ文字列で渡した名前に合わせてカスタマイズされたプレーンテキスト メッセージが Web ブラウザーに返されます。 次に例を示します。

    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 にデプロイする方法を学習します。