Руководство. Создание веб-приложения Tomcat с Azure App Service в Linux и MySQL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Совет

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

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

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

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

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

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

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

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

    • В строке поиска в верхней части введите службу приложений.
    • В разделе " Службы" выберите "Служба приложений".
    • Выберите "Создать>веб-приложение".

    Вы также можете сразу перейти к мастеру создания.

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

    • Группа ресурсов: выберите "Создать" и используйте имя msdocs-tomcat-mysql-tutorial.
    • Имя: msdocs-tomcat-mysql-XYZ, где XYZ - это любые три случайные символа.
    • Стек среды выполнения: Java 25.
    • Стек веб-сервера Java: Apache Tomcat 11.0.
    • Операционная система: Linux.
    • Регион: любой регион Azure рядом с вами.
    • Тарифный план: Базовый. Когда вы будете готовы, вы можете перейти на производственный ценовой уровень.
  3. Выберите вкладку "База данных " и настройте базу данных:

    • Выберите "Создать базу данных".
    • В обработчике выберите MySQL — гибкий сервер. База данных Azure для MySQL. Гибкий сервер — это полностью управляемая база данных MySQL как услуга в Azure, совместимая с последними выпусками сообщества.
    • Не нажимайте кнопку "Создать Кэш Azure для Redis".
  4. Выберите "Рецензирование и создание". После завершения проверки нажмите кнопку "Создать".

  5. После завершения развертывания нажмите кнопку "Перейти к ресурсу ". Вы перейдете непосредственно в приложение Службы приложений.

Создаются следующие ресурсы:

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

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

3. Безопасные секреты подключения

Мастер создания создал строку подключения к базе данных для вас уже в качестве параметра приложения. Однако с точки зрения безопасности лучше всего вообще не хранить секреты в App Service. Вы перемещаете секреты в хранилище ключей и изменяете параметр приложения на ссылку Key Vault с помощью соединителей служб.

Шаг 1. Получение существующей строки подключения

  1. В меню слева на странице "Служба приложений" выберите Параметры > Переменные среды>.
  2. Выберите AZURE_MYSQL_CONNECTIONSTRING. Он содержит строку подключения JDBC. Если вы добавляете параметр приложения, содержащий допустимую строку подключения Oracle, SQL Server, PostgreSQL или MySQL, служба приложений внедряет ее в качестве источника данных Java Naming and Directory Interface (JNDI) в context.xml-файле сервера Tomcat.
  3. В разделе "Добавление и изменение параметра приложения" в поле "Значение " найдите часть password= в конце строки.
  4. Скопируйте строку пароля после password= для последующего использования. Этот параметр приложения позволяет подключиться к базе данных MySQL, защищенной за частной конечной точкой. Однако секретный ключ сохраняется прямо в приложении App Service, что не является оптимальным вариантом. Вы измените это.

Шаг 2. Создание хранилища ключей для безопасного управления секретами

  1. В верхней строке поиска введите "хранилище ключей", а затем выберите Marketplace>Key Vault.
  2. В группе ресурсов выберите msdocs-tomcat-mysql-tutorial.
  3. В имени хранилища ключей введите имя, состоящее только из букв и чисел.
  4. В регионе задайте для него то же расположение, что и группа ресурсов.

Шаг 3. Защита хранилища ключей с помощью частной конечной точки

  1. Выберите вкладку "Сеть".
  2. Отмена выбора включения общедоступного доступа.
  3. Выберите "Создать частную конечную точку".
  4. В группе ресурсов выберите msdocs-tomcat-mysql-tutorial.
  5. В поле "Имя" введите имя частной конечной точки, состоящей только из букв и чисел.
  6. В регионе задайте для него то же расположение, что и группа ресурсов.
  7. В диалоговом окне в расположении выберите то же расположение, что и приложение службы приложений.
  8. В группе ресурсов выберите msdocs-tomcat-mysql-tutorial.
  9. В поле Name введите msdocs-tomcat-mysql-XYZVaultEndpoint.
  10. В виртуальной сети выберите msdocs-tomcat-mysql-XYZVnet.
  11. В подсетиmsdocs-tomcat-mysql-XYZSubnet.
  12. Нажмите кнопку "ОК".
  13. Выберите "Просмотр и создание", а затем нажмите кнопку "Создать". Дождитесь завершения развертывания хранилища ключей. Должно появиться сообщение "Развертывание завершено".

Шаг 4. Настройка соединителя службы

  1. В верхней строке поиска введите msdocs-tomcat-mysql, а затем ресурс службы приложений с именем msdocs-tomcat-mysql-XYZ.
  2. На странице "Служба приложений" в меню слева выберите "Настройки > соединителя службы". У вас уже есть соединитель, созданный мастером создания приложения.
  3. Установите флажок рядом с соединителем, а затем нажмите кнопку "Изменить".
  4. На вкладке "Основные сведения" задайте тип клиентаJava.
  5. Перейдите на вкладку "Проверка подлинности ".
  6. Вставьте пароль, скопированный ранее.
  7. Выберите "Сохранить секрет" в Key Vault.
  8. В разделе "Подключение к Key Vault" выберите "Создать". Диалоговое окно создания подключения открывается поверх диалогового окна редактирования.

Шаг 5. Установка подключения к Key Vault

  1. В диалоговом окне "Создание подключения" для подключения Key Vault в Key Vault выберите созданное ранее хранилище ключей.
  2. Выберите "Рецензирование и создание". Вы должны увидеть, что управляемое удостоверение, назначаемое системой установлено в положение Выбрано.
  3. После завершения проверки нажмите кнопку "Создать".

Шаг 6. Завершение настройки соединителя службы

  1. Вы вернётесь в диалоговое окно редактирования для defaultConnector. На вкладке «Аутентификация» дождитесь создания подключения к хранилищу ключей. При завершении в раскрывающемся списке автоматически выбирается Key Vault Connection.
  2. Нажмите кнопку "Далее" — сеть.
  3. Нажмите кнопку "Сохранить". Подождите, пока появится уведомление об успешном обновлении.

Шаг 7. Проверка интеграции Key Vault

  1. В меню слева снова выберите Настройки переменные среды>.
  2. Рядом с AZURE_MYSQL_CONNECTIONSTRING выберите "Показать значение". Значение должно быть @Microsoft.KeyVault(...), что означает, что это ссылка на хранилище ключей, поскольку секрет теперь хранится в хранилище ключей.

Подводя итог, процесс включал получение строки подключения MySQL из переменных среды App Service, создание Azure Key Vault для безопасного управления секретами с закрытым доступом и обновление соединителя службы для хранения пароля в Azure Key Vault. Безопасное подключение между приложением Служба приложений и хранилищем ключей было установлено с помощью управляемого удостоверения, назначаемого системой, и программа установки была проверена путем подтверждения того, что строка подключения использует ссылку Key Vault.

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

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

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

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

  1. Нажмите кнопку "Добавить".
  2. Установите для Имя значение WEBSITE_AUTOCONFIGURE_DATABASE, а для Значениеtrue.
  3. Нажмите кнопку "Применить", а затем еще раз, чтобы сохранить и перезапустить приложение.

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

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

Шаг 3. В терминале SSH выполните команду cat /usr/local/tomcat/conf/context.xml. Вы должны увидеть, что был добавлен ресурс JNDI с именем jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS. Позже вы используете этот источник данных.

Примечание.

После перезапуска приложения могут сохраняться только изменения в файлах в /home. Например, если вы измените /usr/local/tomcat/conf/server.xml, изменения не сохранятся после перезапуска приложения.

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

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

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

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

Шаг 1. Вернитесь на страницу службы приложений в меню слева выберите Центр развертывания.

Шаг 2. На странице Центра развертывания:

  1. В источнике выберите GitHub. По умолчанию GitHub Actions выбирается в качестве поставщика сборки.
  2. Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
  3. В организации выберите свою учетную запись.
  4. В репозитории выберите msdocs-tomcat-mysql-sample-app.
  5. В Branch выберите starter-no-infra. Это та же ветка, в которой вы работали с вашим примером приложения, без каких-либо файлов и конфигурации, связанных с Azure.
  6. Для типа проверки подлинности выберите пользовательская идентификация.
  7. В верхнем меню нажмите кнопку "Сохранить". Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге .github/workflows. По умолчанию центр развертывания создает назначаемое пользователем удостоверение для рабочего процесса для проверки подлинности с помощью Microsoft Entra (проверка подлинности OIDC). Дополнительные сведения о вариантах проверки подлинности см. в разделе "Развертывание в службе приложений" с помощью GitHub Actions.

Шаг 3: Вернитесь в форкнутый репозиторий вашего примера в GitHub и выполните git pull origin starter-no-infra. Это извлекает только что зафиксированный файл рабочего процесса в пространство кода.

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

  1. Начните новый сеанс чата, щелкнув представление Чат, а затем — +.
  2. Спросите: "@workspace Как приложение подключается к базе данных?". Copilot может дать вам некоторое объяснение jdbc/MYSQLDS источника данных и его настройке.
  3. Спросите: "@workspace я хочу заменить источник данных, определенный в persistence.xml существующим источником данных JNDI в Tomcat, но я хочу сделать это динамически". Copilot может предложить вам вариант кода, аналогичный Варианту 2: без использования GitHub Copilot, и даже подсказать вам внести изменения в класс ContextListener.
  4. Откройте src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java в обозревателе и добавьте предложение кода в contextInitialized метод. GitHub Copilot не дает вам одинаковый ответ каждый раз, вам может потребоваться задать дополнительные вопросы, чтобы точно настроить его ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".

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

  1. Откройте src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java в обозревателе. При запуске приложения этот класс загружает параметры базы данных в src/main/resources/META-INF/persistence.xml.
  2. В методе contextIntialized() найдите закомментированный код (строки 29–33) и раскомментируйте его. Этот код проверяет, существует ли настройка приложения AZURE_MYSQL_CONNECTIONSTRING, и изменяет источник данных на java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS, который является источником данных, найденным ранее в context.xml в SSH-оболочке.

Шаг 5.

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

Шаг 6. Вернитесь на страницу Центра развертывания на портале Azure:

  1. Выберите логи. Новый процесс развертывания уже запущен на основе зафиксированных вами изменений.
  2. В элементе журнала для запуска развертывания выберите запись "Сборка и развертывание журналов " с последней меткой времени.

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

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

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

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

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

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

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

7. Передача диагностических журналов в режиме реального времени

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

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

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

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

Шаг 2. В меню слева выберите поток журналов. Вы увидите журналы вашего приложения, включая журналы платформы и журналы изнутри контейнера.

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

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

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

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

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

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

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

Шаг 3.

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

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

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

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

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

    azd init --template tomcat-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 команды занимает около 10 минут. Он также компилирует и развертывает код вашего приложения, но позже вы изменяете свой код, чтобы он работал с App Service. Во время выполнения команда предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure. По завершении команда также отображает ссылку на приложение развертывания.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     Open SSH session to App Service container at: <URL>
     
  2. В терминале SSH выполните команду cat /usr/local/tomcat/conf/context.xml. Вы должны увидеть, что был добавлен ресурс JNDI с именем jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS. Позже вы используете этот источник данных. Служба приложений автоматически создает этот источник данных, так как шаблон AZD устанавливает параметр приложения WEBSITE_AUTOCONFIGURE_DATABASE в значение true.

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

Примечание.

После перезапуска приложения могут сохраняться только изменения в файлах в /home. Например, если вы измените /usr/local/tomcat/conf/server.xml, изменения не сохранятся после перезапуска приложения.

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

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

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

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

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

  4. Откройте src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java в обозревателе и добавьте предложение кода в contextInitialized метод.

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

  5. В терминале codespace выполните команду 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. Добавьте несколько задач в список.

    Снимок экрана: веб-приложение Tomcat с MySQL, работающее в Azure с задачами.

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

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

7. Передача диагностических журналов в режиме реального времени

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

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

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

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

Stream App Service logs at: <URL>

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

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

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

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

azd down

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

Я вижу много <классов> , отсканированных из нескольких расположений с предупреждениями mvn jetty:run

Эти предупреждения можно игнорировать. Подключаемый модуль Maven Jetty отображает предупреждения, так как pom.xml приложения содержит зависимость для jakarta.servlet.jsp.jstl, которая уже предоставляется Jetty из коробки. Вам нужна зависимость для Tomcat.

Представление развертывания на портале для База данных Azure для MySQL — Flexible Server отображает состояние «Конфликт»

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

InternalServerError: An unexpected error occurred while processing the request.

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

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

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

Я вижу ошибку 404 «Страница не найдена» в развернутом тестовом приложении

Убедитесь, что вы внесли изменения в код для использования java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS источника данных. При внесении изменений и повторном развертывании кода Служба приложений, скорее всего, по-прежнему загружает обновленный контейнер. Подождите несколько минут и обновите страницу.

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

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

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

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

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

  • В контейнере Tomcat в настоящее время также отсутствует терминал mysql-client. При желании его необходимо установить вручную. Помните, что все, что вы устанавливаете, не сохраняется во время перезапуска приложения.
  • Чтобы подключиться из средства для настольных систем, например MySQL Workbench, компьютер должен находиться в соответствующей виртуальной сети. Например, это может быть виртуальная машина Azure в одной из подсетей или компьютер в локальной сети с VPN-подключением типа "сеть — сеть" с виртуальной сетью Azure.
  • Вы также можете интегрировать Azure Cloud Shell с виртуальной сетью.

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

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

git add .
git commit -m "<some-message>"
git push origin main

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

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

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

Вы могли заметить, что панель чата GitHub Copilot уже была доступна при создании codespace. Для удобства мы добавим расширение чата 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 на Служба приложений см. в руководстве разработчика.

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