Руководство. Развертывание приложения Spring в Azure Spring Apps с подключением без пароля к базе данных Azure
В этой статье рассказывается, как использовать подключения без пароля к базам данных Azure в приложениях Spring Boot, развернутых в Azure Spring Apps.
В этом руководстве описаны следующие задачи с помощью портала Azure или Azure CLI. Оба метода описаны в следующих процедурах.
- Создайте экземпляр Azure Spring Apps.
- Создание и развертывание приложений в Azure Spring Apps.
- Запуск приложений, подключенных к базам данных Azure с помощью управляемого удостоверения.
Заметка
Это руководство не работает для R2DBC.
Необходимые условия
- Подписка Azure. Если у вас еще нет учетной записи, создайте бесплатную учетную запись перед началом.
- Azure CLI 2.45.0 или более поздней версии.
- Расширение Azure Spring Apps. Расширение можно установить с помощью команды:
az extension add --name spring
. - пакет средств разработки Java (JDK), версии 8, 11 или 17.
- Клиент Git.
- cURL или аналогичную программу HTTP для тестирования функциональных возможностей.
- Клиент командной строки MySQL, если вы решили запустить базу данных Azure для MySQL. Вы можете подключиться к серверу с помощью Azure Cloud Shell, используя популярный клиентский инструмент, инструмент командной строки mysql.exe. Кроме того, можно использовать командную строку
mysql
в локальной среде. - драйвер ODBC 18 для SQL Server, если вы решили запустить базу данных SQL Azure.
Подготовка рабочей среды
Сначала настройте некоторые переменные среды с помощью следующих команд:
export AZ_RESOURCE_GROUP=passwordless-tutorial-rg
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demodb
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_SPRING_APPS_SERVICE_NAME=<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
export AZ_SPRING_APPS_APP_NAME=hellospring
export AZ_DB_ADMIN_USERNAME=<YOUR_DB_ADMIN_USERNAME>
export AZ_DB_ADMIN_PASSWORD=<YOUR_DB_ADMIN_PASSWORD>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
Замените заполнители следующими значениями, которые используются в этой статье:
-
<YOUR_DATABASE_SERVER_NAME>
: имя сервера базы данных Azure, который должен быть уникальным в Azure. -
<YOUR_AZURE_REGION>
. Регион Azure, который вы хотите использовать. По умолчанию можно использоватьeastus
, но рекомендуется настроить регион ближе к месту жизни. Полный список доступных регионов можно просмотреть с помощьюaz account list-locations
. -
<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
: имя вашего экземпляра Azure Spring Apps. Имя должно быть от 4 до 32 символов длиной и может содержать только строчные буквы, цифры и дефисы. Первый символ имени службы должен быть буквой, а последний символ должен быть буквой или числом. -
<AZ_DB_ADMIN_USERNAME>
: имя администратора сервера базы данных Azure. -
<AZ_DB_ADMIN_PASSWORD>
: пароль администратора сервера базы данных Azure. -
<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
: имя назначаемого пользователем управляемого сервера удостоверений, которое должно быть уникальным в Azure.
Подготовьте экземпляр Azure Spring Apps
Чтобы подготовить экземпляр Azure Spring Apps, выполните следующие действия.
Обновите Azure CLI с помощью расширения Azure Spring Apps с помощью следующей команды:
az extension update --name spring
Войдите в Azure CLI и выберите активную подписку с помощью следующих команд:
az login az account list --output table az account set --subscription <name-or-ID-of-subscription>
Используйте следующие команды, чтобы создать группу ресурсов для хранения службы Azure Spring Apps и экземпляра службы Azure Spring Apps:
az group create \ --name $AZ_RESOURCE_GROUP \ --location $AZ_LOCATION az spring create \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_SPRING_APPS_SERVICE_NAME
Создание экземпляра базы данных Azure
Чтобы подготовить экземпляр базы данных Azure, выполните следующие действия.
Создайте сервер Базы данных Azure для MySQL с помощью следующей команды:
az mysql flexible-server create \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_DATABASE_SERVER_NAME \ --location $AZ_LOCATION \ --admin-user $AZ_DB_ADMIN_USERNAME \ --admin-password $AZ_DB_ADMIN_PASSWORD \ --yes
Заметка
Если вы не предоставляете admin-user
или admin-password
параметры, система создаст пользователя администратора по умолчанию или случайный пароль администратора по умолчанию.
Создайте базу данных с помощью следующей команды:
az mysql flexible-server db create \ --resource-group $AZ_RESOURCE_GROUP \ --database-name $AZ_DATABASE_NAME \ --server-name $AZ_DATABASE_SERVER_NAME
Создание приложения с назначенной общедоступной конечной точкой
Чтобы создать приложение, используйте следующую команду.
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_APPS_SERVICE_NAME \
--name $AZ_SPRING_APPS_APP_NAME \
--runtime-version=Java_17
--assign-endpoint true
Подключение Azure Spring Apps к базе данных Azure
Сначала установите соединитель службы расширения без пароля для Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Затем используйте следующую команду, чтобы создать управляемое удостоверение, назначаемое пользователем для проверки подлинности Microsoft Entra. Для получения дополнительной информации см. статью Настройка проверки подлинности Microsoft Entra для гибкого сервера базы данных Azure для MySQL.
export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
--name $AZ_USER_IDENTITY_NAME \
--resource-group $AZ_RESOURCE_GROUP \
--query id \
--output tsv)
Важный
После создания назначенного пользователем удостоверения, попросите глобального администратора или администратора привилегированных ролей предоставить следующие разрешения для этого удостоверения: User.Read.All
, GroupMember.Read.All
и Application.Read.ALL
. Дополнительные сведения см. в разделе "Разрешения" проверки подлинности Active Directory .
Затем используйте следующую команду, чтобы создать бессерверное подключение к базе данных.
az spring connection create mysql-flexible \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_APPS_SERVICE_NAME \
--app $AZ_SPRING_APPS_APP_NAME \
--target-resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_SERVER_NAME \
--database $AZ_DATABASE_NAME \
--system-identity mysql-identity-id=$AZ_IDENTITY_RESOURCE_ID
Эта команда Соединителя служб выполняет следующие задачи в фоновом режиме:
Включите управляемое удостоверение, назначаемое системой, для приложения
$AZ_SPRING_APPS_APP_NAME
, размещенного в приложении Azure Spring Apps.Установите администратора Microsoft Entra на текущего вошедшего пользователя.
Добавьте в базу данных пользователя с именем
$AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME
для управляемого удостоверения, созданного на шаге 1, и предоставьте этому пользователю все привилегии базы данных$AZ_DATABASE_NAME
.Добавьте две конфигурации в приложение
$AZ_SPRING_APPS_APP_NAME
:spring.datasource.url
иspring.datasource.username
.Заметка
Если отображается сообщение об ошибке
The subscription is not registered to use Microsoft.ServiceLinker
, выполните командуaz provider register --namespace Microsoft.ServiceLinker
, чтобы зарегистрировать поставщика ресурсов соединителя служб, а затем снова выполните команду подключения.
Создание и развертывание приложения
Ниже описано, как скачать, настроить, создать и развернуть пример приложения.
Используйте следующую команду, чтобы клонировать пример репозитория кода:
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
Добавьте в файл pom.xml следующую зависимость:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Эта зависимость добавляет поддержку стартера Spring Cloud Azure.
Заметка
Дополнительные сведения об управлении версиями библиотеки Spring Cloud Azure с помощью списка BOM (Bill of Materials) см. в разделе "Начало работы" раздела руководства разработчика Spring Cloud Azure.
Используйте следующую команду для обновления файла application.properties:
cat << EOF > passwordless-sample/src/main/resources/application.properties logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always EOF
Используйте следующие команды для создания проекта с помощью Maven:
cd passwordless-sample ./mvnw clean package -DskipTests
Используйте следующую команду, чтобы развернуть файл целевого объекта /demo-0.0.1-SNAPSHOT.jar для приложения:
az spring app deploy \ --name $AZ_SPRING_APPS_APP_NAME \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --artifact-path target/demo-0.0.1-SNAPSHOT.jar
Запросите состояние приложения после развертывания с помощью следующей команды:
az spring app list \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --output table
Вы должны увидеть выходные данные, аналогичные следующему примеру.
Name Location ResourceGroup Production Deployment Public Url Provisioning Status CPU Memory Running Instance Registered Instance Persistent Storage ----------------- ---------- --------------- ----------------------- --------------------------------------------------- --------------------- ----- -------- ------------------ --------------------- -------------------- <app name> eastus <resource group> default Succeeded 1 2 1/1 0/1 -
Тестирование приложения
Для тестирования приложения можно использовать cURL. Сначала создайте новый элемент todo в базе данных с помощью следующей команды:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
Эта команда возвращает созданный элемент, как показано в следующем примере:
{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}
Затем получите данные с помощью следующего запроса cURL:
curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
Эта команда возвращает список элементов todo, включая созданный элемент, как показано в следующем примере:
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
Очистка ресурсов
Чтобы очистить все ресурсы, используемые в этом руководстве, удалите группу ресурсов с помощью следующей команды:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes