Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения контейнеров Azure предоставляют управляемое удостоверение для приложения, которое является решением для защиты доступа к Базе данных Azure для PostgreSQL и других служб Azure. Управляемые удостоверения в контейнерных приложениях делают ваше приложение более безопасным, исключая необходимость использования секретов, например, необходимость указывать учетные данные в переменных среды.
В этом руководстве описан процесс создания, настройки, развертывания и масштабирования приложений контейнеров Java в Azure. В конце этого руководства у вас будет приложение Quarkus, которое хранит данные в базе данных PostgreSQL с управляемым удостоверением, работающее в Container Apps.
Что вы узнаете:
- Настройте приложение Quarkus для аутентификации с использованием Microsoft Entra ID и базы данных PostgreSQL.
- Создайте экземпляр реестра контейнеров Azure и отправьте в него образ приложения Java.
- Создайте приложение-контейнер в Azure.
- Создайте базу данных PostgreSQL в Azure.
- Подключитесь к базе данных PostgreSQL с управляемым удостоверением с помощью сервисного соединителя.
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
1. Предварительные требования
2. Создание реестра контейнеров
Создайте группу ресурсов с помощью команды az group create . Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.
В следующем примере создается группа ресурсов с именем myResourceGroup в регионе "Восточная часть США Azure".
RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
az group create --name $RESOURCE_GROUP --location $LOCATION
Создайте экземпляр реестра контейнеров Azure с помощью команды az acr create и получите его сервер входа с помощью команды az acr show . Имя реестра должно быть уникальным в пределах Azure и содержать от 5 до 50 буквенно-цифровых символов. Все буквы должны быть указаны в нижнем регистре. В следующем примере mycontainerregistry007 используется. Замените его уникальным значением.
REGISTRY_NAME=mycontainerregistry007
az acr create \
--resource-group $RESOURCE_GROUP \
--name $REGISTRY_NAME \
--sku Basic
REGISTRY_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv | tr -d '\r')
3. Клонирование примера приложения и подготовка образа контейнера
В этом руководстве используется пример приложения списка фруктов с веб-интерфейсом, который вызывает REST API Quarkus, поддерживаемый базой данных Azure для PostgreSQL. Код приложения доступен на сайте GitHub. Дополнительные сведения о написании приложений Java с помощью Quarkus и PostgreSQL см. в руководстве Quarkus Hibernate ORM с Panache и руководстве Quarkus Datasource.
Выполните следующие команды в терминале, чтобы клонировать репозиторий и настроить среду примера приложения.
git clone https://github.com/quarkusio/quarkus-quickstarts
cd quarkus-quickstarts/hibernate-orm-panache-quickstart
Изменение проекта
Добавьте необходимые зависимости в POM-файл проекта.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.2.0</version> </dependency>Настройте свойства приложения Quarkus.
Конфигурация Quarkus находится в файле src/main/resources/application.properties . Откройте этот файл в редакторе и просмотрите несколько свойств по умолчанию. Свойства, которые имеют префикс
%prod, используются только при создании и развертывании приложения, например, при развертывании в Службе приложений Azure. При локальном запуске приложения свойства%prodигнорируются. Аналогичным образом свойства%devиспользуются в режиме динамического написания кода или разработки Quarkus, а свойства%testиспользуются во время непрерывного тестирования.Удалите существующее содержимое в application.properties и замените следующим образом, чтобы настроить базу данных для режимов разработки, тестирования и рабочей среды:
quarkus.hibernate-orm.database.generation=drop-and-create quarkus.datasource.db-kind=postgresql quarkus.datasource.jdbc.max-size=8 quarkus.datasource.jdbc.min-size=2 quarkus.hibernate-orm.log.sql=true quarkus.hibernate-orm.sql-load-script=import.sql quarkus.datasource.jdbc.acquisition-timeout = 10 %dev.quarkus.datasource.username=${CURRENT_USERNAME} %dev.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\ authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\ &sslmode=require %prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME} %prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\ authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\ &sslmode=require %dev.quarkus.class-loading.parent-first-artifacts=com.azure:azure-core::jar,\ com.azure:azure-core-http-netty::jar,\ io.projectreactor.netty:reactor-netty-core::jar,\ io.projectreactor.netty:reactor-netty-http::jar,\ io.netty:netty-resolver-dns::jar,\ io.netty:netty-codec::jar,\ io.netty:netty-codec-http::jar,\ io.netty:netty-codec-http2::jar,\ io.netty:netty-handler::jar,\ io.netty:netty-resolver::jar,\ io.netty:netty-common::jar,\ io.netty:netty-transport::jar,\ io.netty:netty-buffer::jar,\ com.azure:azure-identity::jar,\ com.azure:azure-identity-extensions::jar,\ com.fasterxml.jackson.core:jackson-core::jar,\ com.fasterxml.jackson.core:jackson-annotations::jar,\ com.fasterxml.jackson.core:jackson-databind::jar,\ com.fasterxml.jackson.dataformat:jackson-dataformat-xml::jar,\ com.fasterxml.jackson.datatype:jackson-datatype-jsr310::jar,\ org.reactivestreams:reactive-streams::jar,\ io.projectreactor:reactor-core::jar,\ com.microsoft.azure:msal4j::jar,\ com.microsoft.azure:msal4j-persistence-extension::jar,\ org.codehaus.woodstox:stax2-api::jar,\ com.fasterxml.woodstox:woodstox-core::jar,\ com.nimbusds:oauth2-oidc-sdk::jar,\ com.nimbusds:content-type::jar,\ com.nimbusds:nimbus-jose-jwt::jar,\ net.minidev:json-smart::jar,\ net.minidev:accessors-smart::jar,\ io.netty:netty-transport-native-unix-common::jar,\ net.java.dev.jna:jna::jar
Создание и отправка образа Docker в реестр контейнеров
Создание образа контейнера.
Выполните следующую команду, чтобы создать образ приложения Quarkus. Необходимо отметить его полным квалифицированным именем вашего сервера входа в реестр.
CONTAINER_IMAGE=${REGISTRY_SERVER}/quarkus-postgres-passwordless-app:v1 mvn quarkus:add-extension -Dextensions="container-image-jib" mvn clean package -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${CONTAINER_IMAGE}Войдите в реестр.
Перед отправкой образов контейнеров необходимо войти в реестр. Для этого используйте команду [az acr login][az-acr-login].
az acr login --name $REGISTRY_NAMEПо завершении команда возвращает сообщение
Login Succeeded.Отправьте образ в реестр.
Используйте
docker pushдля отправки образа в экземпляр реестра. В этом примере создается репозиторийquarkus-postgres-passwordless-app, содержащийquarkus-postgres-passwordless-app:v1образ.docker push $CONTAINER_IMAGE
4. Создание приложения-контейнера в Azure
Создайте экземпляр контейнерных приложений, выполнив следующую команду. Замените значение переменных среды фактическим именем и расположением, которое вы хотите использовать.
CONTAINERAPPS_ENVIRONMENT="my-environment" az containerapp env create \ --resource-group $RESOURCE_GROUP \ --name $CONTAINERAPPS_ENVIRONMENT \ --location $LOCATIONСоздайте приложение-контейнер с изображением приложения, выполнив следующую команду:
APP_NAME=my-container-app az containerapp create \ --resource-group $RESOURCE_GROUP \ --name $APP_NAME \ --image $CONTAINER_IMAGE \ --environment $CONTAINERAPPS_ENVIRONMENT \ --registry-server $REGISTRY_SERVER \ --registry-identity system \ --ingress 'external' \ --target-port 8080 \ --min-replicas 1Примечание.
Параметры
--registry-usernameи--registry-passwordпо-прежнему поддерживаются, но не рекомендуются, поскольку использование системы идентификации является более безопасным.
5. Создание и подключение базы данных PostgreSQL с идентификационным подключением
Затем создайте базу данных PostgreSQL и настройте приложение контейнера для подключения к базе данных PostgreSQL с управляемым удостоверением, назначаемым системой. Приложение Quarkus подключается к этой базе данных и сохраняет данные при выполнении, сохраняя состояние приложения независимо от того, где выполняется приложение.
Создайте службу базы данных.
DB_SERVER_NAME='msdocs-quarkus-postgres-webapp-db' az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ --name $DB_SERVER_NAME \ --location $LOCATION \ --public-access None \ --sku-name Standard_B1ms \ --tier Burstable \ --active-directory-auth EnabledПримечание.
Параметры
--admin-userи--admin-passwordпо-прежнему поддерживаются, но не рекомендуются, поскольку использование системы идентификации является более безопасным.В приведенной выше команде Azure CLI используются следующие параметры:
-
группа ресурсов → Использовать то же имя группы ресурсов, в котором вы создали веб-приложение, например
msdocs-quarkus-postgres-webapp-rg. -
имя → имя сервера базы данных PostgreSQL. Это имя должно быть уникальным во всех Azure (конечная точка сервера становится
https://<name>.postgres.database.azure.com). Допустимые символы:A-Z,0-9и-. Рекомендуется использовать сочетание названия компании и идентификатора сервера. (msdocs-quarkus-postgres-webapp-db) - расположение → Использовать то же расположение, которое используется для веб-приложения. Перейдите на другое местоположение, если это не работает.
-
общедоступный доступ →
None, который задает сервер в режиме общедоступного доступа без правил брандмауэра. Правила создаются на следующем шаге. -
SKU-name → Имя ценовой категории и конфигурации вычислений, например
Standard_B1ms. Дополнительные сведения см. в разделе о ценах на Базу данных Azure для PostgreSQL. - уровень → Уровень вычислений сервера. Дополнительные сведения см. в разделе о ценах на Базу данных Azure для PostgreSQL.
-
active-directory-auth →
Enabledдля активации проверки подлинности Microsoft Entra.
-
группа ресурсов → Использовать то же имя группы ресурсов, в котором вы создали веб-приложение, например
Создайте базу данных с именем
fruitsв службе PostgreSQL с помощью этой команды:DB_NAME=fruits az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $DB_SERVER_NAME \ --database-name $DB_NAMEУстановите расширение "без пароля" для соединителя службы Azure CLI.
az extension add --name serviceconnector-passwordless --upgrade --allow-preview trueПодключите базу данных к приложению-контейнеру с управляемым удостоверением, назначаемое системой, с помощью команды подключения.
az containerapp connection create postgres-flexible \ --resource-group $RESOURCE_GROUP \ --name $APP_NAME \ --target-resource-group $RESOURCE_GROUP \ --server $DB_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $APP_NAME
6. Просмотр изменений
URL-адрес приложения (FQDN) можно найти с помощью следующей команды:
echo https://$(az containerapp show \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--query properties.configuration.ingress.fqdn \
--output tsv)
Когда на новой веб-странице появляется ваш список фруктов, ваше приложение подключается к базе данных с помощью управляемой учетной записи. Теперь вы сможете редактировать список фруктов, как и раньше.
Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:
az group delete --name myResourceGroup
Выполнение этой команды может занять минуту.
Следующие шаги
Дополнительные сведения о запуске приложений Java в Azure см. в руководстве разработчика.