Évoluer avec une sécurité, une surveillance et une automatisation de bout en bout
Lors de la conception d'applications, nous devons déterminer comment nous adapter aux changements de charge de travail, récupérer en cas de défaillance inattendue, minimiser les risques de sécurité, etc. On pourrait commencer par une approche par essais et erreurs, mais cela nous fait perdre du temps par rapport à d'autres objectifs de l'organisation et pourrait nuire à notre réputation. Azure fournit les conseils architecturaux nécessaires pour bien faire les choses dès le départ. Vous disposez également de tout ce dont vous avez besoin pour créer une application évolutive, qu'il s'agisse d'une sécurité de pointe, d'une mise à l'échelle automatique ou de services de soutien pour les données, la messagerie, la mise en cache, la surveillance des performances et l'automatisation. Bon nombre de ces services de support sont également basés sur des logiciels open source populaires - tels que PostgreSQL, Redis, JMS et Kafka - afin que vous ne soyez pas enfermé dans des solutions propriétaires.
Voyons maintenant quelques services et fonctionnalités clés d'Azure - et comment vous pouvez les mettre à profit pour créer des applications Java évolutives.
Étendre les capacités des applications Java - bases de données et messagerie
En plus de fournir plusieurs options pour l'exécution de votre code Java, Azure propose une large gamme de services entièrement gérés pour répondre à vos besoins en matière de bases 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 d'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 entièrement gérés, vous pouvez rapidement provisionner et utiliser ces services de données et de messagerie entièrement gérés à l'aide de clients open source, de SDK Azure Java, de Spring starters et d'intégrations de serveurs d'applications. Ils offrent tous les garanties de conformité, de disponibilité et de fiabilité que vous êtes en droit d'attendre 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 tient à jour une liste complète de bibliothèques, de pilotes et de modules qui vous permettent d'interagir facilement avec les services Azure dans les domaines de la gestion des données, de la messagerie, du cache, du stockage, des événements, des répertoires et des secrets. Pour plus d'informations, consultez le guide du développeur Spring Cloud Azure.
Diagramme qui répertorie les fonctionnalités de Spring Cloud Azure et les services Azure associés.
Confiance zéro - Réseau sécurisé
Vous pouvez sécuriser vos applications Java en les déployant dans un réseau virtuel Azure - l'élément de base pour 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 eux, avec Internet et avec vos réseaux et systèmes locaux. Vous pouvez utiliser un réseau virtuel pour isoler vos applications et vos services backend de l'internet et les placer sur vos réseaux privés. Vous pouvez contrôler entièrement l'entrée et la sortie de vos applications et de vos systèmes dorsaux.
Diagramme de l'accélérateur Azure Container Apps Landing Zone.
Confiance zéro - Communications sécurisées de bout en bout
La mise en œuvre de communications sécurisées dans le cadre d'une architecture de solution peut s'avérer difficile. De nombreuses entreprises effectuent une rotation manuelle de leurs certificats ou construisent leurs propres solutions pour automatiser le provisionnement et la configuration. Même dans ce cas, il existe toujours des risques d'exfiltration de données, tels que la copie ou le transfert de données non autorisés.
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.
Basée sur le principe « ne jamais faire confiance, toujours vérifier, et ne pas avoir de données d'identification », la confiance zéro permet de sécuriser toutes les communications en éliminant les certificats inconnus et non gérés, et en ne faisant confiance qu'aux certificats qui sont 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 des certificats émis par une autorité de certification, des certificats de validation étendue, des certificats génériques avec prise en charge d'un nombre quelconque de sous-domaines, ou des 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 (dont il est question ci-après). Avec Azure Key Vault, vous contrôlez le stockage et la distribution des certificats pour réduire les fuites accidentelles. Les applications et les services peuvent accéder aux certificats en toute sécurité en utilisant des identités gérées, un contrôle d'accès basé sur les rôles et le principe du moindre privilège. Ce chargement sécurisé est alimenté à l'aide du fournisseur Azure Key Vault JCA (Java Cryptography Architecture).
Confiance zéro - Gestion des secrets
De nombreuses applications Java se connectent à des services d'appui à l'aide d'URL et d'identifiants - des informations qui, si elles sont exposées, pourraient être utilisées pour obtenir un accès non autorisé à des données sensibles. L'intégration 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 ne fait que déplacer le risque du code lui-même vers l'environnement d'exécution.
Azure Key Vault offre un meilleur moyen, 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, en utilisant le contrôle d'accès basé sur les rôles (RBAC) et le principe du moindre privilège pour limiter l'accès. Vous gardez le contrôle sur vos secrets d'application - il vous suffit d'accorder la permission à vos applications de les utiliser selon leurs besoins. Au démarrage de l'application, avant d'accorder l'accès aux secrets, l'application s'authentifie avec Microsoft Entra ID et Azure Key Vault autorise à l'aide d'Azure RBAC. Azure Key Vault comprend des capacités d'audit complètes et dispose de deux niveaux de service : Standard, qui chiffre avec une clé logicielle, et un niveau Premium, qui inclut des clés protégées par un module de sécurité matériel (HSM).
Authentification et autorisation des utilisateurs finaux
La plupart des applications Java d'entreprise nécessitent une authentification et une autorisation des utilisateurs, que vous pouvez mettre en œuvre à l'aide de Microsoft Entra ID - une solution complète de gestion des identités et des accès avec sécurité intégrée. Les comptes des utilisateurs finaux peuvent être des identités organisationnelles ou des identités sociales provenant de Facebook, Twitter ou Gmail à l'aide de Microsoft Entra ID et Azure Active Directory B2C. Vous pouvez mettre en œuvre des solutions basées sur Microsoft Entra ID en utilisant la bibliothèque d'authentification Microsoft pour Java ou Spring Boot Starter pour Microsoft Entra. Vous pouvez également utiliser le 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, en utilisant n'importe quel outil et n'importe quelle plateforme. Vous pouvez également mettre en œuvre une surveillance native entièrement gérée - y compris la surveillance des performances des applications (APM) - en utilisant Application Insights, une fonctionnalité d'Azure Monitor. Il offre une prise en charge solide de Java, Spring et des 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 le streaming de mesures en direct, le suivi du taux de requête et du temps de réponse, le traçage des événements et les taux de dépendance externe - tout ce dont vous avez besoin pour surveiller la disponibilité, les performances, la fiabilité et l'utilisation de vos applications Java exécutées sur Azure ou sur local.
Vous pouvez effectuer une surveillance de bout en bout en regroupant les journaux et les mesures dans Log Analytics, un outil du portail Azure, qui peut être utilisé pour modifier et exécuter des requêtes sur les journaux et les données de mesure dans Azure Monitor. Vous pouvez écrire une requête qui renvoie un ensemble d'enregistrements, puis utiliser Log Analytics pour les trier, les filtrer et les analyser. 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 travailliez avec les résultats de vos requêtes de manière interactive ou que vous les utilisiez avec d'autres fonctionnalités d'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 transfèrent leurs applications Java sur Azure pourraient vouloir continuer à utiliser les mêmes outils APM que ceux qu'ils utilisent pour surveiller leurs applications locales. Pour soutenir cette utilisation, nous nous sommes associés à New Relic, AppDynamics, Dynatrace et Elastic pour intégrer leurs solutions de surveillance à Azure App Service et Azure Container Apps. Les agents de surveillance s'exécutent parallèlement à votre code, et nous les installons et les mettons à jour pour vous. Lorsque vous déployez vers Azure Container Apps, Azure Kubernetes Service ou des machines virtuelles, vous pouvez exécuter n'importe lequel de ces agents (notamment New Relic, AppDynamics, Dynatrace, Elastic et Datadog) aux côtés de vos applications, mais vous devez les installer et les gérer par vos propres moyens. De même, vous pouvez surveiller de bout en bout en agrégeant les journaux et les mesures dans Elastic et Splunk.
Nous sommes également conscients que de nombreux clients souhaitent continuer à utiliser Grafana pour interroger, visualiser, alerter et comprendre leurs mesures. C'est pourquoi nous nous sommes associés à Grafana Labs pour proposer Azure Managed Grafana, un service entièrement géré qui permet aux clients d'exécuter Grafana en mode natif sur Azure. Le service permet de déployer facilement des instances Grafana sécurisées et évolutives et de les connecter à des sources de données open source, cloud et tierces à des fins de visualisation et d'analyse. Le service est optimisé pour les sources de données natives d'Azure comme Azure Monitor et Azure Data Explorateur, et il comprend des intégrations de surveillance des performances des applications (APM) avec les services de calcul Azure comme Azure App Service, Azure Container Apps, Azure Kubernetes Service, Splunk, Datadog et Azure Virtual Machines.
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 améliorer les performances en utilisant Azure Cache for Redis pour mettre en œuvre une couche de mise en cache en mémoire pour les résultats des requêtes, les états de session et le contenu statique. C'est un excellent moyen d'améliorer le débit des applications et de réduire la latence sans avoir à réarchitecturer votre base de données sous-jacente. Azure Cache for Redis Enterprise tiers, développé en partenariat avec Redis et entièrement géré par Microsoft, est l'option de déploiement la plus hautement disponible et la plus évolutive pour l'exécution de Redis sur Azure - incluant des fonctionnalités telles que la géo-réplication active, la gestion externalisée des sessions, ainsi que la recherche et l'indexation à grande vitesse.
Mise à l’échelle automatique
Tous les services Azure « compute » destinés à l'exécution d'applications Java prennent en charge la mise à l'échelle automatique (auto-scaling), ce qui peut vous aider à optimiser la rentabilité et à vous adapter à l'évolution des charges de travail sans avoir à payer pour une capacité supérieure à celle dont vous avez besoin. Une fois activée, vous pouvez être assuré que la mise à l'échelle automatique prend en charge votre infrastructure sous-jacente et les charges de travail de vos applications.
Vous pouvez procéder à une mise à l'échelle automatique en fonction de la charge ou de la planification. En mode basé sur la charge (ou basé sur les mesures), vos applications sont mises à l'échelle horizontalement en fonction des ressources nécessaires pour gérer la charge, jusqu'aux limites que vous avez définies. De même, lorsque la charge diminue, les ressources sont mises à l'échelle horizontalement, sans jamais descendre en dessous des minima que vous avez définis.
En mode basé sur la planification, vos applications sont mises à l'échelle et retirées en fonction d'une planification et de limites définies. Ce mode est utile pour les charges de travail qui suivent un modèle prévisible et peut être utilisé pour établir une base de référence en vue d'une mise à l'échelle davantage basée sur la charge.
Automatisation de l'idée à la production
Lorsque vous déplacez vos applications vers le cloud, vous souhaitez tout automatiser, comme l'exige le développement Java à l'échelle de l'entreprise. Vous devez envisager une mise à l'échelle automatique pour répondre aux charges de travail des applications, comme nous l'avons vu précédemment. Mais vous devez également faire évoluer et automatiser votre environnement cloud dans son ensemble, idéalement de l'idée à la production, y compris la manière de fournir rapidement de nouveaux environnements pour les tests, l'assurance qualité, la production, les déploiements bleus/verts, l'expansion géographique, etc.
Azure vous permet d'automatiser de l'idée à la production à l'aide d'une large gamme d'outils et de plateformes. À un niveau élevé, ces pipelines d'automatisation peuvent être répartis en trois catégories :
Pipelines de provisionnement - Vous pouvez provisionner les ressources Azure à l'aide de Terraform, de modèles Azure Resource Manager (ARM), de modèles Bicep ou de l'Azure CLI, selon les besoins, afin de créer des scripts reproductibles pour démarrer et arrêter les environnements de manière cohérente.
Pipelines de construction - basés sur des outils tels que Maven ou Gradle, comme indiqué précédemment dans cette documentation.
Pipelines de déploiement - Vous pouvez utiliser les actions GitHub, les pipelines Azure, les pipelines Jenkins, les pipelines GitLab ou l'Azure CLI pour automatiser les déploiements de code, y compris les déploiements bleus/verts qui maintiennent les systèmes critiques en production pendant que vous déployez des mises à jour de code.
Continuez à utiliser les pratiques et systèmes existants
Lorsque vous migrez ou construisez puis faites évoluer vos applications Java sur Azure, vous pouvez utiliser vos investissements existants en matière de mise en réseau, de surveillance, d'automatisation, de fournisseurs d'identité, de systèmes locaux, d'outil de développement et de construction, et de 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, Cloudflare, Checkpoint, Infoblox |
Surveillance | New Relic, Dynatrace, AppDynamics, Elastic, Splunk |
Automation | Actions GitHub, Azure Pipelines, Jenkins, GitLab |
Fournisseurs d’identité | Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta |
Système local | Bases de données (telles que Oracle DB ou IBM DB2), messagerie (telle que IBM MQ ou TIBCO EMS), événementiel (tel que Kafka), annuaires (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 la construction de solutions sur Azure en utilisant des modèles et des pratiques établis, y compris la façon d'utiliser ces capacités. Ces architectures de référence sont basées sur ce que nous avons appris des engagements de nos clients, en tenant compte de l'optimisation des coûts, de l'excellence opérationnelle, de l'efficacité des performances, de la fiabilité, de l'évolutivité, de la sécurité, de la surveillance, des tests de fumée, et bien plus encore. Elles abordent également des composants de conception de solutions tels que les zones d'atterrissage Azure - des environnements pour l'hébergement de vos charges de travail qui sont pré-provisionnés par le biais de l'infrastructure-as-code, selon les besoins pour permettre 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 Container Apps, qui montre comment mettre en œuvre une conception en étoile dans laquelle Azure Container Apps est déployé dans un seul rayon qui dépend de services partagés hébergés dans le hub. Ce projet est construit avec des composants permettant d'atteindre les principes du framework Microsoft Azure bien architecturé. Pour explorer une mise en œuvre de cette architecture, consultez le référentiel Azure Container Apps Landing Zone Accelerator sur GitHub. Vous pouvez appliquer la même approche à toutes les applications Java déployées vers n'importe quelle destination « compute » Azure - comme Azure App Service 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.
Étape suivante
Choisissez les bons services Azure pour vos applications Java