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

В этой статье рассказывается, как использовать подключения без пароля к базам данных Azure в приложениях Spring Boot, развернутых в Приложения Azure Spring.

В этом руководстве вы выполните следующие действия с помощью портала Azure или Azure CLI. Оба метода описаны в следующих процедурах.

  • Создайте экземпляр Приложения Azure Spring.
  • Создание и развертывание приложений в Приложения Azure Spring.
  • Запустите приложения, подключенные к базам данных Azure, используя управляемую идентичность.

Заметка

Это руководство не работает для R2DBC.

Необходимые условия

  • Подписка Azure. Если у вас еще нет учетной записи, создайте бесплатную учетную запись.
  • Azure CLI версии 2.45.0 или более поздней.
  • Расширение Приложения Azure Spring. Установите расширение с помощью команды: 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. Имя должно быть от 4 до 32 символов длиной и может содержать только строчные буквы, цифры и дефисы. Первый символ имени службы должен быть буквой, а последний символ должен быть буквой или числом.
  • <AZ_DB_ADMIN_USERNAME>: имя администратора сервера базы данных Azure.
  • <AZ_DB_ADMIN_PASSWORD>: пароль администратора сервера базы данных Azure.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: имя назначаемого пользователем управляемого сервера удостоверений, которое должно быть уникальным в Azure.

Подготовьте экземпляр Приложения Azure Spring

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

  1. Обновите Azure CLI с помощью расширения Приложения Azure Spring с помощью следующей команды:

    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 и экземпляра службы Приложения Azure Spring:

    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 к базе данных Azure

Сначала установите для Azure CLI расширение Service Connector для беспарольной аутентификации:

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.

  • Назначает текущего вошедшего в систему пользователя администратором 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 , чтобы зарегистрировать поставщика ресурсов соединителя служб, а затем снова выполните команду подключения.

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

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

  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.

    Заметка

    Дополнительные сведения об управлении версиями библиотеки Spring Cloud Azure с помощью списка BOM (Bill of Materials) см. в разделе "Начало работы" раздела руководства разработчика Spring Cloud Azure.

  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. Используйте следующую команду, чтобы развернуть файл целевого объекта /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

Дальнейшие действия