Поделиться через


Развертывание бессерверных приложений Java с помощью Quarkus на Функции Azure

В этой статье вы создадите, создадите и развернете бессерверное приложение Java для Функции Azure с помощью Quarkus. В этой статье используется Quarkus Funqy и встроенная поддержка триггера HTTP Функции Azure для Java. Использование Quarkus с Функции Azure дает возможность модели программирования Quarkus с масштабом и гибкостью Функции Azure. По завершении вы запустите бессерверные приложения Quarkus на Функции Azure и продолжите отслеживать свое приложение в Azure.

Необходимые компоненты

Создание проекта приложения

Используйте следующую команду, чтобы клонировать пример проекта 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 требует определить свойство.

  1. Вызов режима разработки 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>
    
  2. Доступ к функции с помощью команды в локальном терминале CURL :

    curl localhost:8080/api/funqyHello
    

    Выходные данные должны выглядеть так:

    "hello funqy"
    

Добавление внедрения зависимостей в функцию

Открытая стандартная технология Jakarta EE Contexts and Dependency Injection (CDI) обеспечивает внедрение зависимостей в Quarkus. Общие сведения о внедрении и CDI см. в руководстве по Jakarta EE.

  1. Добавьте новую функцию, которая использует внедрение зависимостей.

    Создайте файл 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 .

  2. Откройте существующий файл 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";
        }
    
    }
    

    Сохраните файл.

  3. Доступ к новой 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

  1. Если вы еще не сделали этого, войдите в подписку 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"
            }
        }
    ]
    
  2. Создание и развертывание функций в 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
    
  3. Во время развертывания войдите в 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: сведения о конфигурации.

  4. После проверки подлинности сборка должна продолжаться и завершиться. Убедитесь, что выходные данные включаются 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.

  1. Введите приложение-функцию в строке поиска в верхней части портал Azure и выберите клавишу ВВОД. Приложение-функция должно быть развернуто и отображаться с именем <yourResourceGroupName>-function-quarkus.

    Снимок экрана: приложение-функция на портале.

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

    Снимок экрана: URL-адрес и другие сведения о приложении-функции.

  3. Убедитесь, что страница приветствия говорит, что ваше приложение-функция имеет значение "up and running".

    Снимок экрана: страница приветствия для приложения-функции.

  4. Вызовите функцию с помощью следующей 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 на портале, ниже приведены дополнительные возможности, доступные на портале:

Очистка ресурсов

Если эти ресурсы не нужны, их можно удалить, выполнив следующую команду:

az group delete --name <yourResourceGroupName> --yes

Следующие шаги

Из этой статьи вы узнали, как выполнять следующие задачи:

  • Запустите режим разработки Quarkus.
  • Развертывание приложения Funqy в функциях Azure с помощью azure-functions-maven-plugin.
  • Проверьте производительность функции на портале.

Дополнительные сведения о Функции Azure и Quarkus см. в следующих статьях и ссылках: