Руководство: Создание веб-приложения JBoss с помощью службы приложений Azure в Linux и MySQL

В этом руководстве показано, как создать, настроить и развернуть безопасное приложение JBoss в Службе приложений Azure, которое подключается к базе данных MySQL с помощью Базы данных Azure для MySQL. Служба приложений Azure — это высокомасштабируемый веб-хостинг с поддержкой самостоятельного исправления, который позволяет легко развертывать приложения в Windows или Linux. После работы с этим руководством у вас есть приложение JBoss, которое работает в Службе приложений Azure в Linux.

Примечание.

Платформа приложений JBoss Enterprise (JBoss EAP) в службе приложений теперь поддерживает выставление счетов за использование собственной лицензии (BYOL). Этот подход позволяет клиентам с существующими подписками Red Hat применять эти лицензии непосредственно к развертываниям JBoss EAP в Службе приложений Azure. Подробнее.

Снимок экрана: приложение JBoss, в котором хранятся данные в MySQL.

В этом руководстве описано следующее:

  • Создайте безопасную архитектуру по умолчанию для службы приложение Azure и гибкого сервера База данных Azure для MySQL.
  • Безопасное подключение к базе данных с помощью строка подключения без пароля.
  • Проверьте источники данных JBoss в Службе приложений с помощью интерфейса CLI JBoss.
  • Разверните образец приложения JBoss в Службе приложений из репозитория GitHub.
  • Доступ к параметрам приложения Служба приложений в коде приложения.
  • Создание обновлений и повторное развертывание кода приложения.
  • Трансляция журналов диагностики из Службы приложений.
  • Управляйте приложением в портале Azure.
  • Подготовьте ту же архитектуру и разверните с помощью Интерфейса командной строки разработчика Azure.
  • Оптимизируйте рабочий процесс разработки с помощью GitHub Codespaces и GitHub Copilot.

Предварительные требования

  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
  • Учетная запись GitHub. Вы можете получить его бесплатно.
  • Знание Java в контексте разработки на JBoss.
  • (Необязательно) Чтобы попробовать GitHub Copilot, нужна учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
  • Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
  • Установлен интерфейс командной строки разработчика Azure. Вы можете выполнять действия в Azure Cloud Shell, так как в нем уже установлен интерфейс командной строки разработчика Azure.
  • Знание Java и опыт разработки с JBoss.
  • (Необязательно) Чтобы попробовать GitHub Copilot, нужна учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.

Перейти к концу

Вы можете быстро развернуть пример приложения в этом руководстве и увидеть его выполнение в Azure. Просто выполните следующие команды в Azure Cloud Shell и следуйте инструкциям в командной строке:

mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up

1. Запустите пример

Сначала настройте пример приложения на основе данных в качестве отправной точки. Для удобства пример репозитория включает конфигурацию контейнера разработки . Контейнер разработки имеет все необходимое для разработки приложения, включая базу данных, кэш и все переменные среды, необходимые для примера приложения. Контейнер разработки может выполняться в пространстве кода GitHub, что означает, что вы можете запустить пример на любом компьютере с веб-браузером.

Шаг 1. В новом окне браузера:

  1. Войдите в свою учетную запись GitHub.
  2. Перейдите к https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
  3. Снять выделение Копировать только основную ветвь. Вы хотите все ветви.
  4. Выберите "Создать форк".

Шаг 2. В форке на GitHub:

  1. Выберите main>starter-no-infra для начальной ветви. Эта ветвь содержит только пример проекта и не содержит файлов или конфигурации, связанных с Azure.
  2. Выберите Код>Codespaces. Затем выберите Создать кодовое пространство на starter-no-infra. Для подготовки кодового пространства требуется несколько минут.

Шаг 3: В терминале кодового пространства:

  1. Запустите mvn clean wildfly:run.
  2. Когда появится уведомление Your application running on port 8080 is available., подождите несколько секунд, пока сервер WildFly завершит загрузку приложения. Затем нажмите кнопку "Открыть в браузере". Пример приложения должен отображаться на новой вкладке браузера. Чтобы остановить сервер WildFly, введите Ctrl+C.

Совет

Вы можете попросить GitHub Copilot об этом репозитории. Например:

  • @workspace Что делает этот проект?
  • @workspace Что делает папка devcontainer?

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

2. Создание App Service и MySQL

Сначала создайте ресурсы Azure. Действия, используемые в этом руководстве, создают набор безопасных ресурсов по умолчанию, включающих Служба приложений и База данных Azure для MySQL. Для процесса создания укажите:

  • Название для веб-приложения. Он используется в качестве части DNS-имени приложения.
  • Регион для физического запуска приложения в мире. Регион является частью DNS-имени приложения.
  • Стек среды выполнения для приложения. Здесь вы выбираете версию Java, используемую для вашего приложения.
  • План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
  • Группа ресурсов для приложения. Группа ресурсов позволяет группировать все ресурсы Azure, необходимые для приложения в логическом контейнере.

Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.

Шаг 1. На портале Azure:

  1. В верхней строке поиска введите службу приложений.
  2. В разделе " Службы" выберите "Служба приложений".
  3. Выберите "Создать>веб-приложение". Вы также можете перейти к мастеру создания напрямую.

Шаг 2. На странице "Создание веб-приложения" заполните форму следующим образом.

  1. Имя: msdocs-jboss-mysql. Процесс создает группу ресурсов с именем msdocs-jboss-mysql_group.
  2. Стек среды выполнения: Java 17.
  3. Стек веб-сервера Java: Red Hat JBoss EAP 8.
  4. Операционная система: Linux.
  5. Регион: любой регион Azure рядом с вами.
  6. План Linux: Создайте новый и используйте имя msdocs-jboss-mysql.
  7. Тарифный план: Premium V3 P0V3. Когда вы будете готовы, вы можете увеличить масштаб до другой ценовой категории.

Шаг 3.

  1. Перейдите на вкладку "База данных ".
  2. Выберите "Создать базу данных".
  3. В обработчике выберите MySQL — гибкий сервер.
  4. Выберите Развертывание.

Шаг 4.

  1. Перейдите на вкладку "Развертывание ".
  2. Включите непрерывное развертывание.
  3. В организации выберите псевдоним GitHub.
  4. В репозитории выберите msdocs-jboss-mysql-sample-app.
  5. В Branch выберите starter-no-infra.
  6. Убедитесь, что обычная проверка подлинности отключена.
  7. Выберите "Рецензирование и создание".
  8. После завершения проверки нажмите кнопку "Создать".

Шаг 5. Развертывание занимает несколько минут. После завершения развертывания выберите Перейти к ресурсу. Он перенаправляет вас непосредственно в приложение 'App Service', но при этом создаются следующие ресурсы:

  • Группа ресурсов: контейнер для всех созданных ресурсов.
  • План службы приложений: определяет вычислительные ресурсы для службы приложений. Создается план Linux на уровне "Базовый ".
  • App Service: Представляет ваше приложение и запускается в плане App Service.
  • Виртуальная сеть: интегрирована с приложением службы приложений и изолирует внутренний сетевой трафик.
  • Гибкий сервер Базы данных Azure для MySQL: доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
  • Частные зоны DNS: позволяют обеспечить разрешение DNS сервера базы данных в виртуальной сети.
  • Частные конечные точки: доступ к конечным точкам сервера базы данных в виртуальной сети.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

3. Создание подключения без пароля

На этом этапе создается подключение службы на основе управляемой идентификации, которое вы сможете позже использовать для создания источника данных на вашем сервере JBoss. Используя управляемое удостоверение для подключения к базе данных MySQL, ваш код защищен от утечки конфиденциальной информации.

Шаг 1. Создайте управляемое удостоверение.

  1. В верхней строке поиска введите управляемое удостоверение.
  2. В разделе "Службы" выберите Управляемые удостоверения.
  3. Нажмите кнопку "Создать".
  4. В группе ресурсов выберите msdocs-jboss-mysql_group.
  5. В регионе выберите тот же регион, который использовался для веб-приложения.
  6. В поле Name введите msdocs-jboss-mysql-server-identity.
  7. Выберите "Рецензирование и создание".
  8. Нажмите кнопку "Создать".

