Упражнение. Локальный запуск и тестирование функции Azure

Завершено

В предыдущих уроках вы узнали, как создать бессерверную функцию Azure веб-службы из архетипа Maven. Вы также узнали, как создать и запустить функцию в Cloud Shell и как настроить среду оболочки для тестирования функции.

В этом упражнении вы применяете знания, полученные для открытия HTTP-порта в Cloud Shell для тестирования функции. Затем создайте и запустите функцию в Cloud Shell и создайте URL-адрес API для тестирования функции с помощью веб-браузера.

Открытие порта 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. Скопируйте URL-адрес из ответа JSON в экземпляре Cloud Shell. Далее в этом упражнении вы используете этот URL-адрес для проверки функции в веб-браузере.

Сборка и запуск функции в Cloud Shell

После открытия порта для тестирования вы сможете создать и запустить функцию.

  1. В Azure Cloud Shell перейдите в корневую папку приложения. Например:

    cd ~/event-reporting
    
  2. Выполните следующую команду Maven, чтобы очистить каталог проекта и выполнить сборку функции:

    mvn clean package
    

    Maven отображает состояние выполнения процесса сборки. При первом создании функции Maven скачивает десятки вспомогательных файлов; эти файлы представляют собой зависимости, перечисленные в pom.xml и host.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. Скопируйте часть URL-адреса после порта HTTP, например:

    /api/HttpExample
    

    Этот URL-адрес вы используете в следующем разделе этого упражнения, чтобы протестировать функцию в веб-браузере.

Тестирование функции в веб-браузере

Ранее в этом упражнении вы открыли HTTP-порт для тестирования; этот порт позволяет протестировать приложение в веб-браузере. Для этого выполните следующие действия.

  1. Создайте URL-адрес для API функции.

    1. Получите URL-адрес, скопированный ранее в разделе Открытие порта HTTP для тестирования этого упражнения, например:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
      
    2. Добавьте фрагмент из URL-адреса API функции, скопированный ранее в разделе Сборка и запуск функции в Cloud Shell этого упражнения, например:

      https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample
      
    3. Добавьте строку запроса, которая передает имя в URL-адрес API. Например:

      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.