Déployer une application Java avec Open Liberty ou WebSphere Liberty sur Azure Container Apps
Cet article montre comment exécuter Open Liberty ou WebSphere Liberty sur Azure Container Apps. Vous effectuez les activités suivantes dans cet article :
- Exécutez votre application Java, Java EE, Jakarta EE ou MicroProfile sur le runtime Open Liberty ou WebSphere Liberty.
- Construire l’image Docker de l’application en utilisant les images de conteneur Liberty.
- Déployer l’application conteneurisée sur Azure Container Apps.
Pour plus d’informations sur Open Liberty, consultez la page de projet Open Liberty. Pour plus d’informations sur IBM WebSphere Liberty, consultez la page du produit WebSphere Liberty.
Cet article vous aide à accéder rapidement au déploiement. Avant de passer en production, vous devez explorer Tuning Liberty.
Si vous souhaitez fournir des commentaires ou travailler étroitement sur vos scénarios de migration avec l’équipe d’ingénierie qui développe WebSphere sur des solutions Azure, répondez à cette courte enquête sur la migration WebSphere et incluez vos coordonnées. L’équipe de gestionnaires de programmes, d’architectes et d’ingénieurs vous contactera rapidement pour établir une collaboration.
Prérequis
- Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
- Préparez une machine locale avec un système d’exploitation Windows ou de type Unix installé - par exemple, Ubuntu, macOS, ou Windows Subsystem for Linux.
- Installez l’interface de ligne de commande Azure (Azure CLI) version 2.53.0 ou une version supérieure pour exécuter les commandes Azure CLI.
- Connectez-vous avec l’interface de ligne de commande Azure en utilisant la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Veuillez consulter la section Connexion à Azure avec l’interface de ligne de commande Azure pour d’autres options de connexion.
- Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser et gérer des extensions avec Azure CLI.
- Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
- Installez une implémentation de Java SE version 17 ou ultérieure, par exemple la build Microsoft d’OpenJDK.
- Installez Maven 3.5.0 ou une version ultérieure.
- Installez Docker pour votre système d’exploitation.
- Vérifiez que Git est installé.
Connexion à Azure
Si vous ne l'avez pas encore fait, connectez-vous à votre abonnement Azure en utilisant la commande az login et suivez les instructions à l'écran.
az login
Remarque
Vous pouvez exécuter la plupart des commandes Azure CLI dans PowerShell de la même manière que dans Bash. La différence n’existe que lors de l’utilisation de variables. Dans les sections suivantes, la différence est abordée dans différents onglets si nécessaire.
Si plusieurs locataires Azure sont associés à vos informations d’identification Azure, vous devez spécifier le locataire auquel vous souhaitez vous connecter. Vous pouvez le faire avec l’ option --tenant
, par exemple az login --tenant contoso.onmicrosoft.com
.
Si vous avez plusieurs abonnements au sein d’un même locataire, assurez-vous d’être connecté avec celui que vous souhaitez utiliser en utilisant az account set --subscription <subscription-id>
.
Créer un groupe de ressources
Un groupe de ressources Azure est un groupe logique dans lequel des ressources Azure sont déployées et gérées.
Créez un groupe de ressources appelé java-liberty-project à l’aide de la commande az group create dans l’emplacement eastus. Ce groupe de ressources sera utilisé plus tard pour créer l’instance Azure Container Registry (ACR) et l’instance Azure Container Apps.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Créer une instance ACR
Utilisez la commande az acr create pour créer l’instance ACR. L’exemple suivant crée une instance ACR nommée youruniqueacrname. Assurez-vous que youruniqueacrname est unique dans Azure.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Après un court instant, vous devriez voir une sortie JSON contenant les lignes suivantes :
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Se connecter à l’instance ACR
Vous devez vous connecter à l’instance ACR avant de pouvoir y pousser une image. Si vous choisissez d’exécuter des commandes localement, assurez-vous que le démon Docker est en cours d’exécution, et exécutez les commandes suivantes pour vérifier la connexion :
export ACR_LOGIN_SERVER=$(az acr show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
export ACR_USER_NAME=$(az acr credential show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'username' \
--output tsv)
export ACR_PASSWORD=$(az acr credential show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'passwords[0].value' \
--output tsv)
docker login $ACR_LOGIN_SERVER -u $ACR_USER_NAME -p $ACR_PASSWORD
Vous devriez voir Login Succeeded
à la fin de la sortie de la commande si vous vous êtes connecté avec succès à l’instance ACR.
Créer un environnement
Un environnement dans Azure Container Apps crée une limite sécurisée autour d’un groupe d’applications de conteneur. Les applications de conteneur déployées dans le même environnement sont déployées dans le même réseau virtuel et écrivent les journaux dans le même espace de travail Log Analytics. Utilisez la commande az containerapp env create pour créer un environnement. L’exemple suivant crée un environnement nommé youracaenvname :
export ACA_ENV=youracaenvname
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--location eastus \
--name $ACA_ENV
Si on vous demande d’installer une extension, répondez Y.
Après un court instant, vous devriez voir une sortie JSON contenant les lignes suivantes :
"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",
Créer une base de données Azure SQL
Dans cette section, vous créez une base de données unique Azure SQL Database à utiliser avec votre application.
Créez une base de données unique dans Azure SQL Database en suivant les étapes de l’Azure CLI dans Prise en main rapide : Créer une base de données unique - Azure SQL Database. Exécutez les étapes jusqu’à, mais sans inclure Interroger la base de données. Utilisez les étapes suivantes au fur et à mesure que vous suivez l’article, puis revenez à ce document après avoir créé et configuré le serveur de base de données :
Lorsque vous atteignez la section Définir les valeurs des paramètres de la prise en main rapide, sortez et enregistrez les valeurs des variables dans l’exemple de code étiqueté Variable block
, y compris resourceGroup
,server
, database
, login
, et password
. Définissez les variables d’environnement suivantes après avoir remplacé les espaces réservés <resourceGroup>
,<server>
, <database>
, <login>
, et <password>
par ces valeurs.
export DB_RESOURCE_GROUP=<resourceGroup>
export DB_SERVER_NAME=<server>.database.windows.net
export DB_NAME=<database>
export DB_USER=<login>
export DB_PASSWORD=<password>
Si vous souhaitez tester l’application localement plus tard, utilisez les étapes suivantes pour vous assurer que votre adresse IPv4 client est autorisée à se connecter :
Dans le portail, recherchez et sélectionnez Bases de données SQL, puis sélectionnez votre base de données dans la liste.
Sélectionnez Vue d’ensemble.
Vérifiez que l’onglet Bien démarrer est sélectionné au milieu de la page.
Sous Configurer l’accès, sélectionnez Configurer.
Sélectionnez Ajouter l’adresse IPv4 de votre client.
Cliquez sur Enregistrer.
Vous trouverez et pourrez configurer des règles de pare-feu dans le volet Mise en réseau (Networking) et l’onglet Accès public.
Configurer et générer l’image de l’application
Pour déployer et exécuter votre application Liberty sur Azure Container Apps, conteneurisez votre application en tant qu’image Docker à l’aide d’images conteneur Open Liberty ou d’images conteneur WebSphere Liberty.
Suivez les étapes de cette section pour déployer l’exemple d’application sur le runtime Liberty. Ces étapes utilisent Maven.
Extraire l’application
Utilisez les commandes suivantes pour préparer le code d’exemple pour ce guide. L’exemple se trouve sur GitHub.
git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
git checkout 20231026
Si vous voyez un message concernant l’état detached HEAD
, vous pouvez ignorer ce message en toute sécurité. Il signifie simplement que vous avez extrait une étiquette.
Cet article utilise java-app. Voici la structure des fichiers de l’application :
java-app
├─ src/main/
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
Les répertoires java, resources et webapp contiennent le code source de l’exemple d’application. Le code déclare et utilise une source de données nommée jdbc/JavaEECafeDB
.
Dans le répertoire racine java-app, il y a deux fichiers pour créer l’image de l’application avec soit Open Liberty, soit WebSphere Liberty.
Dans le répertoire liberty/config, le fichier server.xml est utilisé pour configurer la connexion de base de données pour le cluster Open Liberty et WebSphere Liberty.
Créer le projet
Exécutez la commande suivante pour générer l’application :
cd <path-to-your-repo>/java-app
mvn clean install
Si le build réussit, vous devriez voir une sortie similaire à la suivante à la fin de votre build.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------
Dans le cas contraire, dépannez et résolvez le problème avant de poursuivre.
(Facultatif) Tester votre projet localement
Vous pouvez maintenant utiliser les étapes suivantes pour exécuter et tester le projet localement avant de le déployer sur Azure. Pour plus de commodité, utilisez le liberty-maven-plugin
. Pour en savoir plus sur le liberty-maven-plugin
, consultez Building a web application with Maven. Pour votre application, vous pouvez faire pareil en utilisant un autre mécanisme, comme votre IDE local.
Remarque
Si vous avez sélectionné un déploiement de base de données « serverless », vérifiez que votre base de données SQL n’est pas en mode pause. Une façon de le faire est de se connecter à l’éditeur de requêtes de base de données, comme décrit dans la section Prise en main rapide : Utiliser l’éditeur de requêtes du portail Azure (aperçu) pour interroger Azure SQL Database.
Démarrez l’application à l’aide de
liberty:run
.liberty:run
utilise les variables d’environnement liées à la base de données définies à l’étape précédente.cd <path-to-your-repo>/java-app mvn liberty:run
Vérifiez que l’application fonctionne comme prévu. Vous devriez voir un message similaire à
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
dans la sortie de la commande en cas de réussite. Rendez-vous à l’adressehttp://localhost:9080/
dans votre navigateur et vérifiez que l’application est accessible et que toutes les fonctions fonctionnent.Appuyez sur Ctrl+C pour arrêter.
Créer l’image
Vous pouvez maintenant exécuter la commande docker buildx build
pour construire l’image, comme illustré dans l’exemple suivant :
cd <path-to-your-repo>/java-app
# If you are running with Open Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .
# If you are running with WebSphere Liberty
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .
(Facultatif) Tester l’image Docker localement
Vous pouvez maintenant utiliser les étapes suivantes pour tester l’image Docker localement avant de la déployer sur Azure :
Exécutez l’image avec la commande suivante. Cette commande utilise les variables d’environnement liées à la base de données définies précédemment.
docker run -it --rm -p 9080:9080 \ -e DB_SERVER_NAME=${DB_SERVER_NAME} \ -e DB_NAME=${DB_NAME} \ -e DB_USER=${DB_USER} \ -e DB_PASSWORD=${DB_PASSWORD} \ javaee-cafe:v1
Une fois que le conteneur a démarré, accédez à
http://localhost:9080/
dans votre navigateur pour accéder à l’application.Appuyez sur Ctrl+C pour arrêter.
Télécharger une image dans l’ACR
Ensuite, téléchargez l’image construite sur l’ACR que vous avez créé lors des étapes précédentes.
Si vous ne l’avez pas encore fait, utilisez la commande suivante pour vous connecter à l’ACR :
docker login -u ${ACR_USER_NAME} -p ${ACR_PASSWORD} ${ACR_LOGIN_SERVER}
Utilisez les commandes suivantes pour taguer et pousser l’image du conteneur :
docker tag javaee-cafe:v1 ${ACR_LOGIN_SERVER}/javaee-cafe:v1
docker push ${ACR_LOGIN_SERVER}/javaee-cafe:v1
Déployer l’application sur Azure Container Apps
Utilisez les commandes suivantes pour créer une instance Azure Container Apps afin d’exécuter l’application après avoir tiré l’image de l’ACR. Cet exemple crée une instance Azure Container Apps nommée youracainstancename.
export ACA_NAME=youracainstancename
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
--environment $ACA_ENV \
--registry-server $ACR_LOGIN_SERVER \
--registry-username $ACR_USER_NAME \
--registry-password $ACR_PASSWORD \
--target-port 9080 \
--env-vars \
DB_SERVER_NAME=${DB_SERVER_NAME} \
DB_NAME=${DB_NAME} \
DB_USER=${DB_USER} \
DB_PASSWORD=${DB_PASSWORD} \
--ingress 'external'
Une sortie réussie est un objet JSON incluant la propriété "type": "Microsoft.App/containerApps"
.
Test de l’application
Utilisez la commande suivante pour obtenir une URL entièrement qualifiée pour accéder à l’application :
echo https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn \
--output tsv)
Ouvrez un navigateur web à l’URL pour accéder à l’application et la tester. La capture d’écran suivante montre l’application en cours d’exécution :
Nettoyer les ressources
Pour éviter des frais Azure, vous devez nettoyer les ressources non nécessaires. Lorsque le cluster n’est plus nécessaire, utilisez la commande az group delete pour supprimer le groupe de ressources, le registre de conteneurs, les applications conteneurisées, le serveur de base de données et toutes les ressources associées.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP --yes --no-wait
Ensuite, utilisez la commande suivante pour supprimer l’image du conteneur de votre serveur Docker local :
docker rmi -f ${ACR_LOGIN_SERVER}/javaee-cafe:v1
Étapes suivantes
Vous pouvez en apprendre davantage à partir des références utilisées dans ce guide :
- Azure Container Apps
- Open Liberty
- Configuration du serveur Open Liberty
- Plug-in Liberty Maven
- Images conteneur Open Liberty
- Images conteneur WebSphere Liberty
Pour explorer les options d’exécution des produits WebSphere sur Azure, veuillez consulter la section Quelles sont les solutions pour exécuter la famille de produits WebSphere sur Azure ?