Déployer une application avec une image conteneur personnalisée

Attention

Cet article fait référence à CentOS, une distribution Linux proche de l’état EOL (End Of Life). Faites le point sur votre utilisation et organisez-vous en conséquence. Pour plus d’informations, consultez les conseils d’aide relatifs à la fin de vie de CentOS.

Remarque

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à : ✔️ Standard ✔️ Entreprise

Cet article explique comment déployer des applications Spring Boot dans Azure Spring Apps en utilisant une image conteneur personnalisée. Le déploiement d’une application avec un conteneur personnalisé prend en charge la plupart des fonctionnalités que lors du déploiement d’une application JAR. D’autres applications Java et non-Java peuvent également être déployées avec l’image conteneur.

Prérequis

  • Une image conteneur contenant l’application.
  • L’image est envoyée à un registre d’images. Pour plus d’informations, consultez Azure Container Registry.

Remarque

L’application web doit écouter sur le port 1025 du plan Standard et sur le port 8080 du plan Enterprise. La façon de changer le port dépend du framework de l’application. Par exemple, spécifiez SERVER_PORT=1025 pour les applications Spring Boot ou ASPNETCORE_URLS=http://+:1025/ pour les applications ASP.NET Core. Vous pouvez désactiver la sonde pour les applications qui n’écoutent sur aucun port. Pour plus d’informations, consultez Guide pratique pour configurer des sondes d’intégrité et des périodes d’arrêt approprié pour les applications hébergées dans Azure Spring Apps.

Déployer votre application

Pour déployer une application sur une image conteneur personnalisée, effectuez les étapes suivantes :

Pour déployer une image conteneur, utilisez une des commandes suivantes :

  • Pour déployer une image conteneur sur le Docker Hub public puis sur une application, utilisez la commande suivante :

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Pour déployer une image conteneur depuis ACR sur une application ou depuis un autre registre privé sur une application, utilisez la commande suivante :

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

Pour remplacer le point d’entrée de l’image, ajoutez les deux arguments suivants à une des commandes ci-dessus :

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

Pour désactiver l’écoute sur un port pour les images qui ne sont pas des applications web, ajoutez l’argument suivant aux commandes ci-dessus :

    --disable-probe true

Matrice de prise en charge des fonctionnalités

La matrice suivante montre les fonctionnalités prises en charge dans chaque type d’application.

Fonctionnalité Applications Spring Boot - Déploiement de conteneur Applications polyglottes - Déploiement de conteneur Notes
Gestion de cycle de vie des applications ✔️ ✔️
Prise en charge des registres de conteneurs ✔️ ✔️
Affecter un point de terminaison ✔️ ✔️
Azure Monitor ✔️ ✔️
Intégration d’APM ✔️ ✔️ Prise en charge par l’installation manuelle.
Déploiement bleu/vert ✔️ ✔️
Domaine personnalisé ✔️ ✔️
Mise à l’échelle - Mise à l’échelle automatique ✔️ ✔️
Mise à l’échelle - Mise à l’échelle manuelle (scale-in, scale-out, scale-up, scale-down) ✔️ ✔️
Identité gérée ✔️ ✔️
Spring Cloud Eureka et Config Server ✔️
Portail des API pour VMware Tanzu ✔️ ✔️ Plan Enterprise uniquement.
Spring Cloud Gateway pour VMware Tanzu ✔️ ✔️ Plan Enterprise uniquement.
Service de configuration des applications pour VMware Tanzu ✔️ Plan Enterprise uniquement.
Affichage en direct Application pour VMware Tanzu ✔️ Plan Enterprise uniquement.
VMware Tanzu Service Registry ✔️ Plan Enterprise uniquement.
Réseau virtuel ✔️ ✔️ Ajout d’un registre à la liste verte dans un groupe de sécurité réseau ou dans Pare-feu Azure.
Adresse IP sortante ✔️ ✔️
E2E TLS ✔️ ✔️ Approuver une autorité de certification auto-signée.
Paramètres d’activité et de préparation ✔️ ✔️
Résolution avancée des problèmes -Vidage de threads/segments de mémoire/JFR ✔️ L’image doit inclure Bash et le JDK avec PATH spécifié.
Apporter votre propre stockage ✔️ ✔️
Intégrer la liaison de service à Resource Connector ✔️
Zone de disponibilité ✔️ ✔️
Événements du cycle de vie d’une application ✔️ ✔️
Taille d’application réduite - 0,5 processeur virtuel et 512 Mo ✔️ ✔️
Automatisation des déploiements d’application avec Terraform ✔️ ✔️
Suppression réversible ✔️ ✔️
Expérience de diagnostic interactive (basée sur AppLens) ✔️ ✔️
CONTRAT SLA ✔️ ✔️

Remarque

Les applications polyglottes incluent les applications non-Spring Boot Java, NodeJS, AngularJS, Python et .NET.

Points courants à prendre en compte lors du déploiement avec un conteneur personnalisé

Les points suivants vous aideront à résoudre les situations courantes lors du déploiement avec une image personnalisée.

Approuver une autorité de certification

Il existe deux options pour approuver une autorité de certification :

Option 1 : Charger via Azure Spring Apps

Pour charger les certificats d’autorité de certification dans vos applications, consultez Utiliser des certificats TLS/SSL dans votre application dans Azure Spring Apps. Les certificats seront alors montés à l’emplacement /etc/azure-spring-cloud/certs/public/.

Option 2 : Installation manuelle dans l’image

Pour approuver une autorité de certification dans l’image, définissez les variables suivantes en fonction de votre environnement :

  • Vous devez importer des applications Java dans le magasin de confiance en ajoutant les lignes suivantes à votre fichier Dockerfile :

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Pour les applications Node.js, définissez la variable d’environnement NODE_EXTRA_CA_CERTS :

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Pour Python ou d’autres langages s’appuyant sur le magasin d’autorité de certification du système, sur les images Debian ou Ubuntu, ajoutez les variables d’environnement suivantes :

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Pour Python ou d’autres langages s’appuyant sur le magasin d’autorité de certification du système, sur les images basées sur CentOS ou Fedora, ajoutez les variables d’environnement suivantes :

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

Éviter un comportement inattendu quand les images changent

Quand votre application est redémarrée ou fait l’objet d’un scale-out, la dernière image est toujours extraite. Si l’image a été modifiée, les instances d’application nouvellement démarrées utilisent la nouvelle image tandis que les anciennes instances vont continuer d’utiliser l’ancienne image.

Remarque

Évitez d’utiliser l’étiquette latest ou remplacez l’image sans modification de l’étiquette pour éviter un comportement inattendu de l’application.

Éviter de ne pas être en mesure de se connecter au registre de conteneurs dans un réseau virtuel

Si vous avez déployé l’instance sur un réseau virtuel, veillez à autoriser le trafic réseau vers votre registre de conteneurs dans le groupe de sécurité réseau ou dans Pare-feu Azure (s’il est utilisé). Pour plus d’informations, consultez Responsabilités du client pour l’exécution dans un réseau virtuel pour ajouter les règles de sécurité nécessaires.

Installer manuellement un APM dans l’image

Les étapes d’installation varient selon les analyses de performances des applications (APM) et les langues. Les étapes suivantes concernent New Relic avec des applications Java. Vous devez modifier le fichier Dockerfile en effectuant les étapes suivantes :

  1. Téléchargez et installez le fichier de l’agent dans l’image en ajoutant ce qui suit au fichier Dockerfile :

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Ajoutez les variables d’environnement requises par l’APM :

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Modifiez le point d’entrée de l’image en ajoutant : java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Pour installer les agents pour d’autres langages, reportez-vous à la documentation officielle des autres agents :

New Relic :

Dynatrace :

AppDynamics :

afficher les journaux d’activité du conteneur.

Pour visualiser les journaux de console de votre application conteneur, la commande CLI suivante peut être utilisée :

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

Pour visualiser les journaux des événements de conteneur à partir d’Azure Monitor, entrez la requête :

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

Capture d'écran d'Azure Monitor qui affiche le journal des événements du conteneur.

Analyser votre image à la recherche de vulnérabilités

Nous vous recommandons d’utiliser Microsoft Defender pour le cloud avec ACR pour éviter que vos images soient vulnérables. Pour plus d’informations, consultez Microsoft Defender pour le cloud.

Basculer entre le déploiement JAR et le déploiement de conteneurs

Vous pouvez changer de type de déploiement (d’un déploiement JAR en un déploiement conteneur) directement en redéployant avec la commande suivante :

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

Ou inversement :

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

Créer un autre déploiement avec un déploiement JAR existant

Vous pouvez créer un autre déploiement en utilisant un déploiement JAR existant avec la commande suivante :

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

L’automatisation des déploiements en utilisant des tâches Azure Pipelines ou GitHub Actions est désormais prise en charge. Pour plus d’informations, consultez Automatiser les déploiements d’applications dans Azure Spring Apps et Utiliser CI/CD Azure Spring Apps avec GitHub Actions.

Étapes suivantes