Упражнение. Локальный запуск и тестирование функции Azure
В предыдущих уроках вы узнали, как создать бессерверную функцию Azure веб-службы из архетипа Maven. Вы также узнали, как создать и запустить функцию в Cloud Shell и как настроить среду оболочки для тестирования функции.
В этом упражнении вы применяете знания, полученные для открытия HTTP-порта в Cloud Shell для тестирования функции. Затем создайте и запустите функцию в Cloud Shell и создайте URL-адрес API для тестирования функции с помощью веб-браузера.
Открытие порта HTTP для тестирования
Прежде чем выполнять удаленную проверку функции, необходимо открыть порт, чтобы HTTP-запросы сопоставлялись с функцией. Это действие создает общедоступный URL-адрес, который вы используете позже в этом упражнении для тестирования функции.
В Azure Cloud Shell выполните следующую команду cURL, чтобы открыть порт HTTP для тестирования:
curl -X POST http://localhost:8888/openPort/7071
При открытии порта отображается ответ 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/" }
Этот пример должен помочь вам при изучении данных в ответе.
Скопируйте URL-адрес из ответа JSON в экземпляре Cloud Shell. Далее в этом упражнении вы используете этот URL-адрес для проверки функции в веб-браузере.
Сборка и запуск функции в Cloud Shell
После открытия порта для тестирования вы сможете создать и запустить функцию.
В Azure Cloud Shell перейдите в корневую папку приложения. Например:
cd ~/event-reporting
Выполните следующую команду 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] ------------------------------------------------------------------------
Когда 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-запросы.
Скопируйте часть URL-адреса после порта HTTP, например:
/api/HttpExample
Этот URL-адрес вы используете в следующем разделе этого упражнения, чтобы протестировать функцию в веб-браузере.
Тестирование функции в веб-браузере
Ранее в этом упражнении вы открыли HTTP-порт для тестирования; этот порт позволяет протестировать приложение в веб-браузере. Для этого выполните следующие действия.
Создайте URL-адрес для API функции.
Получите URL-адрес, скопированный ранее в разделе Открытие порта HTTP для тестирования этого упражнения, например:
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
Добавьте фрагмент из URL-адреса API функции, скопированный ранее в разделе Сборка и запуск функции в Cloud Shell этого упражнения, например:
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample
Добавьте строку запроса, которая передает имя в URL-адрес API. Например:
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample?name=Bob
Скопируйте этот полностью созданный URL-адрес для использования в следующих шагах.
Откройте новую вкладку в веб-браузере и вставьте в адресную строку полностью созданный URL-адрес из предыдущих шагов.
При указании веб-браузера запрашивать 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.