Partager via


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 concernant Open Liberty, consultez la page de projet Open Liberty. Pour plus d’informations concernant 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, renseignez cette courte enquête sur la migration WebSphere et n'oubliez pas d'inclure vos coordonnées. L’équipe de gestionnaires de programmes, d’architectes et d’ingénieurs vous contactera rapidement pour lancer une collaboration étroite.

Prérequis

Connexion à Azure

Connectez-vous à votre abonnement Azure à l’aide de 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 spécifier le locataire à l’aide de l’option --tenant , par exemple, az login --tenant contoso.onmicrosoft.com.

Si vous avez plusieurs abonnements au sein d’un seul locataire, vérifiez que vous êtes connecté avec celui que vous envisagez d’utiliser à l’aide de 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 à l’emplacement eastus2. 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 eastus2

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.

Remarque

Cet article utilise le mécanisme d’authentification sans mot de passe recommandé pour Container Registry. Il est toujours possible d’utiliser un nom d’utilisateur et un mot de passe avec docker login après avoir utilisé az acr credential show pour obtenir le nom d’utilisateur et le mot de passe. L’utilisation d’un nom d’utilisateur et d’un mot de passe est moins sécurisée que l’authentification sans mot de passe.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Après un court instant, vous devriez voir une sortie JSON contenant les lignes suivantes :

"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",

Ensuite, utilisez la commande suivante pour récupérer le serveur de connexion pour l’instance Container Registry. Vous aurez besoin de cette valeur lors du déploiement de l’image de l’application dans Azure Container Apps plus tard.

export ACR_LOGIN_SERVER=$(az acr show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)

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 \
    --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 unique dans Azure SQL Database

Dans cette section, vous allez créer une base de données unique dans Azure SQL Database, à utiliser avec votre application.

Tout d’abord, utilisez les commandes suivantes pour définir les variables d’environnement liées à la base de données. Remplacez <your-unique-sql-server-name> par un nom unique pour votre serveur Azure SQL Database.

export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb

Ensuite, utilisez les commandes suivantes pour créer une base de données unique dans Azure SQL Database et définir l’utilisateur actuellement connecté comme administrateur Microsoft Entra. Pour plus d’informations, consultez la section Prise en main : Créer une base de données unique - Azure SQL Database.

export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)

az sql server create \
    --name $SQL_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --enable-ad-only-auth \
    --external-admin-principal-type User \
    --external-admin-name $ENTRA_ADMIN_NAME \
    --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name $DB_NAME \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Ensuite, utilisez les commandes suivantes pour ajouter l’adresse IP locale aux règles de pare-feu du serveur Azure SQL Database pour permettre à votre ordinateur local de se connecter à la base de données pour les tests locaux ultérieurement.

export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

Remarque

Vous créez un serveur Azure SQL avec l’authentification SQL désactivée pour des raisons de sécurité. Seul Microsoft Entra ID est utilisé pour s’authentifier au serveur. Si vous devez activer l’authentification SQL, consultez az sql server create.

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.

Découvrez 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
export BASE_DIR=$PWD
git checkout 20241118

Si vous voyez un message sur l’état detached HEAD, vous pouvez l'ignorer en toute sécurité. Cela signifie simplement que vous avez modifié une étiquette.

Cet article utilise l'application Java . Voici la structure de fichiers des fichiers importants de l’application :

java-app
├─ src/main/
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
├─ pom-azure-identity.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. Elle définit une variable azure.sql.connectionstring utilisée pour se connecter à Azure SQL Database.

Le fichier pom.xml est le fichier modèle d’objet projet Maven (POM) contenant les informations de configuration du projet. Le fichier pom-azure-identity.xml déclare la dépendance azure-identity, utilisée pour s’authentifier auprès des services Azure à l’aide de l’ID Microsoft Entra.

Remarque

Cet exemple utilise la bibliothèque azure-identity pour s’authentifier à Azure SQL Database à l’aide de l’authentification Microsoft Entra, qui est recommandée pour des raisons de sécurité. Si vous devez utiliser l’authentification SQL dans votre application Liberty, consultez la section Connexions aux bases de données relationnelles avec JDBC.

Compiler le projet

Utilisez les commandes suivantes pour générer l’application :

cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Si la construction est réussie, vous devriez voir un résultat similaire à ce qui suit à la fin de votre construction.

[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.

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’a pas entré en mode pause. Une façon d’effectuer la vérification consiste à se connecter à l’éditeur de requête de base de données comme décrit dans Démarrage rapide : Utiliser l’éditeur de requête du portail Azure (préversion) pour interroger Azure SQL Database.

  1. Démarrez l’application à l’aide de liberty:run.

    cd $BASE_DIR/java-app
    
    # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by the configuration variable azure.sql.connectionstring in server.xml.
    export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault"
    mvn liberty:run
    
  2. Vérifiez que l’application fonctionne comme prévu. En cas de succès, vous devriez voir un message similaire à [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds. dans la sortie de la commande. Rendez-vous à l’adresse http://localhost:9080/ dans votre navigateur et vérifiez que l’application est accessible et que toutes les fonctions fonctionnent.

  3. Appuyez sur Ctrl+C pour arrêter. Sélectionnez Y si on vous demande d'arrêter la tâche par lots.

Une fois terminé, supprimez la règle de pare-feu qui autorise votre adresse IP locale à accéder à Azure SQL Database en utilisant la commande suivante :

az sql server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP

Générez l’image pour le déploiement Azure Container Apps.

Vous pouvez maintenant exécuter la commande az acr build pour générer l’image, comme illustré dans l’exemple suivant :

cd $BASE_DIR/java-app

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

La commande az acr build télécharge les artefacts spécifiés dans le fichier Dockerfile vers l’instance Container Registry, génère l’image et la stocke dans l’instance Container Registry.

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-identity system \
    --target-port 9080 \
    --ingress 'external' \
    --min-replicas 1

Une sortie réussie est un objet JSON incluant la propriété "type": "Microsoft.App/containerApps".

Connectez ensuite le serveur Azure SQL Database à l’application conteneurisée à l’aide de Service Connector en respectant les étapes suivantes :

  1. Cet exemple utilise Service Connector pour faciliter la connexion à la base de données. Pour plus d’informations sur Service Connector, consultez Qu’est-ce que Service Connector ?. Installez l’extension sans mot de passe pour Azure CLI à l’aide de la commande suivante :

    az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
    
  2. Connectez la base de données à l’application conteneurisée avec une identité managée attribuée par le système à l’aide de la commande suivante :

    az containerapp connection create sql \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $ACA_NAME \
        --target-resource-group $RESOURCE_GROUP_NAME \
        --server $SQL_SERVER_NAME \
        --database $DB_NAME \
        --system-identity \
        --container $ACA_NAME \
        --client-type java
    

    Une sortie réussie est un objet JSON incluant la propriété "type": "microsoft.servicelinker/linkers".

Remarque

Le Service Connector crée un secret dans l’application conteneurisée contenant la valeur pour AZURE_SQL_CONNECTIONSTRING, qui est une chaîne de connexion sans mot de passe à Azure SQL Database. Pour plus d'informations, consultez l'exemple de valeur de la section Identité gérée attribuée à l'utilisateur de la rubrique Intégrer Azure SQL Database avec Service Connector.

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)

Pour accéder à l’application et le tester, ouvrez un navigateur web vers l’URL. La capture d’écran suivante montre l’application en cours d’exécution :

Capture d’écran montrant l’application liberty Java déployée avec succès sur Azure Container Apps.

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 conteneur, le serveur de base de données et toutes les ressources associées.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Étapes suivantes

Vous pouvez en apprendre davantage à partir des références utilisées dans ce guide :

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 ?