Шаг 2. Включение проверки подлинности Microsoft Entra на сервере MySQL.

  1. В верхней строке поиска введите msdocs-jboss-mysql-server.
  2. Выберите ресурс сервера Azure Database for MySQL Flexible Server с именем msdocs-jboss-mysql-server.
  3. В меню слева выберите Безопасность>Аутентификация.
  4. На экране "Назначение доступа" выберите только аутентификацию Microsoft Entra.
  5. В Меню "Выбор идентификатора" выберите Пункт "Выбрать".
  6. Выберите msdocs-jboss-mysql-server-identity, а затем нажмите кнопку "Добавить". Для назначения удостоверения серверу MySQL требуется определённое время.
  7. В имени администратора Microsoft Entra нажмите кнопку "Выбрать".
  8. Найдите учетную запись Azure и выберите ее, а затем нажмите кнопку "Выбрать".
  9. Нажмите кнопку "Сохранить " и дождитесь завершения операции.

Шаг 3. Добавление соединителя службы на основе управляемых удостоверений.

  1. В верхней строке поиска введите msdocs-jboss-mysql.
  2. Выберите ресурс службы приложений с именем msdocs-jboss-mysql.
  3. На странице "Служба приложений" в меню слева выберите "Параметры > соединителя службы".
  4. Нажмите кнопку "Создать".
  5. На вкладке "Основные сведения" :
  6. Установите тип службы в DB для гибкого сервера MySQL.
  7. Установите гибкий сервер MySQL на msdocs-jboss-mysql-server.
  8. Задайте для базы данных MySQL значение msdocs-jboss-mysql-database.
  9. Задайте тип клиентаJava.
  10. Перейдите на вкладку "Проверка подлинности ".
  11. Выберите системное управляемое удостоверение.
  12. Выберите вкладку "Рецензирование и создание ".
  13. После завершения проверки выберите "Создать в Cloud Shell " и дождитесь завершения операции в Cloud Shell.
  14. При отображении выходных данных JSON можно закрыть Cloud Shell. Кроме того, закройте диалоговое окно создания подключения .
  15. Выберите "Обновить", чтобы отобразить новый соединитель службы.

Шаг 4. Добавьте плагины аутентификации в строки подключения.

  1. В меню слева выберите переменные среды.
  2. Выберите AZURE_MYSQL_CONNECTIONSTRING. Поле "Значение" должно содержать user, но не содержать password. Пользователь является управляемой идентичностью.
  3. Сервер JBoss в приложении службы приложений имеет подключаемые модули аутентификации, которые аутентифицируют управляемую идентичность, но вам все равно необходимо добавить ее в строку подключения. Прокрутите до конца значения и добавьте &defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin.
  4. Нажмите кнопку "Применить".
  5. Нажмите кнопку "Применить", а затем подтвердите.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

4. Подтверждение источника данных JNDI

Если добавить параметр приложения, содержащий допустимую строку подключения JDBC для Oracle, SQL Server, PostgreSQL или MySQL, Служба приложений добавляет для него источник данных Java Naming and Directory Interface (JNDI) на сервере JBoss. На этом шаге вы используете подключение SSH к контейнеру приложения для проверки источника данных JNDI. В этом процессе вы узнаете, как получить доступ к оболочке SSH и запустить интерфейс командной строки JBoss.

Шаг 1. Вернитесь на страницу службы приложений:

  1. В меню слева выберите Средства разработки>SSH.
  2. Нажмите кнопку "Перейти".

Шаг 2. В терминале SSH:

  1. Запустите $JBOSS_HOME/bin/jboss-cli.sh --connect.
  2. В подключении интерфейса командной строки JBoss выполните команду ls subsystem=datasources/data-source. Вы увидите автоматически созданный источник AZURE_MYSQL_CONNECTIONSTRING_DSданных.
  3. Получите имя JNDI источника данных с помощью /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name). Теперь у вас есть имя java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSJNDI, которое можно использовать в коде приложения позже.

Примечание.

После перезапуска приложения могут сохраняться только изменения в файлах в /home. Например, если изменить конфигурацию сервера с помощью /opt/eap/standalone/configuration/standalone.xml в командной строке JBoss, изменения не сохранятся при дальнейшем перезапуске приложения. Чтобы сохранить изменения, используйте скрипт запуска, например в разделе "Настройка источников данных" для приложения Tomcat, JBoss или Java SE в службе приложений Azure.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

5. Развертывание примера кода

На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждый git push из репозитория GitHub запускает действие сборки и развертывания.

Как и соглашение JBoss, если вы хотите развернуть в корневом контексте JBoss, назовите созданный артефакт ROOT.war.

Шаг 1. Вернитесь в GitHub Codespace вашего форка образца, выполните git pull origin starter-no-infra. Эта команда извлекает только что зафиксированный файл рабочего процесса в пространство кода. Его можно изменить в соответствии с вашими потребностями в .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.

Шаг 2 (вариант 1: с GitHub Copilot):

  1. Чтобы начать новый сеанс чата, выберите представление чата , а затем выберите +.
  2. Спросите: "@workspace Как приложение подключается к базе данных?". Copilot может дать вам некоторое объяснение java:jboss/MySQLDS источника данных и его настройке.
  3. Скажем, "Источник данных в JBoss в Azure использует имя JNDI java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS". Copilot может предоставить вам предложение кода, аналогичное приведенному в следующем варианте 2: без шага GitHub Copilot и даже сообщить вам, чтобы внести изменения в класс. GitHub Copilot не дает вам одинаковый ответ каждый раз. Вам, возможно, потребуется задать больше вопросов, чтобы уточнить его ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?

Шаг 2 (вариант 2: без GitHub Copilot):

  1. Откройте src/main/resources/META-INF/persistence.xml в обозревателе. При запуске приложения он загружает параметры базы данных в этом файле.
  2. Измените значение <jta-data-source> с java:jboss/MySQLDS на java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS, это источник данных, который вы нашли с помощью интерфейса командной строки JBoss ранее в оболочке SSH.

Шаг 3.

  1. Выберите расширение управления исходным кодом.
  2. В текстовом поле введите сообщение коммита, например Configure Azure JNDI name.
  3. Нажмите кнопку "Зафиксировать", а затем подтвердите значение "Да".
  4. Нажмите кнопку "Синхронизировать изменения 1", а затем нажмите кнопку "ОК".

Шаг 4. Вернитесь на страницу управления службами приложений на портале Azure:

  1. В меню слева выберитеЦентр развертывания>.
  2. Выберите лог-файлы. Новый запуск развертывания уже начат на основе зафиксированных изменений.
  3. В элементе журнала развертывания выберите запись "Журналы сборки/развертывания" с последней временной меткой.

Шаг 5. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь запуска GitHub, чтобы отобразить состояние Complete. Это занимает около 5 минут.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

6. Перейдите к приложению

Шаг 1. На странице службы приложений:

  1. В меню слева выберите "Обзор".
  2. В домене по умолчанию выберите URL-адрес приложения.

Шаг 2. Добавьте в список несколько задач. Поздравляем! Веб-приложение выполняется в Службе приложений Azure с безопасным подключением к Базе данных Azure для MySQL.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

7. Потоковая передача журналов диагностики

Служба приложений Azure захватывает все сообщения, выводимые на консоль, чтобы помочь в диагностике проблем с приложением. Пример приложения включает стандартные инструкции ведения журнала Log4j для демонстрации этой возможности, как показано в следующем фрагменте кода:

private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

@PersistenceContext
private EntityManager entityManager;

public List<Task> getAllTasks() {
    logger.log(Level.INFO, "Finding all tasks. ");

    return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}

На странице "Служба приложений" выберите в левом меню Мониторинг>Журналы потоков. Вы можете просматривать логи своего приложения, включая логи платформы и контейнерные логи.

Узнайте больше о ведении журнала в приложениях Java в серии Включить Azure Monitor OpenTelemetry для приложений .NET, Node.js, Python и Java.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

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

По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.

Шаг 1. В строке поиска в верхней части портала Azure:

  1. Введите имя группы ресурсов msdocs-jboss-mysql_group.
  2. Выберите группу ресурсов.

Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".

Шаг 3.

  1. Подтвердите удаление, введя имя группы ресурсов.
  2. Нажмите кнопку "Удалить".
  3. Подтвердите удаление еще раз.

2. Создание ресурсов Azure и развертывание примера приложения

