Tutorial: Implementación de una aplicación spring en Azure Spring Apps con una conexión sin contraseña a una base de datos de Azure
En este artículo se muestra cómo usar conexiones sin contraseña a bases de datos de Azure en aplicaciones de Spring Boot implementadas en Azure Spring Apps.
En este tutorial, completará las siguientes tareas mediante Azure Portal o la CLI de Azure. Ambos métodos se explican en los procedimientos siguientes.
- Aprovisione una instancia de Azure Spring Apps.
- Compile e implemente aplicaciones en Azure Spring Apps.
- Ejecute aplicaciones conectadas a bases de datos de Azure mediante la identidad administrada.
Nota
Este tutorial no funciona para R2DBC.
Prerrequisitos
- Una suscripción de Azure. Si aún no tiene una, cree una cuenta gratuita antes de comenzar.
- CLI de Azure 2.45.0 o superior necesaria.
- La extensión Azure Spring Apps. Puede instalar la extensión mediante el comando :
az extension add --name spring
. - kit de desarrollo de Java (JDK), versión 8, 11 o 17.
- Un cliente Git.
- cURL o una utilidad HTTP similar para probar la funcionalidad.
- Cliente de la línea de comandos de MySQL si decide ejecutar Azure Database for MySQL. Puede conectarse al servidor con Azure Cloud Shell mediante una herramienta de cliente popular, la herramienta de línea de comandos mysql.exe. Como alternativa, puede usar la línea de comandos
mysql
en el entorno local. - Controlador ODBC 18 para SQL Server si elige utilizar Azure SQL Database.
Preparación del entorno de trabajo
En primer lugar, configure algunas variables de entorno mediante los siguientes comandos:
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>
Reemplace los marcadores de posición por los siguientes valores, que se usan en este artículo:
<YOUR_DATABASE_SERVER_NAME>
: el nombre del servidor de Azure Database, que debe ser único en Azure.<YOUR_AZURE_REGION>
: la región de Azure que quiere usar. Puede usareastus
de forma predeterminada, pero se recomienda configurar una región más cercana a la ubicación en la que vive. Puede ver la lista completa de regiones disponibles medianteaz account list-locations
.<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
: el nombre de la instancia de Azure Spring Apps. El nombre debe tener entre 4 y 32 caracteres, y solo puede contener números, letras minúsculas y guiones. El primer carácter del nombre del servicio debe ser una letra y el último carácter debe ser una letra o un número.<AZ_DB_ADMIN_USERNAME>
: el nombre de usuario de administrador del servidor de bases de datos de Azure.<AZ_DB_ADMIN_PASSWORD>
: la contraseña de administrador del servidor de bases de datos de Azure.<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
: el nombre del servidor de identidad administrada asignado por el usuario, que debe ser único en Azure.
Aprovisionamiento de una instancia de Azure Spring Apps
Siga estos pasos para aprovisionar una instancia de Azure Spring Apps.
Actualice la CLI de Azure con la extensión azure Spring Apps mediante el comando siguiente:
az extension update --name spring
Inicie sesión en la CLI de Azure y elija la suscripción activa mediante los siguientes comandos:
az login az account list --output table az account set --subscription <name-or-ID-of-subscription>
Use los siguientes comandos para crear un grupo de recursos que contenga el servicio Azure Spring Apps y una instancia del servicio 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
Creación de una instancia de base de datos de Azure
Siga estos pasos para aprovisionar una instancia de Azure Database.
Cree un servidor de Azure Database for MySQL mediante el comando siguiente:
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
Nota
Si no proporciona parámetros admin-user
o admin-password
, el sistema generará un usuario administrador predeterminado o una contraseña de administrador aleatoria de forma predeterminada.
Cree una base de datos mediante el comando siguiente:
az mysql flexible-server db create \ --resource-group $AZ_RESOURCE_GROUP \ --database-name $AZ_DATABASE_NAME \ --server-name $AZ_DATABASE_SERVER_NAME
Creación de una aplicación con un punto de conexión público asignado
Use el siguiente comando para crear la aplicación.
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
Conexión de Azure Spring Apps a la base de datos de Azure
En primer lugar, instale la extensión de Service Connector sin contraseña para la CLI de Azure:
az extension add --name serviceconnector-passwordless --upgrade
A continuación, use el comando siguiente para crear una identidad administrada asignada por el usuario para la autenticación de Microsoft Entra. Para obtener más información, consulte Configuración de la autenticación de Microsoft Entra para Azure Database para MySQL - Servidor Flexible.
export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
--name $AZ_USER_IDENTITY_NAME \
--resource-group $AZ_RESOURCE_GROUP \
--query id \
--output tsv)
Importante
Después de crear la identidad asignada por el usuario, pida al administrador global o administrador de roles con privilegios que conceda los siguientes permisos para esta identidad: User.Read.All
, GroupMember.Read.All
y Application.Read.ALL
. Para obtener más información, consulte la sección Permisos de autenticación de Active Directory.
A continuación, use el comando siguiente para crear una conexión sin contraseña a la base de datos.
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
Este comando de Service Connector realiza las siguientes tareas en segundo plano:
Habilite la identidad administrada asignada por el sistema para la aplicación
$AZ_SPRING_APPS_APP_NAME
hospedada por Azure Spring Apps.Establezca al actual usuario que ha iniciado sesión como administrador de Microsoft Entra.
Agregue un usuario de base de datos denominado
$AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME
para la identidad administrada creada en el paso 1 y conceda todos los privilegios de la base de datos$AZ_DATABASE_NAME
a este usuario.Agregue dos configuraciones a la aplicación
$AZ_SPRING_APPS_APP_NAME
:spring.datasource.url
yspring.datasource.username
.Nota
Si ve el mensaje de error
The subscription is not registered to use Microsoft.ServiceLinker
, ejecute el comandoaz provider register --namespace Microsoft.ServiceLinker
para registrar el proveedor de recursos de Service Connector y vuelva a ejecutar el comando de conexión.
Compilación e implementación de la aplicación
En los pasos siguientes se describe cómo descargar, configurar, compilar e implementar la aplicación de ejemplo.
Use el siguiente comando para clonar el repositorio de código de ejemplo:
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
Agregue la siguiente dependencia al archivo pom.xml:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Esta dependencia agrega compatibilidad con el iniciador de Azure de Spring Cloud.
Nota
Para obtener más información sobre cómo administrar las versiones de la biblioteca de Spring Cloud Azure mediante una lista de materiales (BOM), consulte la sección Introducción de la guía para desarrolladores de Spring Cloud Azure.
Use el siguiente comando para actualizar el archivo 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
Use los siguientes comandos para compilar el proyecto mediante Maven:
cd passwordless-sample ./mvnw clean package -DskipTests
Use el siguiente comando para implementar el archivo target/demo-0.0.1-SNAPSHOT.jar para la aplicación:
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
Consulte el estado de la aplicación después de la implementación mediante el comando siguiente:
az spring app list \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --output table
Debería ver una salida similar al ejemplo siguiente.
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 -
Prueba de la aplicación
Para probar la aplicación, puede usar cURL. En primer lugar, cree un nuevo elemento "todo" en la base de datos con el siguiente comando:
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
Este comando devuelve el elemento creado, como se muestra en el ejemplo siguiente:
{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}
A continuación, recupere los datos mediante la siguiente solicitud cURL:
curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
Este comando devuelve la lista de tareas, incluido el elemento que ha creado, tal como se muestra en el ejemplo a continuación:
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
Limpieza de recursos
Para limpiar todos los recursos usados durante este tutorial, elimine el grupo de recursos mediante el comando siguiente:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes