Руководство. Развертывание приложения Spring в Azure Spring Apps с подключением без пароля к базе данных Azure
В этой статье показано, как использовать бессерверные подключения к базам данных Azure в приложениях Spring Boot, развернутых в Azure Spring Apps.
В этом руководстве вы узнаете, как выполнять перечисленные ниже задачи с помощью портала Azure или Azure CLI. Оба метода описаны в следующих процедурах.
- Подготовка экземпляра Azure Spring Apps.
- Создание и развертывание приложений в Azure Spring Apps.
- Запуск приложений, подключенных к базам данных Azure с помощью управляемого удостоверения.
Примечание.
Это руководство не работает для R2DBC.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки 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 Spring Apps в Azure CLI, выполнив следующую команду:
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
Сначала установите расширение service Подключение or без пароля для 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)
Важно!
После создания удостоверения, назначаемого пользователем, попросите глобального Администратор istrator или привилегированного Администратор istrator предоставить следующие разрешения для этого удостоверения: 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
, чтобы зарегистрировать поставщика ресурсов службы Подключение or, а затем снова выполните команду подключения.
Создание и развертывание приложения
Ниже описано, как скачать, настроить, создать и развернуть пример приложения.
Используйте следующую команду, чтобы клонировать пример репозитория кода:
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.
Примечание.
Дополнительные сведения об управлении версиями библиотеки Azure Spring Cloud с помощью счета за материалы (BOM) см. в разделе "Начало работы" руководства разработчика Azure Spring Cloud.
Чтобы обновить файл 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
Используйте следующую команду, чтобы развернуть файл target/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