На этом шаге вы создадите ресурсы Azure и развернете пример приложения в Службе приложений на Linux. Действия, используемые в этом руководстве, создают набор безопасных ресурсов по умолчанию, включающих Служба приложений и База данных Azure для MySQL.

Контейнер разработки уже имеет интерфейс командной строки разработчика Azure (AZD).

  1. Выполните команду azd initиз корневого каталога репозитория.

    azd init --template jboss-app-service-mysql-infra
    
  2. При появлении запроса укажите следующие ответы:

    Вопрос Ответ
    Продолжить инициализацию приложения в '<your-directory>'? Y
    Что вы хотите сделать с этими файлами? Сохранение существующих файлов без изменений
    Введите новое имя среды Введите уникальное имя. Шаблон AZD использует это имя как часть DNS-имени веб-приложения в Azure (<app-name>-<hash>.azurewebsites.net). Разрешены буквенно-цифровые символы и дефисы.
  3. Войдите в Azure, выполнив команду azd auth login и следуя подсказкам.

    azd auth login
    
  4. Создайте необходимые ресурсы Azure и разверните код приложения командой azd up. Следуйте запросу, чтобы выбрать нужную подписку и расположение для ресурсов Azure.

    azd up
    

    Выполнение azd up команды занимает около 15 минут. Кэш Redis занимает больше всего времени. Команда также компилирует и развертывает код приложения. Вы измените код позже, чтобы работать с службой приложений. Во время выполнения команда предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure. По завершении команда также отображает ссылку на развернутое приложение.

    Этот шаблон AZD содержит файлы (azure.yaml и каталог infra), создающие безопасную архитектуру по умолчанию со следующими ресурсами Azure:

    • Группа ресурсов: контейнер для всех созданных ресурсов.
    • План службы приложений: определяет вычислительные ресурсы для службы приложений. Создается план Linux на уровне B1 .
    • App Service: Представляет ваше приложение и запускается в плане App Service.
    • Виртуальная сеть: интегрирована с приложением службы приложений и изолирует внутренний сетевой трафик.
    • Гибкий сервер Базы данных Azure для MySQL: доступен только из виртуальной сети. База данных создается для вас на сервере.
    • Кэш Azure для Redis. Доступно только из виртуальной сети.
    • Частные конечные точки: доступ к конечным точкам для хранилища ключей и кэша Redis в виртуальной сети.
    • Частные зоны DNS: включение разрешения DNS хранилища ключей, сервера базы данных и кэша Redis в виртуальной сети.
    • Рабочая область Log Analytics: выступает в качестве целевого контейнера для вашего приложения для отправки журналов, где можно также запрашивать журналы.
    • Хранилище ключей. Используется для сохранения пароля базы данных при повторном развертывании с помощью AZD.

    Команда завершает создание ресурсов и развертывание кода приложения в первый раз, но развернутое пример приложения еще не работает. Чтобы подключиться к базе данных в Azure, необходимо внести небольшие изменения.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

3. Проверьте строки подключения

Шаблон AZD, который вы используете, создал переменные подключения для вас уже в качестве параметров приложения и выводит их в терминал. Параметры приложения — это один из способов защиты секретов подключения от попадания в репозиторий кода.

  1. В выходных данных AZD найдите параметр приложения AZURE_MYSQL_CONNECTIONSTRING. Отображаются только имена параметров. Они выглядят следующим образом в выходных данных AZD:

     App Service app has the following app settings:
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
     

    AZURE_MYSQL_CONNECTIONSTRING содержит строку подключения для базы данных MySQL в Azure. Позже его необходимо использовать в коде.

  2. Для удобства шаблон AZD отображает прямую ссылку на страницу параметров приложения. Найдите ссылку и откройте ее на новой вкладке браузера.

    Если вы добавляете параметр приложения, содержащий допустимую строку подключения Oracle, SQL Server, PostgreSQL или MySQL, служба приложений добавляет ее в качестве источника данных Java Naming and Directory Interface (JNDI) в context.xml-файле сервера JBoss.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

4. Подтверждение источника данных JNDI

На этом шаге вы используете подключение SSH к контейнеру приложения для проверки источника данных JNDI на сервере JBoss. В этом процессе вы узнаете, как получить доступ к оболочке SSH для контейнера JBoss.

  1. В выходных данных AZD найдите URL-адрес сеанса SSH и перейдите к нему в браузере. Это выглядит следующим образом в выходных данных:

     Open SSH session to App Service container at: <URL>
     
  2. В терминале SSH выполните команду $JBOSS_HOME/bin/jboss-cli.sh --connect.

  3. В подключении интерфейса командной строки JBoss выполните команду ls subsystem=datasources/data-source. Вы увидите автоматически созданный источник AZURE_MYSQL_CONNECTIONSTRING_DSданных.

  4. Получите имя JNDI источника данных с помощью /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name). Теперь у вас есть имя java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSJNDI, которое можно использовать в коде приложения позже.

    Снимок экрана, показывающий команды для выполнения в оболочке SSH и их результаты.

Примечание.

После перезапуска приложения могут сохраняться только изменения в файлах в /home. Например, если изменить конфигурацию сервера с помощью /opt/eap/standalone/configuration/standalone.xml в командной строке JBoss, изменения не сохранятся при дальнейшем перезапуске приложения. Чтобы сохранить изменения, используйте скрипт запуска, например в разделе "Настройка источников данных" для приложения Tomcat, JBoss или Java SE в службе приложений Azure.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

5. Изменение примера кода и повторное развертывание

  1. Чтобы запустить новый сеанс чата, в пространстве кода GitHub выберите представление чата , а затем выберите +.

  2. Спросите: "@workspace Как приложение подключается к базе данных?". Copilot может дать вам некоторое объяснение java:jboss/MySQLDS источника данных и его настройке.

  3. Спросите: "@workspace я хочу заменить источник данных, определенный в persistence.xml существующим источником данных JNDI в JBoss". Copilot может предоставить вам предложение кода, аналогичное приведенному в следующем варианте 2: без шагов GitHub Copilot и даже сообщить вам внести изменения в файлpersistence.xml .

  4. Откройте src/main/resources/META-INF/persistence.xml в обозревателе и внесите предлагаемые изменения JNDI.

    GitHub Copilot не дает вам одинаковый ответ каждый раз. Возможно, вам потребуется задать другие вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?

  5. В терминале кодового пространства выполните команду azd deploy.

    azd deploy
    

Совет

Вы также можете всегда использовать azd up, что выполняет все azd package, azd provision и azd deploy.

Чтобы узнать, как упаковывается war-файл , можно запустить azd package --debug самостоятельно.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

6. Перейдите к приложению

  1. В выходных данных AZD найдите URL-адрес приложения и перейдите к нему в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Добавьте несколько задач в список.

    Снимок экрана веб-приложения JBoss с MySQL, запущенным в Azure, где показаны задачи.

    Поздравляем! Веб-приложение выполняется в Службе приложений Azure с безопасным подключением к Базе данных Azure для MySQL.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

7. Потоковая передача журналов диагностики

Служба приложений Azure может записывать журналы консоли, чтобы помочь в диагностике проблем с вашим приложением. Для удобства шаблон AZD уже включил ведение журнала в локальную файловую систему и отправляет журналы в рабочую область Log Analytics.

Пример приложения включает стандартные инструкции ведения журнала Log4j для демонстрации этой возможности, как показано в следующем фрагменте кода:

private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

@PersistenceContext
private EntityManager entityManager;

public List<Task> getAllTasks() {
    logger.log(Level.INFO, "Finding all tasks. ");

    return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}

В выходных данных AZD найдите ссылку для потоковой передачи журналов службы приложений и перейдите к ней в браузере. Ссылка выглядит следующим образом в выходных данных AZD:

Stream App Service logs at: <URL>

Узнайте больше о ведении журнала в приложениях Java в серии Включить Azure Monitor OpenTelemetry для приложений .NET, Node.js, Python и Java.

Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".

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

Чтобы удалить все ресурсы Azure в текущей среде развертывания, выполните azd down и следуйте инструкциям.

azd down

Устранение неполадок

В мастере создания видно сообщение об ошибке: "Отсутствует право на использование функции Bring Your Own License".

Если вы видите ошибку: The subscription 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e' is not entitled to use the Bring Your Own License feature when creating the applicationэто означает, что выбрана лицензия Red Hat JBoss EAP 7/8 BYO встеке веб-серверов Java , но не настроена учетная запись Azure в Red Hat Cloud Access или у вас нет активной лицензии JBoss EAP в Red Hat Cloud Access.

В представлении развертывания в портале для базы данных Azure для MySQL на гибком сервере отображается статус конфликта.

В зависимости от вашей подписки и региона можно увидеть состояние развертывания гибкого сервера базы данных Azure для MySQL Conflict, со следующим сообщением в разделе "Сведения об операции".

InternalServerError: An unexpected error occurred while processing the request.

Эта ошибка, скорее всего, вызвана ограничением подписки для выбранного региона. Попробуйте выбрать другой регион для развертывания.

В диалоговом окне "Создание подключения" отображается кнопка Create On Cloud Shell, но она не включена.

В диалоговом окне также может появиться сообщение об ошибке: The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.

Автоматизация соединителя служб нуждается в сетевом доступе к серверу MySQL. Просмотрите параметры сетевых подключений ресурса сервера MySQL и убедитесь, что разрешён общедоступный доступ к этому ресурсу через Интернет с использованием общедоступного IP-адреса как минимум. Коннектор сервиса может продолжить работу оттуда.

Если этот флажок не отображается, возможно, вы создали развертывание с помощью мастера веб-приложения и базы данных , а развертывание блокирует доступ ко всему общедоступному сетевому серверу MySQL. Изменить конфигурацию невозможно. Так как контейнер Linux приложения может получить доступ к MySQL через интеграцию виртуальной сети, вы можете установить Azure CLI в сеансе SSH приложения и запустить указанные команды Cloud Shell там.

Развернутое примерное приложение не отображает приложение для управления списком задач.

Если вы видите страницу-заставку JBoss вместо приложения списка задач, Служба приложений, скорее всего, по-прежнему загружает обновленный контейнер из последнего развертывания кода. Подождите несколько минут и обновите страницу.

Мое приложение не удалось запустить, и я вижу: "Доступ запрещен для пользователя... (с помощью пароля: NO)' в журналах.

Эта ошибка, скорее всего, вызвана тем, что вы не добавили плагин проверки подлинности без пароля в строку подключения. См. пример кода Java для интеграции базы данных Azure для MySQL с соединителем службы. Измените строку подключения MySQL, следуя инструкциям в 3. Создайте подключение без пароля.

В диагностических логах отображается ошибка "Таблица 'Task' уже существует".

Эту ошибку Гибернации можно игнорировать, так как она указывает, что код приложения подключен к базе данных MySQL. Приложение настроено для создания необходимых таблиц при запуске, как в src/main/resources/META-INF/persistence.xml. Когда приложение запускается в первый раз, оно должно успешно создать таблицы, но при последующих перезапусках вы увидите эту ошибку, так как таблицы уже существуют.

Часто задаваемые вопросы

Сколько стоит такая конфигурация?

Цены на созданные ресурсы приведены следующим образом:

  • План службы приложений создается на уровне P0v3 и может быть масштабирован вверх или вниз. См. цены на службу приложений.
  • Гибкий сервер MySQL создается на уровне D2ds и может масштабироваться вверх или вниз. См. цены на Базу данных Azure для MySQL.
  • Кэш Azure для Redis создается на уровне "Базовый" с минимальным размером кэша. На этом уровне предусмотрена небольшая плата. Его можно масштабировать до более высоких уровней производительности для повышения доступности, кластеризации и других функций. См. цены на кэш Azure для Redis.
  • Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальную сеть Azure.
  • За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.

Как подключиться к серверу MySQL, находящемуся за виртуальной сетью, используя другие инструменты?

В этом руководстве приложение службы приложений уже имеет сетевое подключение к серверу MySQL и может проходить проверку подлинности с помощью Microsoft Entra с помощью управляемого удостоверения, назначаемого системой. Вы можете подключиться к MySQL непосредственно из контейнера приложения, выполнив следующие команды в сеансе SSH. Получите значения <server>, <user>, и <database> из настройки приложения AZURE_MYSQL_CONNECTIONSTRING.

apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`

Ниже приведены некоторые рекомендации.

  • Средства, устанавливаемые в сеансе SSH, не сохраняются во время перезапуска приложения.
  • Если вы выполнили действия портала Azure и настроили MySQL с помощью пользователя Microsoft Entra в качестве администратора, вы можете подключиться к MySQL с помощью пользователя Microsoft Entra.
  • Чтобы подключиться к рабочему столу, например MySQL Workbench, компьютер должен находиться в виртуальной сети, например виртуальная машина Azure, развернутая в той же виртуальной сети. Кроме того, необходимо отдельно настроить проверку подлинности с помощью управляемого удостоверения или пользователя Microsoft Entra.
  • Чтобы подключиться с компьютера в локальной сети с VPN-подключением типа "сеть — сеть" с виртуальной сетью Azure, невозможно настроить проверку подлинности с помощью управляемого удостоверения. Проверку подлинности можно настроить с помощью пользователя Microsoft Entra.
  • Вы также можете интегрировать Azure Cloud Shell и подключиться с помощью Azure CLI или Интерфейса командной строки MySQL. Для проверки подлинности можно настроить пользователя Microsoft Entra.

Как я могу получить действительный токен доступа для подключения к MySQL с помощью аутентификации Microsoft Entra?

Для пользователя Microsoft Entra, управляемого удостоверения с системным назначением или управляемого удостоверения с пользовательским назначением, авторизованного для доступа к базе данных MySQL, Azure CLI может помочь создать токен доступа. Если вы используете управляемое удостоверение, удостоверение должно быть настроено в приложении службы приложений или виртуальной машине, где выполняется Azure CLI.

# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>

# Get an access token
az account get-access-token --resource-type oss-rdbms

Вы также можете использовать команду az mysql flexible-server connect Azure CLI для подключения к MySQL. При появлении запроса используйте маркер доступа в качестве пароля.

az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive

Дополнительные сведения см. в разделе:

Как осуществляется разработка локальных приложений с использованием GitHub Actions?

Используя автоматически созданный файл рабочего процесса из Службы приложений в качестве примера, каждый git push запускает новую сборку и процесс развертывания. Из локального клона репозитория GitHub необходимо внести необходимые обновления и отправить их в GitHub. Например:

git add .
git commit -m "<some-message>"
git push origin starter-no-infra

У меня нет разрешений на создание пользовательского удостоверения

См. настройку развертывания GitHub Actions из Центра развертывания.

Что можно сделать с помощью GitHub Copilot в моем пространстве кода?

Вы можете заметить, что чат GitHub Copilot уже был доступен, когда вы создали кодовое пространство. Для удобства мы добавим расширение чата GitHub Copilot в определение контейнера, как в .devcontainer/devcontainer.json. Вам нужна учетная запись GitHub Copilot (доступна бесплатная пробная версия 30 дней).

Несколько советов для вас при разговоре с GitHub Copilot:

  • В одном чате вопросы и ответы дополняют друг друга, и вы можете корректировать свои вопросы, чтобы уточнить получаемый ответ.
  • По умолчанию GitHub Copilot не имеет доступа к файлу в репозитории. Чтобы задать вопросы о файле, сначала откройте файл в редакторе.
  • Чтобы разрешить GitHub Copilot получить доступ ко всем файлам в репозитории при подготовке его ответов, начните с вашего вопроса @workspace. Дополнительные сведения см. в разделе Use the @workspace agent.
  • В сеансе чата GitHub Copilot может предложить изменения и (с @workspace) даже указать, где внести изменения, но не может выполнять их самостоятельно. Вам решать, добавлять ли предлагаемые изменения и тестировать их.

Вот некоторые другие вещи, которые вы можете сказать, чтобы точно настроить ответ, который вы получаете:

  • Измените этот код, чтобы использовать источник данных jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
  • В вашем коде некоторые импорты используют javax, однако у меня приложение Jakarta.
  • Я хочу, чтобы этот код выполнялся только в том случае, если задана переменная среды AZURE_MYSQL_CONNECTIONSTRING.
  • Я хочу, чтобы этот код выполнялся только в службе приложение Azure, а не локально.

Дополнительные сведения о запуске приложений Java на Служба приложений см. в руководстве разработчика.

Узнайте, как защитить приложение с помощью личного домена и сертификата.