Mettre à l’échelle avec la sécurité, la surveillance et l’automatisation de bout en bout

Lors de la conception d’applications, nous devons déterminer comment s’adapter aux modifications de la charge de travail, récupérer après des défaillances inattendues, réduire les risques de sécurité, et ainsi de suite. Bien que l’on puisse commencer par une approche d’essai et d’erreur, cela prend du temps loin d’autres objectifs organisationnels et pourrait affecter notre réputation. Azure fournit des conseils architecturaux nécessaires pour obtenir des éléments directement à partir du début. Vous avez également tout ce dont vous avez besoin pour créer une application évolutive , de la sécurité et de la mise à l’échelle automatique à la prise en charge des services pour les données, la messagerie, la mise en cache, la supervision des performances et l’automatisation. La plupart de ces services de prise en charge sont basés sur des logiciels open source populaires, tels que PostgreSQL, Redis, JMS et Kafka, de sorte que vous ne soyez pas verrouillé dans des solutions propriétaires.

Diagramme avec le titre « Services de plateforme » et les logos des services décrits dans cet article.

Examinons à présent certains services et fonctionnalités Azure clés, ainsi que la façon dont vous pouvez les utiliser pour créer des applications Java évolutives.

Étendre les fonctionnalités des applications Java - bases de données et messagerie

En plus de fournir plusieurs options d’exécution de votre code Java, Azure offre un large éventail de services entièrement managés pour prendre en charge vos besoins de base de données, notamment Azure Database pour PostgreSQL, Azure Database pour MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database et Azure SQL Managed Instance. Il en va de même pour la messagerie, avec des options qui incluent Azure Service Bus, Azure Event Hubs et Apache Kafka pour Confluent Cloud.

Le niveau Premium Azure Service Bus prend en charge JMS, le modèle de programmation du service de messagerie Java. Que vos applications s’exécutent sur des machines virtuelles, dans Kubernetes ou sur des services PaaS complètement managés, vous pouvez approvisionner et utiliser rapidement ces services de données et de messagerie entièrement managés à l’aide de clients open source, de kits sdk Java Azure, de Spring starters et d’intégrations de serveurs d’applications. Ils fournissent tous les garanties de conformité, de disponibilité et de fiabilité que vous attendez de Microsoft et d’Azure. De nombreux développeurs Java et Spring souhaitent utiliser des bibliothèques idiomatiques pour simplifier les connexions à leurs services cloud préférés. Microsoft gère une liste complète des bibliothèques, pilotes et modules qui vous permettent d’interagir facilement avec les services Azure entre les données, la messagerie, le cache, le stockage, les événements, l’annuaire et la gestion des secrets. Pour plus d’informations, consultez le guide du développeur Spring Cloud Azure.

Diagramme qui répertorie les fonctionnalités d’Azure Spring Cloud et des services Azure associés.

Diagramme montrant les catégories de fonctionnalités et les services de plateforme Azure associés pris en charge par diverses bibliothèques, pilotes et modules Spring Java.

Confiance zéro - Réseau sécurisé

Vous pouvez sécuriser vos applications Java en les déployant dans un Réseau virtuel Azure , le bloc de construction fondamental de vos propres réseaux privés dans Azure. Les réseaux virtuels permettent à de nombreux types de ressources Azure de communiquer en toute sécurité entre elles, avec Internet et avec vos réseaux et systèmes locaux. Vous pouvez utiliser un réseau virtuel pour isoler vos applications et prendre en charge les services principaux à partir d’Internet et les placer sur vos réseaux privés. Vous pouvez prendre le contrôle total de l’entrée et de la sortie pour vos applications et systèmes back-end.

Diagramme de l’architecture de référence Azure Spring Apps.

Confiance zéro - Sécuriser les communications de bout en bout

L’implémentation de communications sécurisées dans le cadre d’une architecture de solution peut être difficile. De nombreuses entreprises font pivoter manuellement leurs certificats ou créent leurs propres solutions pour automatiser l’approvisionnement et la configuration. Même ensuite, il existe toujours des risques d’exfiltration des données, tels que la copie non autorisée ou le transfert de données.

Avec Azure, vous pouvez sécuriser les communications de bout en bout ou mettre fin à la sécurité au niveau du transport à n’importe quel point de communication. Vous pouvez également automatiser l’approvisionnement et la configuration pour toutes les ressources Azure nécessaires à la sécurisation des communications. Pour voir comment il fonctionne pour Azure Spring Apps, consultez communications sécurisées de bout en bout pour les applications Spring Boot , dans Confiance Zéro environnement. Le processus est similaire pour les autres services de calcul Azure que vous pouvez utiliser pour exécuter vos applications Java.

En fonction du principe « jamais confiance, toujours vérifier et sans informations d’identification », Confiance Zéro permet de sécuriser toutes les communications en éliminant les certificats inconnus et non managés, et en faisant confiance uniquement aux certificats partagés en vérifiant l’identité avant d’accorder l’accès à ces certificats. Vous pouvez utiliser n’importe quel type de certificat TLS/SSL, y compris les certificats émis par une autorité de certification, les certificats de validation étendus, les certificats génériques carte avec prise en charge de n’importe quel nombre de sous-domaines ou de certificats auto-signés pour les environnements de développement et de test.

Les applications Java ou Spring Boot peuvent charger en toute sécurité des certificats à partir d’Azure Key Vault (décrit ci-dessous). Avec Azure Key Vault, vous contrôlez le stockage et la distribution des certificats pour réduire les fuites accidentelles. Les applications et services peuvent accéder en toute sécurité aux certificats à l’aide d’identités managées, de contrôle d’accès en fonction du rôle et du principe du privilège minimum. Ce chargement sécurisé est alimenté à l’aide du fournisseur JCA (Java Cryptography Architecture) Azure Key Vault.

Diagramme de l’architecture pour les communications de bout en bout sécurisées pour les applications Spring Boot.

Confiance zéro - Gérer les secrets

De nombreuses applications Java se connectent aux services de prise en charge à l’aide d’URL et d’informations d’identification , qui, si elles sont exposées, peuvent être utilisées pour obtenir un accès non autorisé aux données sensibles. L’incorporation de ces informations dans une application elle-même présente un risque de sécurité énorme pour de nombreuses raisons, notamment la découverte via un référentiel de code. De nombreux développeurs externalisent ces informations d’identification à l’aide de variables d’environnement, afin que plusieurs applications puissent les charger, mais cela déplace uniquement le risque du code lui-même vers l’environnement d’exécution.

Diagramme avec le titre « Confiance Zéro - gérer les secrets à l’aide d’Azure Key Vault » et y compris un résumé des fonctionnalités décrites dans cette section.

Azure Key Vault offre un moyen plus sûr, plus sûr et plus sûr de protéger les secrets. Il vous donne un contrôle total sur le stockage et la distribution des secrets d’application, à l’aide du contrôle d’accès en fonction du rôle (RBAC) et du principe du moindre privilège pour limiter l’accès. Vous conservez le contrôle sur vos secrets d’application : accordez simplement l’autorisation à vos applications de les utiliser en fonction des besoins. Au démarrage de l’application, avant d’accorder l’accès aux secrets, l’application s’authentifie auprès de Microsoft Entra ID et Azure Key Vault autorise l’utilisation d’Azure RBAC. Azure Key Vault inclut des fonctionnalités d’audit complètes et a deux niveaux de service : Standard, qui chiffre avec une clé logicielle et un niveau Premium, qui inclut des clés protégées par le module de sécurité matériel (HSM).

Authentification et autorisation de l’utilisateur final

La plupart des applications Java d’entreprise nécessitent l’authentification et l’autorisation des utilisateurs, que vous pouvez implémenter à l’aide de l’ID Microsoft Entra , une solution complète de gestion des identités et des accès avec une sécurité intégrée. Les comptes d’utilisateur final peuvent être des identités organisationnelles ou des identités sociales à partir de Facebook, Twitter ou Gmail à l’aide de Microsoft Entra ID et d’Azure Active Directory B2C. Vous pouvez implémenter des solutions basées sur l’ID Microsoft Entra à l’aide de la bibliothèque d’authentification Microsoft pour Java ou Spring Boot Starter pour Microsoft Entra. Vous pouvez également utiliser n’importe quel fournisseur d’identité de votre choix, tel que ForgeRock, Auth0, Ping ou Okta.

Monitorer de bout en bout

Avec Azure, vous pouvez surveiller vos applications Java de bout en bout à l’aide de n’importe quel outil et plateforme. Vous pouvez également implémenter une supervision native entièrement managée, y compris l’analyse des performances des applications (APM) à l’aide d’Application Recommandations, une fonctionnalité d’Azure Monitor. Il offre une prise en charge forte pour Java, Spring et les frameworks tels que Micrometer et Spring Boot, ce qui vous permet d’identifier et de résoudre rapidement les problèmes. Les fonctionnalités incluent la diffusion en continu des métriques en direct, le suivi du temps de demande et le suivi des temps de réponse, le suivi des événements et les taux de dépendance externes. Tout ce dont vous avez besoin pour surveiller la disponibilité, les performances, la fiabilité et l’utilisation de vos applications Java s’exécutant sur Azure ou localement.

Vous pouvez surveiller de bout en bout en agrégeant les journaux et les métriques dans Log Analytics, un outil dans le Portail Azure, qui peut être utilisé pour modifier et exécuter des requêtes sur les journaux et les données de métriques dans Azure Monitor. Vous pouvez écrire une requête qui retourne un ensemble d’enregistrements, puis utiliser Log Analytics pour trier, filtrer et analyser ces enregistrements. Vous pouvez également écrire une requête plus avancée pour effectuer une analyse statistique et visualiser les résultats dans un graphique, comme cela peut être nécessaire pour identifier une tendance particulière. Que vous utilisiez les résultats de vos requêtes de manière interactive ou que vous les utilisiez avec d’autres fonctionnalités Azure Monitor telles que les alertes de requête de journal ou les classeurs, Log Analytics est un bon outil à utiliser pour écrire et tester vos requêtes.

Cela dit, nous sommes conscients que les clients qui apportent leurs applications Java à Azure peuvent continuer à utiliser les mêmes outils APM qu’ils utilisent pour surveiller leurs applications locales. Pour prendre en charge cette utilisation, nous avons collaboré avec New Relic, AppDynamics, Dynatrace et Elastic pour intégrer leurs solutions de supervision à Azure App Service et Azure Spring Apps. Les agents de surveillance s’exécutent côte à côte avec votre code, et nous installons et maintenons les agents mis à jour pour vous. Lorsque vous effectuez un déploiement sur Azure Container Apps, Azure Kubernetes Service ou Machines Virtuelles, vous pouvez exécuter l’un de ces agents (y compris New Relic, AppDynamics, Dynatrace, Elastic et Datadog) en même temps que vos applications, mais vous devez les installer et les gérer eux-mêmes. De même, vous pouvez surveiller de bout en bout en agrégeant les journaux et les métriques dans Elastic et Splunk.

Diagramme avec le titre « Surveiller de bout en bout à l’aide de n’importe quel outil et plateforme », un exemple de capture d’écran et des logos pour les outils décrits dans cet article.

Nous sommes également conscients que de nombreux clients souhaitent continuer à utiliser Grafana pour interroger, visualiser, alerter et comprendre leurs métriques. C’est pourquoi nous avons collaboré avec Grafana Labs pour fournir à Azure Managed Grafana un service entièrement managé qui permet aux clients d’exécuter Grafana en mode natif sur Azure. Le service facilite le déploiement d’instances Grafana sécurisées et évolutives et les connecte à des sources de données open source, cloud et tierces pour la visualisation et l’analyse. Le service est optimisé pour les sources de données natives Azure telles qu’Azure Monitor et Azure Data Explorer, et inclut des intégrations de surveillance des performances des applications (APM) à des services de calcul Azure tels qu’Azure App Service, Azure Spring Apps, Azure Kubernetes Service, Splunk, Datadog et Azure Machines Virtuelles.

Accélérer les applications Java à l’aide de la mise en cache

À mesure que les charges de travail de vos applications Java augmentent, vous pouvez augmenter les performances en utilisant Azure Cache pour Redis pour implémenter une couche de mise en cache en mémoire pour les résultats des requêtes, les états de session et le contenu statique. Il s’agit d’un excellent moyen d’améliorer le débit de l’application et de réduire la latence sans avoir à réarchitecturer votre base de données sous-jacente. Azure Cache pour Redis niveaux Entreprise, développés en partenariat avec Redis et entièrement gérés par Microsoft, est l’option de déploiement la plus hautement disponible et évolutive pour l’exécution de Redis sur Azure, notamment des fonctionnalités telles que la géoréplication active, la gestion des sessions externalisées et la recherche et l’indexation à grande vitesse.

Diagramme avec le titre « Accélérer et mettre à l’échelle des applications Java avec le Cache Redis » et y compris un résumé des fonctionnalités décrites dans cette section.

Mise à l’échelle automatique

Tous les services « calcul » Azure pour l’exécution d’applications Java prennent en charge la mise à l’échelle automatique (mise à l’échelle automatique), ce qui peut vous aider à optimiser l’efficacité des coûts et à s’adapter à la modification des charges de travail sans payer pour plus de capacité que nécessaire. Une fois activé, vous pouvez vous assurer que la mise à l’échelle automatique s’occupe de votre infrastructure sous-jacente et de vos charges de travail d’application.

Diagramme avec l’en-tête « Augmenter l’utilisation des applications avec mise à l’échelle automatique » et inclure un résumé des fonctionnalités décrites dans cette section.

Vous pouvez effectuer automatiquement un scale-in ou un scale-out en fonction de la charge ou de la planification. En mode charge (ou basé sur des métriques), vos applications sont mises à l’échelle horizontalement vers les ressources nécessaires pour gérer la charge, jusqu’aux limites que vous définissez. De même, lorsque la charge diminue, les ressources sont mises à l’échelle horizontalement et ne tombent jamais en dessous des minimums que vous définissez.

En mode planifié, vos applications sont mises à l’échelle et mises à l’échelle en fonction d’une planification et d’une limite définies. Le mode basé sur la planification est utile pour les charges de travail qui suivent un modèle prévisible et peuvent être utilisées pour établir une base de référence pour une mise à l’échelle plus basée sur la charge.

Automatisation de l’idée à la production

Au fur et à mesure que vous déplacez vos applications vers le cloud, vous souhaitez automatiser tout, le cas échéant pour le développement Java à l’échelle de l’entreprise. Vous devez envisager la mise à l’échelle automatique pour traiter les charges de travail d’application, comme indiqué précédemment. Toutefois, vous devez également mettre à l’échelle et automatiser votre environnement cloud dans son ensemble , idéalement de l’idée à la production, notamment la façon de provisionner rapidement de nouveaux environnements pour les tests, l’assurance qualité, la production, les déploiements bleus/verts, l’expansion géographique, et ainsi de suite.

Diagramme montrant des zones pour les catégories Provision, Build et Deploy avec les logos associés pour les outils décrits dans cette section.

Azure vous permet d’automatiser de l’idée à la production à l’aide d’un large éventail d’outils et de plateformes. À un niveau élevé, ces pipelines d’automatisation peuvent être divisés en trois catégories :

  • Pipelines d’approvisionnement : vous pouvez provisionner des ressources Azure à l’aide de Terraform, de modèles Azure Resource Manager (ARM), de modèles Bicep ou d’Azure CLI, si nécessaire pour créer des scripts reproductibles pour les environnements de rotation et d’épinglage cohérents.

  • Créer des pipelines : basés sur des outils tels que Maven ou Gradle, comme décrit précédemment dans cette documentation.

  • Pipelines de déploiement : vous pouvez utiliser GitHub Actions, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines ou Azure CLI pour automatiser les déploiements de code, y compris les déploiements bleu/vert qui conservent les systèmes critiques en production lorsque vous déployez des mises à jour de code.

Continuer à utiliser les pratiques et systèmes existants

Lorsque vous migrez ou générez et mettez à l’échelle vos applications Java sur Azure, vous pouvez utiliser vos investissements existants dans la mise en réseau, la supervision, l’automatisation, les fournisseurs d’identité, les systèmes locaux, le développement et la génération d’outils et les bibliothèques d’applications. Le tableau suivant fournit quelques exemples :

Catégorie Produits et services de l’écosystème Java
Mise en réseau F5, Palo Alto, Csf, Checkpoint, Infoblox
Surveillance New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Automation GitHub Actions, Azure Pipelines, Jenkins, GitLab
Fournisseurs d’identité Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta
Système local Bases de données (comme Oracle DB ou IBM DB2), messagerie (telles qu’IBM MQ ou TIBCO EMS), événements (tels que Kafka), répertoires (tels que Microsoft Entra ID, OpenLDAP ou IBM ID)
Outils de développement IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Architectures de référence

Le Centre d’architecture Azure fournit des conseils pour créer des solutions sur Azure à l’aide de modèles et de pratiques établis, notamment comment mettre ces fonctionnalités à utiliser. Ces architectures de référence sont basées sur ce que nous avons appris à partir des engagements des clients, en tenant compte de l’optimisation des coûts, de l’excellence opérationnelle, de l’efficacité des performances, de la fiabilité, de la scalabilité, de la sécurité, de la surveillance, des tests de fumée, etc. Ils traitent également des composants de conception de solution tels que les zones d’atterrissage Azure , les environnements pour héberger vos charges de travail préprovisionnées via l’infrastructure en tant que code, selon les besoins pour activer les migrations d’applications Java et le développement greenfield à l’échelle de l’entreprise.

Par exemple, voici un accélérateur de zone d’atterrissage pour Azure Spring Apps, montrant comment implémenter une conception hub-and-spoke dans laquelle Azure Spring Apps est déployé dans un seul spoke dépendant des services partagés hébergés dans le hub. Ce projet est conçu avec des composants pour atteindre les principes du Microsoft Azure Well-Architected Framework. Pour explorer une implémentation de cette architecture, consultez le référentiel Azure Spring Apps Landing Zone Accelerator sur GitHub. Vous pouvez appliquer la même approche à toutes les applications Java déployées sur n’importe quelle destination « calcul » Azure, telle qu’Azure App Service, Azure Container Apps ou Azure Kubernetes Service. En outre, si vous envisagez de migrer des applications Java existantes vers Azure, nous disposons d’un ensemble complet de guides de migration et de stratégies recommandées.

Diagramme avec le titre « Mettre à l’échelle avec la sécurité, la surveillance et l’automatisation de bout en bout » et les logos des outils décrits dans cet article.

Étape suivante

Choisir les services Azure appropriés pour vos applications Java