Бөлісу құралы:


Развертывание бессерверных приложений 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.

    Screenshot that shows the function app in the portal.

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

    Screenshot that shows a URL and other function app details.

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

    Screenshot that shows the welcome page for a function app.

  4. Вызовите функцию с помощью следующей greetingcurl команды в локальном терминале.

    Важно!

    Замените 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
    

    Через некоторое время на портале отображаются некоторые данные метрик.

    Screenshot that shows function metrics in the portal.

Теперь, когда вы открыли функцию Azure на портале, ниже приведены дополнительные возможности, доступные на портале:

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

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

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

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

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

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

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