Tutoriel : Générer une application web Spring Boot Java avec Azure App Service sur Linux et Azure Cosmos DB
Remarque
Pour les applications Spring, nous vous recommandons d’utiliser Azure Spring Apps. Toutefois, vous pouvez toujours utiliser Azure App Service comme destination. Pour obtenir des conseils, consultez l’Aide de destination de la charge de travail Java.
Ce didacticiel vous guide au travers du processus de création, de configuration, de déploiement et de mise à l’échelle des applications web Java sur Azure. Lorsque vous avez terminé, une application Spring Boot stocke des données dans Azure Cosmos DB s’exécutant sous Azure App Service sur Linux.
Dans ce tutoriel, vous allez apprendre à :
- Crée une base de données Azure Cosmos DB.
- Connecter un exemple d’application à la base de données et la tester localement
- Déployer un exemple d’application dans Azure
- Diffuser des journaux de diagnostic à partir d’App Service
- Ajouter des instances supplémentaires pour effectuer un scale-out de l’exemple d’application
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Prérequis
Cloner l’exemple d’application de liste de tâches et préparer le référentiel
Ce didacticiel utilise un exemple d’application de liste de tâches avec une interface utilisateur web qui appelle une API REST Spring reposant sur Spring Data pour Azure Cosmos DB. Le code pour l’application est disponible sur GitHub. Pour en savoir plus sur l’écriture d’applications Java à l’aide de Spring et Azure Cosmos DB, consultez les articles Didacticiel Spring Boot Starter avec Azure Cosmos DB for NoSQL et Démarrage rapide de Spring Data pour Azure Cosmos DB.
Exécutez les commandes suivantes dans votre terminal pour cloner l’exemple de dépôt et configurer l’exemple d’environnement d’application.
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
cd e2e-java-experience-in-app-service-linux-part-2
yes | cp -rf .prep/* .
Créer une base de données Azure Cosmos DB
Suivez ces étapes pour créer une base de données Azure Cosmos DB dans votre abonnement. L’application de liste de tâches se connecte à cette base de données et stocke ses données lors de l’exécution, entraînant la persistance de l’application, quel que soit l’endroit d’où vous l’exécutez.
Connectez-vous à votre interface Azure CLI et définissez votre abonnement si vous en avez plusieurs connectés à vos informations d’identification.
az login az account set -s <your-subscription-id>
Créez un groupe de ressources Azure, en notant son nom.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
Créez une base de données Azure Cosmos du type
GlobalDocumentDB
. Le nom de l’instance Azure Cosmos DB doit être uniquement composé de lettres minuscules. Notez le champdocumentEndpoint
de la réponse à la commande.az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
Obtenez votre clé d’Azure Cosmos DB pour vous connecter à l’application. Conservez
primaryMasterKey
etdocumentEndpoint
à proximité, car vous en aurez besoin à l’étape suivante.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
Configurer les propriétés de l’application de liste de tâches
Ouvrez un terminal sur votre ordinateur. Copiez l’exemple de fichier de script dans le référentiel cloné afin que vous puissiez le personnaliser pour la base de données Azure Cosmos DB que vous venez de créer.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
Modifiez .scripts/set-env-variables.sh
dans votre éditeur favori et fournissez les informations de connexion Azure Cosmos DB. Pour la configuration d’App Service Linux, utilisez la même région qu’avant (your-resource-group-region
) ainsi que le groupe de ressources (your-azure-group-name
) utilisé lors de la création de la base de données Azure Cosmos DB. Choisissez un WEBAPP_NAME unique, dans la mesure où il ne peut pas être identique à un nom d’application web au sein d’un déploiement Azure.
export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
# App Service Linux Configuration
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>
Ensuite, exécutez le script :
source .scripts/set-env-variables.sh
Ces variables d’environnement sont utilisées dans application.properties
au sein de l’application de liste de tâches. Les champs du fichier de propriétés définissent une configuration de référentiel par défaut pour Spring Data :
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
L’exemple d’application utilise ensuite l’annotation @Document
importée depuis com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
pour configurer un type d’entité à stocker et gérer par Azure Cosmos DB :
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
Exécution de l'exemple d'application
Utilisez Maven pour exécuter l’exemple.
mvn package spring-boot:run
La sortie doit se présenter comme suit.
bash-3.2$ mvn package spring-boot:run
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2018-10-28 15:04:32.101 INFO 7673 --- [ main] c.m.azure.documentdb.DocumentClient : Initializing DocumentClient with serviceEndpoint [https://sample-cosmos-db-westus.documents.azure.com:443/], ConnectionPolicy [ConnectionPolicy [requestTimeout=60, mediaRequestTimeout=300, connectionMode=Gateway, mediaReadMode=Buffered, maxPoolSize=800, idleConnectionTimeout=60, userAgentSuffix=;spring-data/2.0.6;098063be661ab767976bd5a2ec350e978faba99348207e8627375e8033277cb2, retryOptions=com.microsoft.azure.documentdb.RetryOptions@6b9fb84d, enableEndpointDiscovery=true, preferredLocations=null]], ConsistencyLevel [null]
[INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[INFO] TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
[INFO] TodoApplication - Started TodoApplication in 45.573 seconds (JVM running for 76.534)
Vous pouvez accéder à l’application Spring TODO localement en utilisant ce lien une fois l’application lancée : http://localhost:8080/
.
Si vous voyez des exceptions à la place du message « Started TodoApplication », vérifiez que le script bash
de l’étape précédente a correctement exporté les variables d’environnement et que les valeurs sont correctes pour la base de données Azure Cosmos DB créée.
Configurer un déploiement Azure
Ouvrez le fichier pom.xml
dans le répertoireinitial/spring-boot-todo
et ajoutez la configuration suivante du plugin Azure Web App pour Maven.
<plugins>
<!--*************************************************-->
<!-- Deploy to Java SE in App Service Linux -->
<!--*************************************************-->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<!-- Web App information -->
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<!-- Java Runtime Stack for Web App on Linux-->
<runtime>
<os>linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>Java SE</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
<appSettings>
<property>
<name>COSMOSDB_URI</name>
<value>${COSMOSDB_URI}</value>
</property>
<property>
<name>COSMOSDB_KEY</name>
<value>${COSMOSDB_KEY}</value>
</property>
<property>
<name>COSMOSDB_DBNAME</name>
<value>${COSMOSDB_DBNAME}</value>
</property>
<property>
<name>JAVA_OPTS</name>
<value>-Dserver.port=80</value>
</property>
</appSettings>
</configuration>
</plugin>
...
</plugins>
Déployer vers App Service sous Linux
Utilisez l’objectif Maven mvn azure-webapp:deploy
pour déployer l’application de liste de tâches dans Azure App Service sous Linux.
# Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- azure-webapp-maven-plugin:2.5.0:deploy (default-cli) @ spring-todo-app ---
Auth Type: AZURE_CLI
Default subscription: xxxxxxxxx
Username: xxxxxxxxx
[INFO] Subscription: xxxxxxxxx
[INFO] Creating App Service Plan 'ServicePlanb6ba8178-5bbb-49e7'...
[INFO] Successfully created App Service Plan.
[INFO] Creating web App spring-todo-app...
[INFO] Successfully created Web App spring-todo-app.
[INFO] Trying to deploy artifact to spring-todo-app...
[INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:19 min
[INFO] Finished at: 2019-11-06T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------
La sortie contient l’URL vers votre application déployée (dans cet exemple, https://spring-todo-app.azurewebsites.net
). Vous pouvez copier cette URL dans votre navigateur web ou exécuter la commande suivante dans la fenêtre de votre terminal pour charger votre application.
explorer https://spring-todo-app.azurewebsites.net
Vous devez voir l’application exécutée avec l’URL distante dans la barre d’adresses :
Diffuser les journaux de diagnostic
Pour accéder aux journaux de la console générés à l’intérieur du code de votre application dans App Service, activez la journalisation des diagnostics en exécutant la commande suivante dans Cloud Shell :
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Les valeurs possibles pour --level
sont : Error
, Warning
, Info
et Verbose
. Chaque niveau suivant comprend le niveau précédent. Par exemple : Error
comprend uniquement les messages d’erreur et Verbose
comprend tous les messages.
Une fois la journalisation des diagnostics activée, exécutez la commande suivante pour voir le flux de journal :
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Si vous ne voyez pas les journaux d’activité de la console, attendez 30 secondes et vérifiez à nouveau.
Notes
Vous pouvez également inspecter les fichiers journaux à partir du navigateur sur https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Pour arrêter le streaming des journaux à tout moment, appuyez sur Ctrl
+C
.
Scale-out de l’application de liste de tâches
Effectuez un scale-out de l’application en ajoutant un autre worker :
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
Nettoyer les ressources
Si vous n’avez pas besoin de ces ressources pour un autre didacticiel (voir Étapes suivantes), vous pouvez les supprimer en exécutant la commande suivante dans Cloud Shell :
az group delete --name <your-azure-group-name> --yes
Étapes suivantes
Azure pour les développeurs JavaSpring Boot, Spring Data pour Azure Cosmos DB, Azure Cosmos DB et App Service Linux.
Découvrez-en plus sur l’exécution des applications Java sur App Service sur Linux dans le guide du développeur.
Découvrez comment sécuriser votre application avec un domaine personnalisé et un certificat.