Déployer une application Java avec WebLogic Server sur un cluster Azure Kubernetes Service (AKS)

Cet article montre comment :

  • Exécutez votre application Java sur Oracle WebLogic Server (WLS).
  • Mettez en place un cluster WebLogic Server sur AKS en utilisant une offre de la Place de marché Azure.
  • Générez une image Docker d’application qui inclut des modèles WDT (WebLogic Deploy Tooling).
  • Déployez l’application conteneurisée sur le cluster WebLogic Server sur AKS avec une connexion à Microsoft Azure SQL.

Cet article utilise l’offre WebLogic Server de la Place de marché Azure afin d’accélérer votre parcours vers AKS. L'offre approvisionne automatiquement plusieurs ressources Azure, notamment les ressources suivantes :

  • une instance Azure Container Registry
  • Un cluster AKS
  • une instance du contrôleur d'entrée Azure Application Gateway (AGIC)
  • L’opérateur WebLogic Kubernetes
  • une image conteneur comprenant le runtime WebLogic
  • Un cluster WebLogic Server sans application

Ensuite, l’article présente la création d’une image pour mettre à jour le cluster WebLogic Server. L’image fournit l’application et des modèles WDT.

Si vous préférez une approche moins automatisée pour déployer WebLogic sur AKS, consultez l’aide pas à pas incluse dans la documentation officielle d’Oracle pour Azure Kubernetes Service.

Si vous souhaitez fournir des commentaires ou travailler vos scénarios de migration aux côtés de l’équipe d’ingénierie qui développe WebLogic sur des solutions AKS, répondez à cette courte enquête sur la migration WebLogic et indiquez 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

  • Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
  • Vérifiez que l’identité Azure que vous utilisez pour vous connecter et compléter cet article a le rôle Propriétaire dans l’abonnement actuel ou les rôles Contributeur et Administrateur de l’accès utilisateur dans l’abonnement actuel. Pour obtenir une vue d’ensemble des rôles Azure, consultez Qu’est-ce que le contrôle d’accès en fonction du rôle Azure (RBAC Azure) ? Pour plus d’informations sur les rôles spécifiques requis par WLS sur AKS, consultez Rôles intégrés Azure.
  • Disposez des informations d’identification d’un compte d’authentification unique (SSO) Oracle. Pour en créer un, consultez la rubrique Créer votre compte Oracle.
  • Acceptez les termes du contrat de licence de WebLogic Server.
    • Accédez à Oracle Container Registry et connectez-vous.
    • Si vous disposez d’un droit d’assistance, sélectionnez Intergiciel, puis recherchez et sélectionnez weblogic_cpu.
    • Si vous disposez d’un droit d’utilisation support, sélectionnez Intergiciel, puis recherchez et sélectionnez weblogic_cpu.
    • Acceptent le contrat de licence.

    Remarque

    Obtenez un droit d’utilisation support auprès d’Oracle avant de passer en production. Si vous ne le faites pas, vous risquez d’exploiter des images non sécurisées qui ne sont pas corrigées pour les failles de sécurité critiques. Pour plus d’informations sur les mises à jour de correctifs critiques d’Oracle, consultez Mises à jour de correctifs critiques, alertes et bulletins de sécurité d’Oracle.

  • Préparez une machine locale avec un système d’exploitation de type Unix installé, par exemple Ubuntu, Azure Linux, macOS, Sous-système Windows pour Linux.
    • Azure CLI. Utilisez az --version pour tester si az fonctionne. Ce document a été testé avec la version 2.55.1.
    • kubectl. Utilisez kubectl version pour tester si kubectl fonctionne. Ce document a été testé avec la version v1.21.2.
    • Un kit de développement Java (JDK). L’article vous dirige vers l’installation de la build Microsoft d’OpenJDK 11. Assurez-vous que la variable d'environnement JAVA_HOME est correctement définie dans les interpréteurs de commandes dans lesquels vous exécutez les commandes.
    • Maven 3.5.0 ou une version plus récente.
    • Assurez-vous que l'utilitaire zip/unzip est installé. Utilisez zip/unzip -v pour vérifier si zip/unzip fonctionne.

Créer une base de données Azure SQL

Cette section crée une base de données Azure SQL à l’aide de l’authentification Microsoft Entra, avec la connexion d’identité managée activée.

Créer un groupe de ressources

Créez un groupe de ressources avec la commande az group create. Étant donné que les groupes de ressources doivent être uniques au sein d’un abonnement, choisissez un nom unique. Un moyen simple d’avoir des noms uniques consiste à utiliser une combinaison de vos initiales, de la date d’aujourd’hui et de certains identificateurs. Par exemple : abc1228rg. Cet exemple crée un groupe de ressources nommé abc1228rg à l’emplacementeastus :

export RESOURCE_GROUP_NAME="abc1228rg"
az group create \
    --name ${RESOURCE_GROUP_NAME} \
    --location eastus

Créer un serveur de base de données et une base de données

Créez un serveur avec la commande az sql server create. Cet exemple crée un serveur nommé myazuresql20130213 avec l’utilisateur administrateur azureuser et le mot de passe administrateur. Remplacez <your-password> par votre mot de passe. Pour plus d’informations, consultez Démarrage rapide : Créer une base de données unique - Azure SQL Database.

Remarque

Même si vous utilisez un nom d’utilisateur et un mot de passe ici, ces informations d’identification ne sont pas exposées en dehors de la base de données. La connexion entre la couche application et la base de données est sécurisée avec des identités managées.

export AZURESQL_SERVER_NAME="myazuresql20130213"
export AZURESQL_ADMIN_USER="azureuser"
export AZURESQL_ADMIN_PASSWORD="<your-password>"
export DATABASE_NAME="mysingledatabase20230213"
az sql server create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $AZURESQL_SERVER_NAME \
    --location westus \
    --admin-user $AZURESQL_ADMIN_USER \
    --admin-password $AZURESQL_ADMIN_PASSWORD

Créez une base de données à l’aide de la commande az sql db create au niveau de calcul serverless.

az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $AZURESQL_SERVER_NAME \
    --name $DATABASE_NAME \
    --sample-name AdventureWorksLT \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Configurer un administrateur Microsoft Entra

Pour des informations sur la façon dont Azure SQL Server interagit avec les identités managées, consultez Se connecter en utilisant l’authentification Microsoft Entra.

Procédez comme suit pour configurer un compte d’administrateur Microsoft Entra sur Azure SQL Server à partir du portail Microsoft Azure :

  1. Dans le portail Azure, ouvrez l’instance de serveur Azure SQL myazuresql20130213.
  2. Sélectionnez Paramètres, puis sélectionnez Microsoft Entra ID. Sur la page Microsoft Entra ID, sélectionnez Définir admin.
  3. Sur la page Ajouter admin, recherchez un utilisateur, sélectionnez l’utilisateur ou le groupe à définir comme administrateur, puis sélectionnez Sélectionner.
  4. En haut de la page Microsoft Entra ID, sélectionnez Enregistrer. Pour les utilisateurs et groupes Microsoft Entra, l’ID d’objet s’affiche à côté du nom d’administrateur.
  5. La procédure de changement de l’administrateur peut prendre plusieurs minutes. Ensuite, le nouvel administrateur apparaît dans la boîte Microsoft Entra ID.

Créer une identité managée attribuée par l’utilisateur

Ensuite, dans Azure CLI, créez une identité dans votre abonnement en utilisant la commande az identity create. Vous utilisez cette identité managée pour vous connecter à votre base de données.

az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name myManagedIdentity

Créer un utilisateur de base de données pour votre identité managée

Maintenant, connectez-vous en tant qu’utilisateur administrateur Microsoft Entra à votre base de données Azure SQL depuis le portail Azure et créez un utilisateur pour votre identité managée.

Tout d’abord, créez une règle de pare-feu pour accéder au serveur Azure SQL depuis le portail, comme indiqué dans les étapes suivantes :

  1. Dans le portail Azure, ouvrez l’instance de serveur Azure SQL myazuresql20130213.
  2. Sélectionnez Sécurité, puis sélectionnez Réseau.
  3. Sous Règles de pare-feu, sélectionnez Ajouter votre adresse IP client IPv4.
  4. Sous Exceptions, sélectionnez Autoriser les services et ressources Azure à accéder à ce serveur.
  5. Cliquez sur Enregistrer.

Une fois la règle de pare-feu créée, vous pouvez accéder au serveur Azure SQL depuis le portail. Utilisez les étapes suivantes pour créer un utilisateur de base de données :

  1. Sélectionnez Paramètres, puis sélectionnez Bases de données SQL. Sélectionnez mysingledatabase20230213.

  2. Sélectionnez Éditeur de requêtes. Sur la page Bienvenue dans l’éditeur de requêtes SQL Database, sous Authentification Active Directory, vous trouverez un message du type Logged in as user@contoso.com.

  3. Sélectionnez Continuer en tant que user@contoso.com, où user est le nom de votre compte admin AD.

  4. Après vous être connecté, dans l’éditeur Requête 1, exécutez les commandes suivantes pour créer un utilisateur de base de données pour l’identité managée myManagedIdentity.

    CREATE USER "myManagedIdentity" FROM EXTERNAL PROVIDER
    ALTER ROLE db_datareader ADD MEMBER "myManagedIdentity";
    ALTER ROLE db_datawriter ADD MEMBER "myManagedIdentity";
    ALTER ROLE db_ddladmin ADD MEMBER "myManagedIdentity";
    GO
    
  5. Dans l’éditeur Requête 1, sélectionnez Exécuter pour exécuter les commandes SQL.

  6. Si les commandes s’exécutent correctement, vous pouvez trouver un message indiquant Query succeeded: Affected rows: 0.

Utilisez la commande suivante pour obtenir la chaîne de connexion que vous utiliserez dans la section suivante :

export CONNECTION_STRING="jdbc:sqlserver://${AZURESQL_SERVER_NAME}.database.windows.net:1433;database=${DATABASE_NAME};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
echo ${CONNECTION_STRING}

Créer un schéma pour l’application modèle

Sélectionnez Nouvelle requête, puis, dans l’éditeur de requête, exécutez la requête suivante :

CREATE TABLE COFFEE (ID NUMERIC(19) NOT NULL, NAME VARCHAR(255) NULL, PRICE FLOAT(32) NULL, PRIMARY KEY (ID));
CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT NUMERIC(28) NULL, PRIMARY KEY (SEQ_NAME));
INSERT INTO SEQUENCE VALUES ('SEQ_GEN',0);

Après une exécution réussie, vous devez voir le message Requête réussie : Lignes affectées : 1. Dans le cas contraire, dépannez et résolvez le problème avant de poursuivre.

Vous pouvez continuer à déployer WLS sur l’offre AKS.

Déployer WebLogic Server sur AKS

Procédez comme suit pour rechercher l’offre WebLogic Server sur AKS et remplir le volet Informations de base :

  1. Dans la barre de recherche située en haut du portail Azure, entrez weblogic. Dans les résultats de la recherche suggérée automatiquement, dans la section Place de marché, sélectionnez WebLogic Server sur AKS.

    Capture d’écran du Portail Azure affichant WebLogic Server dans les résultats de la recherche.

    Vous pouvez également accéder directement à l'offre WebLogic Server sur AKS.

  2. Sur la page de l’offre, sélectionnez Créer.

  3. Dans le volet De base, assurez-vous que la valeur indiquée dans le champ Abonnement est la même que celle à laquelle vous vous êtes connecté dans Azure. Assurez-vous que vous disposez des rôles listés dans la section des prérequis pour l’abonnement.

    Capture d’écran du portail Azure affichant WebLogic Server sur AKS.

  4. Vous devez déployer l’offre dans un groupe de ressources vide. Dans le champ Groupe de ressources, sélectionnez Créer nouveau, puis indiquez une valeur pour le groupe de ressources. Étant donné que les groupes de ressources doivent être uniques au sein d’un abonnement, choisissez un nom unique. La solution la plus simple pour obtenir des noms uniques est d'utiliser une combinaison de vos initiales, de la date du jour et d'un identificateur, par exemple ejb0723wls.

  5. Sous Détails de l’instance, sélectionnez la région pour le déploiement. Pour obtenir la liste des régions Azure où AKS est disponible, consultez Disponibilité des régions AKS.

  6. Sous Informations d’identification pour WebLogic, laissez la valeur par défaut pour Nom d’utilisateur pour l’administrateur WebLogic.

  7. Renseignez wlsAksCluster2022 pour le mot de passe de l’administrateur WebLogic. Utilisez la même valeur pour les champs Confirmation et Mot de passe pour le chiffrement du modèle WebLogic.

  8. Cliquez sur Suivant.

Utilisez les étapes suivantes pour démarrer le processus de déploiement :

  1. Faites défiler jusqu’à la section intitulée Fournir un compte Oracle à authentification unique (SSO). Renseignez vos informations d’identification SSO Oracle à partir des conditions préalables.

    Capture d’écran du portail Azure affichant le volet d’authentification unique configuré.

  2. Notez bien les étapes de la zone d’information commençant par Avant d’aller plus loin, vous devez accepter les conditions et restrictions standard d’Oracle.

  3. Selon que le compte Oracle SSO dispose ou non d’un droit d’utilisation d’Oracle, sélectionnez l’option appropriée pour Sélectionnez le type des images WebLogic Server. Si le compte dispose d'un droit d'assistance, sélectionnez Patched WebLogic Server Images. A défaut, sélectionnez General WebLogic Server Images

  4. Laissez la valeur dans Sélectionner la combinaison souhaitée de WebLogic Server... à sa valeur par défaut. Vous disposez d’un large éventail de choix pour WebLogic Server, JDK et la version du système d’exploitation.

  5. Dans la section Application , près de Souhaitez-vous déployer une application ?, sélectionnez Non.

Les étapes suivantes permettent d’exposer la console d’administration WebLogic Server. De plus, l’exemple d’application est exposé à l’Internet public grâce au module complémentaire d’entrée Application Gateway. Pour plus d'informations, consultez Qu'est-ce que le contrôleur d'entrée Application Gateway ?

  1. Sélectionnez Suivant pour afficher le volet TLS/SSL.

  2. Sélectionnez Suivant pour afficher le volet Équilibrage de charge.

  3. Près de Options d'équilibrage de charge, sélectionnez Contrôleur d'entrée Application Gateway.

    Capture d’écran du portail Azure affichant la configuration la plus simple possible de l’équilibreur de charge sur la page Créer un serveur Oracle WebLogic sur Azure Kubernetes Service.

  4. Sous le Contrôleur d'entrée Application Gateway, vous constaterez que tous les champs sont préremplis avec les valeurs par défaut pour le réseau virtuel et le sous-réseau. Laissez les valeurs par défaut.

  5. Pour Créer une entrée pour la console d'administration, sélectionnez Oui.

    Capture d’écran du portail Azure affichant la configuration du contrôleur d’entrée Application Gateway sur la page Créer un serveur Oracle WebLogic sur Azure Kubernetes Service.

  6. Sélectionnez Suivant pour afficher le volet DNS.

  7. Sélectionnez Suivant pour afficher le volet Base de données.

Procédez comme suit pour configurer une connexion de base de données à l’aide d’une identité managée :

  1. Pour Se connecter à la base de données, sélectionnez Oui.
  2. Sous Paramètres de connexion, pour Choisir le type de base de données, ouvrez le menu déroulant puis sélectionnez Microsoft SQL Server (avec prise en charge de la connexion sans mot de passe).
  3. Pour le Nom JNDI, entrez jdbc/WebLogicCafeDB.
  4. Pour Chaîne de connexion DataSource, entrez la chaîne de connexion que vous avez obtenue dans la dernière section.
  5. Sélectionnez Utiliser la connexion à la source de données sans mot de passe.
  6. Pour Identité managée affectée par l’utilisateur, sélectionnez l’identité managée que vous avez créée à l’étape précédente. Dans cet exemple, son nom est myManagedIdentity.
  7. Sélectionnez Ajouter.

La section Paramètres de connexion doit ressembler à la capture d’écran suivante :

Capture d’écran du portail Microsoft Azure affichant l’onglet Base de données de la page Créer un serveur Oracle WebLogic sur Azure Kubernetes Service.

Procédez comme suit pour terminer le déploiement.

  1. Sélectionnez Revoir + créer. Assurez-vous que la validation se déroule sans problème. En cas d'échec, corrigez les éventuels problèmes de validation, puis sélectionnez Réviser + Créer à nouveau.
  2. Sélectionnez Créer.
  3. Suivez la progression du déploiement sur la page Déploiement en cours.

En fonction des conditions du réseau et des autres activités dans la région sélectionnée, le déploiement peut prendre jusqu'à 50 minutes.

Remarque

Si votre organisation vous oblige à déployer la charge de travail au sein d’un réseau virtuel d’entreprise sans adresses IP publiques autorisées, vous pouvez choisir le service de l’équilibreur de charge interne. Pour configurer le service de l’équilibreur de charge interne, procédez comme suit dans l’onglet Équilibrage de charge :

  1. Pour Options de l’équilibrage de charge, sélectionnez Service Standard Load Balancer.

  2. Sélectionnez Utiliser un équilibreur de charge interne.

  3. Ajoutez les lignes suivantes à la table :

    Préfixe de nom de service Cible Port
    wls-admin-internal admin-server 7001
    wls-cluster-internal cluster-1 8001

L’onglet Équilibrage de charge doit ressembler à la capture d’écran suivante :

Capture d’écran du portail Microsoft Azure montrant l’onglet Équilibrage de charge de la page Créer un serveur Oracle WebLogic sur Azure Kubernetes Service.

Après le déploiement, vous pouvez trouver les URL d’accès du serveur d’administration et du cluster à partir de la sortie, étiquetées adminConsoleExternalUrl et clusterExternalUrl.

Examiner la sortie du déploiement

Utilisez les étapes décrites dans cette section pour vérifier que le déploiement a réussi.

Si vous avez quitté la page Déploiement en cours, procédez comme suit pour y revenir. Si vous êtes toujours sur la page indiquant Votre déploiement est terminé, vous pouvez passer à l'étape 5 après la capture d'écran suivante.

  1. Dans tous les angles de la page du portail Microsoft Azure, sélectionnez le menu hamburger et choisissez Groupes de ressources.

  2. Dans la zone avec le texte Filtrer pour n’importe quel champ, entrez les premiers caractères du groupe de ressources que vous avez créé précédemment. Si vous avez suivi la convention recommandée, entrez vos initiales, puis sélectionnez le groupe de ressources approprié.

  3. Dans le volet de navigation de gauche, section Paramètres, sélectionnez Déploiements. Une liste triée des déploiements effectués dans ce groupe de ressources s’affiche, avec le plus récent en premier.

  4. Faites défiler la liste jusqu’à l’entrée la plus ancienne. Cette entrée correspond au déploiement que vous avez démarré dans la section précédente. Sélectionnez le déploiement le plus ancien, comme illustré dans la capture d’écran suivante.

    Capture d’écran du portail Azure affichant la liste des déploiements du groupe de ressources.

  5. Dans le volet de navigation, sélectionnez Sorties. La liste affiche les valeurs de sortie du déploiement. Des informations utiles sont incluses dans les sorties.

  6. La valeur adminConsoleExternalUrl est le lien visible Internet public complet vers la console d’administration WebLogic Server pour ce cluster AKS. Sélectionnez l’icône de copie en regard de la valeur du champ pour copier le lien dans le presse-papiers. Enregistrez cette valeur pour plus tard.

  7. La valeur clusterExternalUrl est le lien visible Internet public complet vers l’exemple d’application déployée dans WebLogic Server sur ce cluster AKS. Sélectionnez l’icône de copie en regard de la valeur du champ pour copier le lien dans le presse-papiers. Enregistrez cette valeur pour plus tard.

  8. La valeur shellCmdtoOutputWlsImageModelYaml est la chaîne base64 du modèle WDT utilisé pour créer l’image conteneur. Enregistrez cette valeur pour plus tard.

  9. La valeur shellCmdtoOutputWlsImageProperties est la chaîne base64 des propriétés du modèle WDT utilisé pour créer l’image conteneur. Enregistrez cette valeur pour plus tard.

  10. La valeur shellCmdtoConnectAks est la commande Azure CLI permettant de se connecter à ce cluster AKS spécifique.

Les autres valeurs des sorties dépassent la portée de cet article, mais sont expliquées en détail dans le guide de l’utilisateur WebLogic sur AKS.

Configurer et déployer l’exemple d’application

L’offre fournit le cluster WebLogic Server via le modèle dans l’image. Actuellement, le cluster WebLogic Server n’a pas d’application déployée.

Cette section met à jour le cluster WebLogic Server en déployant un exemple d’application à l’aide de l’image auxiliaire.

Extraire l’application

Dans cette section, vous pouvez cloner l'exemple de code de ce guide. L'échantillon est sur GitHub dans le référentiel weblogic-on-azure dans le dossier javaee/weblogic-cafe/. Voici la structure des fichiers de l’application.

weblogic-cafe
├── pom.xml
└── src
    └── main
        ├── java
        │   └── cafe
        │       ├── model
        │       │   ├── CafeRepository.java
        │       │   └── entity
        │       │       └── Coffee.java
        │       └── web
        │           ├── rest
        │           │   └── CafeResource.java
        │           └── view
        │               └── Cafe.java
        ├── resources
        │   ├── META-INF
        │   │   └── persistence.xml
        │   └── cafe
        │       └── web
        │           ├── messages.properties
        │           └── messages_es.properties
        └── webapp
            ├── WEB-INF
            │   ├── beans.xml
            │   ├── faces-config.xml
            │   └── web.xml
            ├── index.xhtml
            └── resources
                └── components
                    └── inputPrice.xhtml

Utilisez les commandes suivantes pour cloner le référentiel :

# cd <parent-directory-to-check-out-sample-code>
export BASE_DIR=$PWD

git clone --single-branch https://github.com/microsoft/weblogic-on-azure.git --branch 20240201 $BASE_DIR/weblogic-on-azure

Si un message vous signale que vous allez passer à l’état « detached HEAD », vous pouvez ignorer ce message sans risque. Cela signifie simplement que vous avez modifié une étiquette.

Utilisez la commande suivante pour générerjavaee/weblogic-cafe/ :

mvn clean package --file $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/pom.xml

Le package devrait être généré efficacement et localisé sur $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war. Si vous ne voyez pas le package, veuillez résoudre le problème avant de continuer.

Utiliser Azure Container Registry pour créer une image auxiliaire

Les étapes décrites dans cette section vous montrent comment générer une image auxiliaire. Cette image comprend les éléments suivants :

  • le modèle dans les fichiers de Modèle d'image
  • Votre application.
  • Le fichier d’archivage du pilote JDBC (Java Database Connectivity)
  • l'installation de WebLogic Deploy Tooling

Une image auxiliaire est une image conteneur Docker contenant votre application et votre configuration. L'opérateur Kubernetes WebLogic combine votre image auxiliaire avec le domain.spec.image du cluster AKS qui contient le serveur WebLogic, le JDK et le système d'exploitation. Pour plus d'informations sur les images auxiliaires, consultez les images auxiliaires dans la documentation Oracle.

Cette section nécessite un terminal Linux avec Azure CLI et kubectl installés.

Pour générer l'image, procédez comme suit :

  1. utilisez les commandes suivantes pour créer un répertoire dans lequel vous placerez les modèles et l'application :

    mkdir -p ${BASE_DIR}/mystaging/models
    cd ${BASE_DIR}/mystaging/models
    
  2. Copiez la valeur shellCmdtoOutputWlsImageModelYaml que vous avez enregistrée à partir des sorties de déploiement, collez-la dans la fenêtre Bash et exécutez la commande. La commande doit être similaire à l’exemple suivant :

    echo -e IyBDb3B5cmlna...Cgo= | base64 -d > model.yaml
    

    Cette commande produit un fichier ${BASE_DIR}/mystaging/models/model.yaml dont le contenu est similaire à l'exemple suivant :

    # Copyright (c) 2020, 2021, Oracle and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    
    # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.yaml
    # in https://github.com/oracle/weblogic-kubernetes-operator.
    
    domainInfo:
      AdminUserName: "@@SECRET:__weblogic-credentials__:username@@"
      AdminPassword: "@@SECRET:__weblogic-credentials__:password@@"
      ServerStartMode: "prod"
    
    topology:
      Name: "@@ENV:CUSTOM_DOMAIN_NAME@@"
      ProductionModeEnabled: true
      AdminServerName: "admin-server"
      Cluster:
        "cluster-1":
          DynamicServers:
            ServerTemplate: "cluster-1-template"
            ServerNamePrefix: "@@ENV:MANAGED_SERVER_PREFIX@@"
            DynamicClusterSize: "@@PROP:CLUSTER_SIZE@@"
            MaxDynamicClusterSize: "@@PROP:CLUSTER_SIZE@@"
            MinDynamicClusterSize: "0"
            CalculatedListenPorts: false
      Server:
        "admin-server":
          ListenPort: 7001
      ServerTemplate:
        "cluster-1-template":
          Cluster: "cluster-1"
          ListenPort: 8001
      SecurityConfiguration:
        NodeManagerUsername: "@@SECRET:__weblogic-credentials__:username@@"
        NodeManagerPasswordEncrypted: "@@SECRET:__weblogic-credentials__:password@@"
    
    resources:
      SelfTuning:
        MinThreadsConstraint:
          SampleMinThreads:
            Target: "cluster-1"
            Count: 1
        MaxThreadsConstraint:
          SampleMaxThreads:
            Target: "cluster-1"
            Count: 10
        WorkManager:
          SampleWM:
            Target: "cluster-1"
            MinThreadsConstraint: "SampleMinThreads"
            MaxThreadsConstraint: "SampleMaxThreads"
    
  3. De la même manière, copiez la valeur shellCmdtoOutputWlsImageProperties, collez-la dans la fenêtre Bash et exécutez la commande. La commande doit être similaire à l’exemple suivant :

    echo -e IyBDb3B5cml...pFPTUK | base64 -d > model.properties
    

    Cette commande produit un fichier ${BASE_DIR}/mystaging/models/model.properties dont le contenu est similaire à l'exemple suivant :

    # Copyright (c) 2021, Oracle Corporation and/or its affiliates.
    # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
    
    # Based on ./kubernetes/samples/scripts/create-weblogic-domain/model-in-image/model-images/model-in-image__WLS-v1/model.10.properties
    # in https://github.com/oracle/weblogic-kubernetes-operator.
    
    CLUSTER_SIZE=5
    
  4. Les étapes suivantes permettent de créer le fichier de modèle d'application.

    1. Utilisez les commandes suivantes pour copier weblogic-café.war et enregistrez-la dans wlsdeploy/applications :

      mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/applications
      cp $BASE_DIR/weblogic-on-azure/javaee/weblogic-cafe/target/weblogic-cafe.war ${BASE_DIR}/mystaging/models/wlsdeploy/applications/weblogic-cafe.war
      
    2. Utilisez les commandes suivantes pour créer le fichier de modèle d'application avec le contenu affiché. Enregistrez le fichier de modèle sur ${BASE_DIR}/mystaging/models/appmodel.yaml.

      cat <<EOF >appmodel.yaml
      appDeployments:
        Application:
          weblogic-cafe:
            SourcePath: 'wlsdeploy/applications/weblogic-cafe.war'
            ModuleType: ear
            Target: 'cluster-1'
      EOF
      
  5. Procédez comme suit pour configurer la connexion de source de données.

    1. Procédez comme suit pour télécharger et installer le pilote JDBC Microsoft SQL Server et l’extension d’identité Azure qui active les connexions de base de données à l’aide de l’identité managée Azure.

      1. Utilisez les commandes suivantes pour télécharger et installer le pilote JDBC Microsoft SQL Server sur wlsdeploy/externalJDBCLibraries :

        export DRIVER_VERSION="10.2.1.jre8"
        export MSSQL_DRIVER_URL="https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/${DRIVER_VERSION}/mssql-jdbc-${DRIVER_VERSION}.jar"
        
        mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries
        curl -m 120 -fL ${MSSQL_DRIVER_URL} -o ${BASE_DIR}/mystaging/models/wlsdeploy/externalJDBCLibraries/mssql-jdbc-${DRIVER_VERSION}.jar
        
      2. Utilisez les commandes suivantes pour installer l’extension d’identité Azure sur wlsdeploy/classpathLibraries :

        curl -LO https://github.com/oracle/weblogic-azure/raw/refs/heads/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml
        
        mvn dependency:copy-dependencies -f azure-identity-extensions.xml
        
        mkdir -p ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/azureLibraries
        mkdir ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson
        # fix JARs conflict issue in GA images, put jackson libraries to PRE_CLASSPATH to upgrade the existing libs.
        mv target/dependency/jackson-annotations-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        mv target/dependency/jackson-core-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        mv target/dependency/jackson-databind-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        mv target/dependency/jackson-dataformat-xml-*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/jackson/
        # Thoes jars will be appended to CLASSPATH
        mv target/dependency/*.jar ${BASE_DIR}/mystaging/models/wlsdeploy/classpathLibraries/azureLibraries/
        
      3. Utilisez les commandes suivantes pour nettoyer les ressources :

        rm target -f -r
        rm azure-identity-extensions.xml
        
    2. Connectez-vous au cluster AKS en copiant la valeur shellCmdtoConnectAks que vous avez enregistrée précédemment, en la collant dans la fenêtre Bash, puis en exécutant la commande. La commande doit être similaire à l’exemple suivant :

      az account set --subscription <subscription>;
      az aks get-credentials \
          --resource-group <resource-group> \
          --name <name>
      

      Vous devez obtenir une sortie similaire à la suivante. Dans le cas contraire, dépannez et résolvez le problème avant de poursuivre.

      Merged "<name>" as current context in /Users/<username>/.kube/config
      
    3. Exportez le modèle de connexion de base de données et enregistrez-le dans ${BASE_DIR}/mystaging/models/dbmodel.yaml. Les étapes suivantes extraient le modèle de configuration de base de données à partir du ConfigMap sample-domain1-wdt-config-map. Le nom suit le format <domain-uid>-wdt-config-map, où <domain-uid> est défini pendant le déploiement de l’offre. Si vous avez modifié la valeur par défaut, remplacez-la par votre propre UID de domaine.

      1. La clé de données est <db-secret-name>.yaml. Utilisez la commande suivante pour récupérer le nom du secret de base de données :

        export WLS_DOMAIN_UID=sample-domain1
        export WLS_DOMAIN_NS=${WLS_DOMAIN_UID}-ns
        export DB_K8S_SECRET_NAME=$(kubectl get secret -n ${WLS_DOMAIN_NS} | grep "ds-secret" | awk '{print $1}')
        
      2. Ensuite, extrayez le modèle de base de données avec cette commande :

        kubectl get configmap sample-domain1-wdt-config-map -n ${WLS_DOMAIN_NS} -o=jsonpath="{['data']['${DB_K8S_SECRET_NAME}\.yaml']}" >${BASE_DIR}/mystaging/models/dbmodel.yaml
        
      3. Enfin, utilisez la commande suivante pour vérifier le contenu de dbmodel.yaml.

        cat ${BASE_DIR}/mystaging/models/dbmodel.yaml
        

        La sortie de cette commande doit ressembler à la structure suivante :

        # Copyright (c) 2020, 2021, Oracle and/or its affiliates.
        # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
        
        resources:
          JDBCSystemResource:
            jdbc/WebLogicCafeDB:
              Target: 'cluster-1'
              JdbcResource:
              JDBCDataSourceParams:
                 JNDIName: [
                    jdbc/WebLogicCafeDB
                 ]
                 GlobalTransactionsProtocol: OnePhaseCommit
              JDBCDriverParams:
                 DriverName: com.microsoft.sqlserver.jdbc.SQLServerDriver
                 URL: '@@SECRET:ds-secret-sqlserver-1727147748:url@@'
                 PasswordEncrypted: '@@SECRET:ds-secret-sqlserver-1727147748:password@@'
                 Properties:
                    user:
                    Value: '@@SECRET:ds-secret-sqlserver-1727147748:user@@'
              JDBCConnectionPoolParams:
                    TestTableName: SQL SELECT 1
                    TestConnectionsOnReserve: true
        
  6. Utilisez les commandes suivantes pour créer un fichier d’archive, puis supprimez le dossier wlsdeploy dont vous n’avez plus besoin :

    cd ${BASE_DIR}/mystaging/models
    zip -r archive.zip wlsdeploy
    
    rm -f -r wlsdeploy
    
  7. Utilisez les commandes suivantes pour télécharger et installer WebLogic Deploy Tooling (WDT) dans le répertoire intermédiaire, et supprimez ses fichiers weblogic-deploy/bin/*.cmd , qui ne sont pas utilisés dans les environnements UNIX :

    cd ${BASE_DIR}/mystaging
    curl -m 120 -fL https://github.com/oracle/weblogic-deploy-tooling/releases/latest/download/weblogic-deploy.zip -o weblogic-deploy.zip
    
    unzip weblogic-deploy.zip -d .
    rm ./weblogic-deploy/bin/*.cmd
    
  8. Utilisez la commande suivante pour nettoyer le programme d’installation WDT :

    rm weblogic-deploy.zip
    
  9. Utilisez les commandes suivantes pour créer un fichier Docker :

    cd ${BASE_DIR}/mystaging
    cat <<EOF >Dockerfile
    FROM busybox
    ARG AUXILIARY_IMAGE_PATH=/auxiliary
    ARG USER=oracle
    ARG USERID=1000
    ARG GROUP=root
    ENV AUXILIARY_IMAGE_PATH=\${AUXILIARY_IMAGE_PATH}
    RUN adduser -D -u \${USERID} -G \$GROUP \$USER
    COPY --chown=\$USER:\$GROUP ./ \${AUXILIARY_IMAGE_PATH}/
    USER \$USER
    EOF
    
  10. Exécutez la commande az acr build en utilisant ${BASE_DIR}/mystaging/Dockerfile , comme indiqué dans l'exemple suivant :

    export ACR_NAME=<value-from-clipboard>
    export IMAGE="wlsaks-auxiliary-image:1.0"
    
  11. Utilisez les commandes suivantes pour vérifier les fichiers intermédiaires :

    cd ${BASE_DIR}/mystaging
    find -maxdepth 2 -type f -print
    

    Ces commandes produisent une sortie semblable à l’exemple suivant :

    ./models/model.properties
    ./models/model.yaml
    ./models/appmodel.yaml
    ./models/dbmodel.yaml
    ./models/archive.zip
    ./Dockerfile
    ./weblogic-deploy/VERSION.txt
    ./weblogic-deploy/LICENSE.txt
    
  12. Générez l’image avec az acr build, comme illustré dans l’exemple suivant :

    az acr build -t ${IMAGE} --build-arg AUXILIARY_IMAGE_PATH=/auxiliary -r ${ACR_NAME} --platform linux/amd64 .
    

    Lorsque vous générez convenablement l'image, le résultat correspond à l'exemple suivant :

    ...
    Step 1/9 : FROM busybox
    latest: Pulling from library/busybox
    Digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7
    Status: Image is up to date for busybox:latest
    ---> 65ad0d468eb1
    Step 2/9 : ARG AUXILIARY_IMAGE_PATH=/auxiliary
    ---> Running in 1f8f4e82ccb6
    Removing intermediate container 1f8f4e82ccb6
    ---> 947fde618be9
    Step 3/9 : ARG USER=oracle
    ---> Running in dda021591e41
    Removing intermediate container dda021591e41
    ---> f43d84be4517
    Step 4/9 : ARG USERID=1000
    ---> Running in cac4df6dfd13
    Removing intermediate container cac4df6dfd13
    ---> e5513f426c74
    Step 5/9 : ARG GROUP=root
    ---> Running in 8fec1763270c
    Removing intermediate container 8fec1763270c
    ---> 9ef233dbe279
    Step 6/9 : ENV AUXILIARY_IMAGE_PATH=${AUXILIARY_IMAGE_PATH}
    ---> Running in b7754f58157a
    Removing intermediate container b7754f58157a
    ---> 4a26a97eb572
    Step 7/9 : RUN adduser -D -u ${USERID} -G $GROUP $USER
    ---> Running in b6c1f1a81af1
    Removing intermediate container b6c1f1a81af1
    ---> 97d3e5ad7540
    Step 8/9 : COPY --chown=$USER:$GROUP ./ ${AUXILIARY_IMAGE_PATH}/
    ---> 21088171876f
    Step 9/9 : USER $USER
    ---> Running in 825e0abc9f6a
    Removing intermediate container 825e0abc9f6a
    ---> b81d6430fcda
    Successfully built b81d6430fcda
    Successfully tagged wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0
    2024/08/28 03:06:19 Successfully executed container: build
    2024/08/28 03:06:19 Executing step ID: push. Timeout(sec): 3600, Working directory: '', Network: ''
    2024/08/28 03:06:19 Pushing image: wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0, attempt 1
    The push refers to repository [wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image]
    ee589b3cda86: Preparing
    c1fd1adab3b9: Preparing
    d51af96cf93e: Preparing
    c1fd1adab3b9: Pushed
    d51af96cf93e: Pushed
    ee589b3cda86: Pushed
    1.0: digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac size: 946
    2024/08/28 03:06:21 Successfully pushed image: wlsaksacru6jyly7kztoqu.azurecr.io/wlsaks-auxiliary-image:1.0
    2024/08/28 03:06:21 Step ID: build marked as successful (elapsed time in seconds: 8.780235)
    2024/08/28 03:06:21 Populating digests for step ID: build...
    2024/08/28 03:06:22 Successfully populated digests for step ID: build
    2024/08/28 03:06:22 Step ID: push marked as successful (elapsed time in seconds: 1.980158)
    2024/08/28 03:06:22 The following dependencies were found:
    2024/08/28 03:06:22
    - image:
       registry: wlsaksacru6jyly7kztoqu.azurecr.io
       repository: wlsaks-auxiliary-image
       tag: "1.0"
       digest: sha256:c813eb75576eb07a179c3cb4e70106ca7dd280f933ab33a2f6858de673b12eac
    runtime-dependency:
       registry: registry.hub.docker.com
       repository: library/busybox
       tag: latest
       digest: sha256:9ae97d36d26566ff84e8893c64a6dc4fe8ca6d1144bf5b87b2b85a32def253c7
    git: {}
    
    Run ID: ca1 was successful after 14s
    

    L’image est envoyée à ACR après une génération réussie.

  13. Vous pouvez exécuter az acr repository show pour tester si l'image a bien été transférée dans le référentiel distant, comme le montre l'exemple suivant :

    az acr repository show --name ${ACR_NAME} --image ${IMAGE}
    

    Cette commande devrait générer des résultats similaires à ceux de l'exemple suivant :

    {
       "changeableAttributes": {
          "deleteEnabled": true,
          "listEnabled": true,
          "readEnabled": true,
          "writeEnabled": true
       },
       "createdTime": "2024-01-24T06:14:19.4546321Z",
       "digest": "sha256:a1befbefd0181a06c6fe00848e76f1743c1fecba2b42a975e9504ba2aaae51ea",
       "lastUpdateTime": "2024-01-24T06:14:19.4546321Z",
       "name": "1.0",
       "quarantineState": "Passed",
       "signed": false
    }
    

Appliquer l'image auxiliaire

Dans les étapes précédentes, vous avez créé l'image auxiliaire, y compris les modèles et WDT. Appliquez l’image auxiliaire au cluster WebLogic Server en procédant comme suit.

  1. Appliquez l'image auxiliaire en effectuant une mise à jour corrective de la définition de ressource personnalisée du domaine (CRD) à l'aide de la commande kubectl patch.

    L’image auxiliaire est définie dans spec.configuration.model.auxiliaryImages, comme illustré dans l’exemple suivant :

    spec:
      clusters:
      - name: sample-domain1-cluster-1
      configuration:
        model:
          auxiliaryImages:
          - image: wlsaksacrafvzeyyswhxek.azurecr.io/wlsaks-auxiliary-image:1.0
            imagePullPolicy: IfNotPresent
            sourceModelHome: /auxiliary/models
            sourceWDTInstallHome: /auxiliary/weblogic-deploy
    

    Utilisez les commandes suivantes pour augmenter la valeur restartVersion et utilisez kubectl patch pour appliquer l'image auxiliaire au domaine CRD en utilisant la définition illustrée :

    export VERSION=$(kubectl -n ${WLS_DOMAIN_NS} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"")
    export VERSION=$((VERSION+1))
    
    export ACR_LOGIN_SERVER=$(az acr show --name ${ACR_NAME} --query "loginServer" --output tsv)
    
    cat <<EOF >patch-file.json
    [
      {
        "op": "replace",
        "path": "/spec/restartVersion",
        "value": "${VERSION}"
      },
      {
        "op": "add",
        "path": "/spec/configuration/model/auxiliaryImages",
        "value": [{"image": "$ACR_LOGIN_SERVER/$IMAGE", "imagePullPolicy": "IfNotPresent", "sourceModelHome": "/auxiliary/models", "sourceWDTInstallHome": "/auxiliary/weblogic-deploy"}]
      },
      {
       "op": "remove",
       "path": "/spec/configuration/model/configMap"
      }
    ]
    EOF
    
    kubectl -n ${WLS_DOMAIN_NS} patch domain ${WLS_DOMAIN_UID} \
        --type=json \
        --patch-file patch-file.json
    
  2. Étant donné que la connexion de base de données est configurée dans l’image auxiliaire, exécutez la commande suivante pour supprimer ConfigMap :

    kubectl delete configmap sample-domain1-wdt-config-map -n ${WLS_DOMAIN_NS}
    

Avant de continuer, attendez que la commande suivante produise la sortie suivante pour le serveur d’administration et les serveurs gérés :

kubectl get pod -n ${WLS_DOMAIN_NS} -w
NAME                             READY   STATUS    RESTARTS   AGE
sample-domain1-admin-server      1/1     Running   0          20m
sample-domain1-managed-server1   1/1     Running   0          19m
sample-domain1-managed-server2   1/1     Running   0          18m

Le système peut mettre 5 à 10 minutes pour atteindre cet état. La liste suivante fournit une vue d'ensemble de ce qui se passe pendant que vous attendez :

  • Vous devez au préalable voir sample-domain1-introspector en cours d'exécution. Ce logiciel recherche les modifications apportées à la ressource personnalisée du domaine afin de pouvoir prendre les mesures nécessaires sur le cluster Kubernetes.
  • Lorsque des changements sont détectés, l'introspecteur de domaine arrête et démarre de nouveaux les pod pour déployer les changements.
  • Ensuite, vous verrez le pod sample-domain1-admin-server s'arrêter et redémarrer.
  • Puis, vous verrez les deux serveurs gérés s'arrêter et redémarrer.
  • Vous ne pourrez poursuivre l'opération que lorsque les trois pod auront atteint l'état 1/1 Running.

Vérifier la fonctionnalité du déploiement

Les étapes suivantes permettent de vérifier la fonctionnalité du déploiement en affichant la console d’administration WebLogic Server et l’exemple d’application :

  1. Collez la valeur adminConsoleExternalUrl dans la barre d'adresse d'un navigateur web connecté à Internet. Vous verrez l’écran habituel de connexion à la console d’administration WebLogic Server.

  2. Connectez-vous avec le nom d’utilisateur weblogic et le mot de passe que vous avez entré lors du déploiement de WebLogic Server à partir du portail Azure. Rappelez-vous que cette valeur est wlsAksCluster2022.

  3. Dans la boîte Structure du domaine, sélectionnez Services.

  4. Sous Services, sélectionnez Sources de données.

  5. Dans le panneau Résumé des sources de données JDBC, sélectionnez Monitoring. Votre écran devrait s'apparenter à l'exemple suivant. Vous découvrez que l’état de la source de données est en cours d’exécution sur des serveurs gérés.

    Capture d’écran de l’état de la source de données.

  6. Dans la boîte Structure du domaine, sélectionnez Déploiements.

  7. Dans le tableau Déploiements, il doit y avoir une ligne. Le nom doit avoir la même valeur que dans votre fichier Applicationappmodel.yaml. Sélectionnez le nom.

  8. Sélectionnez l’onglet Test.

  9. Sélectionnez weblogic-cafe.

  10. Dans le volet Paramètres de weblogic-cafe, sélectionnez l'onglet Test.

  11. Développez l'icône + située près de weblogic-café. Votre écran devrait s'apparenter à l'exemple suivant. En particulier, vous devriez voir des valeurs similaires à http://sample-domain1-managed-server1:8001/weblogic-cafe/index.xhtml dans la colonne Point de test.

    Capture d’écran des points de test weblogic-cafe.

    Remarque

    Les liens hypertextes dans la colonne Point de test ne sont pas sélectionnables, car nous n'avons pas configuré la console d'administration avec l'URL externe sur laquelle elle s'exécute. Cet article montre la console d’administration WebLogic Server uniquement à titre de démonstration. N’utilisez pas la console d’administration WebLogic Server pour toute modification de configuration durable lorsque vous exécutez WebLogic Server sur AKS. La conception native Cloud de WebLogic Server sur AKS nécessite que toute configuration durable soit représentée dans les images Docker initiales ou appliquée au cluster AKS en cours d’exécution à l’aide de techniques CI/CD telles que la mise à jour du modèle, comme décrit dans la documentation Oracle.

  12. Comprendre la valeur context-path de l'échantillon d'application que vous avez déployé. Si vous avez déployé l’exemple d’application recommandé, context-path est weblogic-cafe.

  13. Construisez une URL entièrement qualifiée pour l'application échantillon en ajoutant le context-path à la valeur clusterExternalUrl. Si vous avez déployé l'application échantillon recommandée, l'URL pleinement qualifiée devrait ressembler à http://wlsgw202401-wls-aks-domain1.eastus.cloudapp.azure.com/weblogic-cafe/ .

  14. Collez l’URL complète dans un navigateur Web connecté à Internet. Si vous avez déployé l'application échantillon recommandée, vous devriez obtenir des résultats similaires à la capture d'écran suivante :

    Capture d’écran de l’application web de test.

Nettoyer les ressources

Pour éviter des frais Azure, vous devez nettoyer les ressources non nécessaires. Lorsque vous n’avez plus besoin du cluster, utilisez la commande az group delete. La commande suivante supprime le groupe de ressources, le service de conteneur, le registre de conteneurs, la 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-name> --yes --no-wait

Étapes suivantes

Pour en savoir plus sur l’exécution de WebLogic Server sur AKS ou sur des machines virtuelles, suivez ces liens :

Pour plus d’informations sur les offres Oracle WebLogic dans la place de marché Azure, consultez Oracle WebLogic Server sur Azure. Ces offres sont toutes de type BYOL (apportez votre propre licence). Elles supposent que vous disposez déjà des licences appropriées avec Oracle, et d’une licence adéquate pour exécuter les offres dans Azure.