Tutoriel : Déployer une application Spring sur Azure Spring Apps avec une connexion sans mot de passe à une base de données Azure
Cet article explique comment utiliser des connexions sans mot de passe aux bases de données Azure dans les applications Spring Boot déployées sur Azure Spring Apps.
Dans ce tutoriel, vous allez effectuer les tâches suivantes à l’aide du portail Azure ou d’Azure CLI. Les deux méthodes sont expliquées dans les procédures suivantes.
- Provisionnez une instance d’Azure Spring Apps.
- Créer et déployer des applications sur Azure Spring Apps.
- Exécutez des applications connectées à des bases de données Azure à l’aide d’une identité managée.
Remarque
Ce didacticiel ne fonctionne pas pour R2DBC.
Prérequis
- Un abonnement Azure. Si vous n’en avez pas encore, créez un compte gratuit avant de commencer.
- Azure CLI 2.45.0 ou version ultérieure requise.
- L’extension Azure Spring Apps. Vous pouvez installer l’extension à l’aide de la commande :
az extension add --name spring
. - Kit de développement Java (JDK), version 8, 11 ou 17.
- Un client Git.
- cURL ou un utilitaire HTTP similaire pour tester la fonctionnalité.
- Client de ligne de commande MySQL si vous choisissez d’exécuter Azure Database pour MySQL. Vous pouvez vous connecter à votre serveur avec Azure Cloud Shell à l’aide d’un outil client populaire, l’outil en ligne de commande mysql.exe . Vous pouvez aussi utiliser la ligne de commande de
mysql
dans votre environnement local. - ODBC Driver 18 pour SQL Server si vous choisissez d’exécuter Azure SQL Database.
Préparer l’environnement de travail
Tout d’abord, configurez des variables d’environnement à l’aide des commandes suivantes :
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>
Remplacez les espaces réservés par les valeurs suivantes, qui sont utilisées dans cet article :
<YOUR_DATABASE_SERVER_NAME>
: nom de votre serveur Azure Database, qui doit être unique sur Azure.<YOUR_AZURE_REGION>
: région Azure que vous souhaitez utiliser. Vous pouvez utilisereastus
par défaut, mais nous vous recommandons de configurer une région plus proche de l’endroit où vous vivez. Vous pouvez voir la liste complète des régions disponibles à l’aideaz account list-locations
de .<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
: nom de votre instance Azure Spring Apps. Le nom doit comporter entre 4 et 32 caractères, et contenir uniquement des lettres minuscules, des chiffres et des traits d’union. Le premier caractère du nom du service doit être une lettre, et le dernier doit être une lettre ou un chiffre.<AZ_DB_ADMIN_USERNAME>
: nom d’utilisateur administrateur de votre serveur de base de données Azure.<AZ_DB_ADMIN_PASSWORD>
: mot de passe administrateur de votre serveur de base de données Azure.<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
: Le nom du serveur d’identité managée affectée par l’utilisateur, qui doit être unique dans tout Azure.
Provisionner une instance d’Azure Spring Apps
Procédez comme suit pour provisionner une instance d’Azure Spring Apps.
Mettez à jour Azure CLI avec l’extension Azure Spring Apps à l’aide de la commande suivante :
az extension update --name spring
Connectez-vous à Azure CLI et choisissez votre abonnement actif à l’aide des commandes suivantes :
az login az account list --output table az account set --subscription <name-or-ID-of-subscription>
Utilisez les commandes suivantes pour créer un groupe de ressources pour contenir votre service Azure Spring Apps et une instance du service 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
Créer une instance de base de données Azure
Procédez comme suit pour provisionner une instance Azure Database.
Créez un serveur Azure Database pour MySQL à l’aide de la commande suivante :
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
Remarque
Si vous ne fournissez pas ou ne fournissez admin-user
pas de admin-password
paramètres, le système génère un utilisateur administrateur par défaut ou un mot de passe administrateur aléatoire par défaut.
Créez une base de données à l’aide de la commande suivante :
az mysql flexible-server db create \ --resource-group $AZ_RESOURCE_GROUP \ --database-name $AZ_DATABASE_NAME \ --server-name $AZ_DATABASE_SERVER_NAME
Créer une application avec un point de terminaison public affecté
Utilisez la commande suivante pour créer l’application.
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
Connecter Azure Spring Apps à la base de données Azure
Tout d’abord, installez l’extension sans mot de passe du service Connecter or pour Azure CLI :
az extension add --name serviceconnector-passwordless --upgrade
Utilisez ensuite la commande suivante pour créer une identité managée affectée par l’utilisateur pour l’authentification Microsoft Entra. Pour plus d’informations, consultez Configurer l’authentification Microsoft Entra pour Azure Database pour MySQL - Serveur flexible.
export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
--name $AZ_USER_IDENTITY_NAME \
--resource-group $AZ_RESOURCE_GROUP \
--query id \
--output tsv)
Important
Après avoir créé l’identité affectée par l’utilisateur, demandez à votre Administrateur général ou Administrateur de rôle privilégié d’accorder les autorisations suivantes pour cette identité : User.Read.All
, GroupMember.Read.All
et Application.Read.ALL
. Pour plus d’informations, consultez la section Autorisations d’Authentification Active Directory.
Ensuite, utilisez la commande suivante pour créer une connexion sans mot de passe à la base de données.
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
Cette commande de connecteur de services effectue les tâches suivantes en arrière-plan :
Activez l’identité managée affectée par le système pour l’application
$AZ_SPRING_APPS_APP_NAME
hébergée par Azure Spring Apps.Définissez l’administrateur Microsoft Entra sur l’utilisateur connecté actuel.
Ajoutez un utilisateur de base de données nommé
$AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME
pour l’identité managée créée à l’étape 1 et accordez tous les privilèges de la base de données$AZ_DATABASE_NAME
à cet utilisateur.Ajoutez deux configurations à l’application
$AZ_SPRING_APPS_APP_NAME
:spring.datasource.url
etspring.datasource.username
.Remarque
Si le message d'erreur
The subscription is not registered to use Microsoft.ServiceLinker
apparaît, exécutez la commandeaz provider register --namespace Microsoft.ServiceLinker
pour enregistrer le fournisseur de ressources du connecteur de services, puis exécutez à nouveau la commande de connexion.
Génération et déploiement de l’application
Les étapes suivantes décrivent comment télécharger, configurer, générer et déployer l’exemple d’application.
Utilisez la commande suivante pour cloner l’exemple de référentiel de code :
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
Ajoutez la dépendance suivante à votre fichier pom.xml :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Cette dépendance ajoute la prise en charge du démarrage d’Azure Spring Cloud.
Remarque
Pour plus d’informations sur la gestion des versions de bibliothèque Spring Cloud Azure à l’aide d’une facture de documents (BOM), consultez la section Prise en main du guide du développeur Azure Spring Cloud.
Utilisez la commande suivante pour mettre à jour le fichier 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
Utilisez les commandes suivantes pour générer le projet à l’aide de Maven :
cd passwordless-sample ./mvnw clean package -DskipTests
Utilisez la commande suivante pour déployer le fichier target/demo-0.0.1-SNAPSHOT.jar pour l’application :
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
Interrogez l’état de l’application après le déploiement à l’aide de la commande suivante :
az spring app list \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --output table
Vous devez voir la sortie similaire à l’exemple suivant.
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 -
Test de l’application
Pour tester l’application, vous pouvez utiliser cURL. Tout d’abord, créez un élément « todo » dans la base de données à l’aide de la commande suivante :
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
Cette commande retourne l’élément créé, comme illustré dans l’exemple suivant :
{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}
Ensuite, récupérez les données à l’aide de la requête cURL suivante :
curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
Cette commande retourne la liste des éléments « todo », y compris l’élément que vous avez créé, comme illustré dans l’exemple suivant :
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
Nettoyer les ressources
Pour propre toutes les ressources utilisées pendant ce didacticiel, supprimez le groupe de ressources à l’aide de la commande suivante :
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes