Поделиться через


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

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

    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

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

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

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

  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

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