Руководство. Развертывание приложения 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, выполните следующие действия.

  1. Добавьте расширение Azure Spring Apps в Azure CLI, выполнив следующую команду:

    az extension update --name spring
    
  2. Войдите в Azure CLI и выберите активную подписку с помощью следующих команд:

    az login
    az account list --output table
    az account set --subscription <name-or-ID-of-subscription>
    
  3. Используйте следующие команды, чтобы создать группу ресурсов для хранения службы 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, выполните следующие действия.

  1. Создайте сервер База данных 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 параметры, система создаст пользователя администратора по умолчанию или случайный пароль администратора по умолчанию.

  1. Создайте базу данных с помощью следующей команды:

    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.AllApplication.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, а затем снова выполните команду подключения.

Создание и развертывание приложения

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

  1. Используйте следующую команду, чтобы клонировать пример репозитория кода:

    git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
    
  2. Добавьте в файл 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.

  3. Чтобы обновить файл 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
    
  4. Используйте следующие команды для создания проекта с помощью Maven:

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. Используйте следующую команду, чтобы развернуть файл 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
    
  6. Запросите состояние приложения после развертывания с помощью следующей команды:

    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

Следующие шаги