Развертывание бессерверных приложений Java с помощью Quarkus на Функции Azure
В этой статье вы создадите, создадите и развернете бессерверное приложение Java для Функции Azure с помощью Quarkus. В этой статье используется Quarkus Funqy и встроенная поддержка триггера HTTP Функции Azure для Java. Использование Quarkus с Функции Azure дает возможность модели программирования Quarkus с масштабом и гибкостью Функции Azure. По завершении вы запустите бессерверные приложения Quarkus на Функции Azure и продолжите отслеживать свое приложение в Azure.
Необходимые компоненты
- Azure CLI, установленный на своем компьютере.
- Учетная запись Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Java JDK 17 с
JAVA_HOME
соответствующим образом настроен. Эта статья была написана с учетом Java 17, но Функции Azure и Quarkus также поддерживают более старые версии Java. - Apache Maven 3.8.1+.
Создание проекта приложения
Используйте следующую команду, чтобы клонировать пример проекта Java для этой статьи. Пример размещен на сайте GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Если появится сообщение об отключенном состоянии HEAD , это сообщение безопасно игнорировать. Так как в этой статье нет фиксаций, отсоединяемое состояние HEAD подходит.
Изучите пример функции. Откройте файл functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java.
Выполните следующую команду. Заметка @Funq
делает метод (в данном случае) funqyHello
бессерверной функцией.
@Funq
public String funqyHello() {
return "hello funqy";
}
Функции Azure Java имеет собственный набор заметок, относящихся к Azure, но эти заметки не необходимы, если вы используете Quarkus на Функции Azure в простой емкости, как мы делаем здесь. Дополнительные сведения о Функции Azure заметках Java см. в руководстве разработчика Функции Azure Java.
Если вы не указали в противном случае, имя функции совпадает с именем метода. Можно также использовать следующую команду, чтобы определить имя функции с параметром в заметке:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Имя важно. Он становится частью URI REST для вызова функции, как показано далее в статье.
Локальное тестирование функции
Используется mvn
для запуска режима разработки Quarkus в локальном терминале. Выполнение Quarkus таким образом позволяет перезагрузить в режиме реального времени с фоновой компиляцией. При изменении файлов Java и (или) файлов ресурсов и обновления браузера эти изменения автоматически вступают в силу.
Обновление браузера активирует проверку рабочей области. Если проверка обнаруживает любые изменения, файлы Java перекомпилируются и приложение повторно развертывается. Повторно развернутые службы приложений запрос. Если возникли проблемы с компиляцией или развертыванием, страница ошибок сообщит вам об этом.
В следующей процедуре замените yourResourceGroupName
имя группы ресурсов. Имена приложений-функций должны быть глобально уникальными во всех azure. Имена групп ресурсов должны быть глобально уникальными в подписке. В этой статье достигается необходимая уникальность путем подготовки имени группы ресурсов к имени функции. Рассмотрите возможность создания уникального идентификатора для всех созданных имен, которые должны быть уникальными. Полезный способ — использовать ваши инициалы, за которыми следует сегодняшняя дата в mmdd
формате.
Для этой части инструкций не требуется группа ресурсов, но она требуется позже. Для простоты проект Maven требует определить свойство.
Вызов режима разработки Quarkus:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
Выходные данные должны выглядеть так:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] (Quarkus Main Thread) quarkus-azure-function 1.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx.) started in 1.290s. Listening on: http://localhost:8080 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, funqy-http, smallrye-context-propagation, vertx] -- Tests paused Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Доступ к функции с помощью команды в локальном терминале
CURL
:curl localhost:8080/api/funqyHello
Выходные данные должны выглядеть так:
"hello funqy"
Добавление внедрения зависимостей в функцию
Открытая стандартная технология Jakarta EE Contexts and Dependency Injection (CDI) обеспечивает внедрение зависимостей в Quarkus. Общие сведения о внедрении и CDI см. в руководстве по Jakarta EE.
Добавьте новую функцию, которая использует внедрение зависимостей.
Создайте файл GreetingService.java в каталоге functions-quarkus/src/main/java/io/quarkus. Используйте следующий код в качестве исходного кода файла:
package io.quarkus; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class GreetingService { public String greeting(String name) { return "Welcome to build Serverless Java with Quarkus on Azure Functions, " + name; } }
Сохраните файл.
GreetingService
— это вводимый боб, реализующийgreeting()
метод. Метод возвращает строковоеWelcome...
сообщение с параметромname
.Откройте существующий файл functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java . Замените класс следующим кодом, чтобы добавить новое
gService
поле иgreeting
метод:package io.quarkus; import javax.inject.Inject; import io.quarkus.funqy.Funq; public class GreetingFunction { @Inject GreetingService gService; @Funq public String greeting(String name) { return gService.greeting(name); } @Funq public String funqyHello() { return "hello funqy"; } }
Сохраните файл.
Доступ к новой
greeting
функции с помощью команды в локальном терминалеcurl
:curl -d '"Dan"' -X POST localhost:8080/api/greeting
Выходные данные должны выглядеть так:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Внимание
Динамическое программирование (также называемый режимом разработки) позволяет запускать приложение и вносить изменения в лету. Quarkus автоматически перекомпилует и перезагрузит приложение при внесении изменений. Это мощный и эффективный стиль разработки, который вы будете использовать в этой статье.
Прежде чем перейти к следующему шагу, остановите режим разработки Quarkus, нажав клавиши CTRL+C.
Развертывание приложения в Azure
Если вы еще не сделали этого, войдите в подписку Azure с помощью следующей команды az login и выполните инструкции на экране:
az login
Примечание.
Если несколько клиентов Azure связаны с учетными данными Azure, необходимо указать, в какой клиент вы хотите войти. Это можно сделать с помощью
--tenant
параметра. Например:az login --tenant contoso.onmicrosoft.com
.Продолжайте процесс в веб-браузере. Если веб-браузер недоступен или не удается открыть веб-браузер, используйте поток кода устройства.
az login --use-device-code
После успешного входа выходные данные в локальном терминале должны выглядеть следующим образом:
xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxx 'Microsoft' [ { "cloudName": "AzureCloud", "homeTenantId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx", "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "isDefault": true, "managedByTenants": [], "name": "Contoso account services", "state": "Enabled", "tenantId": "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx", "user": { "name": "user@contoso.com", "type": "user" } } ]
Создание и развертывание функций в Azure.
Файл pom.xml , созданный на предыдущем шаге
azure-functions-maven-plugin
. При выполненииmvn install
создаются файлы конфигурации и промежуточный каталог, для которыхazure-functions-maven-plugin
требуется. ДляyourResourceGroupName
этого используйте значение, используемое ранее.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Во время развертывания войдите в Azure. Подключаемый
azure-functions-maven-plugin
модуль настраивается для запроса входа Azure при каждом развертывании проекта. Во время сборки отображаются выходные данные, аналогичные следующим:[INFO] Auth type: DEVICE_CODE To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXCWTLGMP to authenticate.
Выполните выходные данные и выполните проверку подлинности в Azure с помощью браузера и предоставленного кода устройства. Доступны многие другие параметры проверки подлинности и конфигурации. Полная справочная документация
azure-functions-maven-plugin
доступна в Функции Azure: сведения о конфигурации.После проверки подлинности сборка должна продолжаться и завершиться. Убедитесь, что выходные данные включаются
BUILD SUCCESS
в конец.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
Вы также можете найти URL-адрес для активации функции в Azure в выходном журнале:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Для завершения развертывания потребуется некоторое время. В то же время давайте рассмотрим Функции Azure в портал Azure.
Доступ и мониторинг бессерверной функции в Azure
Войдите на портал и убедитесь, что вы выбрали тот же клиент и подписку, которую вы использовали в Azure CLI.
Введите приложение-функцию в строке поиска в верхней части портал Azure и выберите клавишу ВВОД. Приложение-функция должно быть развернуто и отображаться с именем
<yourResourceGroupName>-function-quarkus
.Выберите приложение-функцию, чтобы отобразить подробные сведения, такие как расположение, подписка, URL-адрес, метрики и план Служба приложений. Затем выберите значение URL-адреса .
Убедитесь, что страница приветствия говорит, что ваше приложение-функция имеет значение "up and running".
Вызовите функцию с помощью следующей
greeting
curl
команды в локальном терминале.Внимание
Замените
YOUR_HTTP_TRIGGER_URL
собственным URL-адресом функции, который вы найдете в портал Azure или выходных данных.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
Результат должен выглядеть следующим образом:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
Вы также можете получить доступ к другой функции (
funqyHello
) с помощью следующейcurl
команды:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
Выходные данные должны совпадать с тем, что вы наблюдали ранее:
"hello funqy"
Если вы хотите выполнить основные возможности метрик в портал Azure, попробуйте вызвать функцию в цикле оболочки
for
:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Через некоторое время на портале отображаются некоторые данные метрик.
Теперь, когда вы открыли функцию Azure на портале, ниже приведены дополнительные возможности, доступные на портале:
- Отслеживайте производительность функции Azure. Дополнительные сведения см. в статье Мониторинг Функций Azure.
- Изучите данные телеметрии. Дополнительные сведения см. в статье "Анализ Функции Azure телеметрии в Application Insights".
- Настройка ведения журнала. Дополнительные сведения см. в разделе "Включение журналов выполнения потоковой передачи" в Функции Azure.
Очистка ресурсов
Если эти ресурсы не нужны, их можно удалить, выполнив следующую команду:
az group delete --name <yourResourceGroupName> --yes
Следующие шаги
Из этой статьи вы узнали, как выполнять следующие задачи:
- Запустите режим разработки Quarkus.
- Развертывание приложения Funqy в функциях Azure с помощью
azure-functions-maven-plugin
. - Проверьте производительность функции на портале.
Дополнительные сведения о Функции Azure и Quarkus см. в следующих статьях и ссылках: