REL08-BP04 Effectuer le déploiement à l’aide d’une infrastructure immuable - Reliability Pillar

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

REL08-BP04 Effectuer le déploiement à l’aide d’une infrastructure immuable

Une infrastructure immuable est un modèle qui exige qu’aucune mise à jour, aucune application de correctifs de sécurité ni aucun changement de configuration ne se produise sur place sur les charges de travail de production. Lorsqu’un changement est nécessaire, l’architecture est intégrée à la nouvelle infrastructure et déployée en production.

Suivez une stratégie de déploiement d’infrastructure immuable pour améliorer la fiabilité, la cohérence et la reproductibilité de vos déploiements de charges de travail.

Résultat escompté : avec une infrastructure immuable, aucune modification sur place n’est autorisée pour exécuter les ressources de l’infrastructure dans le cadre d’une charge de travail. Lorsqu’une modification est nécessaire, un nouvel ensemble de ressources d’infrastructure contenant toutes les modifications nécessaires est déployé parallèlement à vos ressources existantes. Ce déploiement est validé automatiquement et, en cas de succès, le trafic est progressivement transféré vers ce nouvel ensemble de ressources.

Cette stratégie de déploiement s’applique notamment aux mises à jour logicielles, aux correctifs de sécurité, aux modifications de l’infrastructure, ainsi qu’aux mises à jour de la configuration et des applications.

Anti-modèles courants :

  • Modifications sur place des ressources d’infrastructure en cours d’exécution.

Avantages liés au respect de cette bonne pratique :

  • Cohérence accrue entre les environnements : comme il n’existe aucune différence dans les ressources d’infrastructure entre les environnements, la cohérence est améliorée et les tests simplifiés.

  • Réduction des dérives de configuration : en remplaçant fréquemment les ressources d’infrastructure à partir d’une configuration de base connue et contrôlée par les versions, l’infrastructure est réinitialisée à un état connu, testé et fiable, ce qui évite les dérives de configuration.

  • Déploiements atomiques fiables : les déploiements se terminent avec succès ou rien ne change, ce qui améliore la cohérence et la fiabilité du processus de déploiement.

  • Déploiements simplifiés : les déploiements sont simplifiés, car ils n’ont pas besoin de prendre en charge les mises à niveau. Les mises à niveau sont simplement de nouveaux déploiements.

  • Déploiements plus sûrs avec des processus de restauration et de récupération rapides : les déploiements sont plus sûrs, car la version de travail précédente n’est pas modifiée. Vous pouvez la restaurer si des erreurs sont détectées.

  • Position de sécurité améliorée : en interdisant les modifications de l’infrastructure, les mécanismes d’accès à distance (tels que SSH) peuvent être désactivés. Vous pouvez ainsi réduire les vecteurs d’attaque tout en renforçant la sécurité de votre organisation.

Niveau d’exposition au risque si cette bonne pratique n’est pas respectée : moyen

Directives d’implémentation

Automation

Lors de la définition d’une stratégie de déploiement d’infrastructure immuable, il est recommandé de recourir autant que possible à l’automatisation afin d’accroître la reproductibilité et de minimiser le risque d’erreur humaine. Pour plus de détails, voir REL08-BP05 Déployer les modifications grâce à l’automatisation et Automatisation de déploiements sûrs et sans intervention directe.

Avec l’infrastructure en tant que code (IaC), les étapes de provisionnement, d’orchestration et de déploiement de l’infrastructure sont définies de manière programmatique, descriptive et déclarative et stockées dans un système de contrôle des sources. L’utilisation de l’infrastructure en tant que code simplifie l’automatisation du déploiement de l’infrastructure et contribue à garantir l’immuabilité de cette dernière.

Modèles de déploiement

Lorsqu’une modification de la charge de travail est requise, la stratégie de déploiement d’infrastructure immuable impose le déploiement d’un nouvel ensemble de ressources d’infrastructure comprenant toutes les modifications nécessaires. Il est important que ce nouvel ensemble de ressources suive un schéma de déploiement qui minimise l’impact sur les utilisateurs. Il existe deux stratégies principales pour ce type de déploiement :

Déploiement Canary : consiste à diriger un petit nombre de vos clients vers la nouvelle version, généralement exécutée sur une seule instance de service (la version Canary). Examinez ensuite en profondeur les modifications de comportement ou les erreurs générées. Vous pouvez supprimer le trafic du Canary si vous rencontrez des problèmes critiques et faire basculer les utilisateurs vers la version précédente. Si le déploiement est réussi, vous pouvez le continuer à la vitesse souhaitée, tout en surveillant les modifications (pour éviter les erreurs), jusqu’à ce qu’il soit terminé. AWS CodeDeploy peut être configuré avec une configuration de déploiement qui permettra un déploiement canary.

Déploiement bleu/vert : semblable au déploiement Canary si ce n’est qu’un parc complet de l’application est déployé en parallèle. Vos déploiements alternent entre deux piles (bleu et vert). Une fois encore, vous pouvez faire basculer le trafic vers la nouvelle version et revenir à l’ancienne si vous rencontrez des problèmes lors du déploiement. Généralement, tout le trafic est commuté en même temps. Vous pouvez toutefois également utiliser des fractions de votre trafic vers chaque version pour modifier l’adoption de la nouvelle version à l’aide des capacités de routage DNS pondéré d’Amazon Route 53. AWS CodeDeploy et AWS Elastic Beanstalk peuvent être configurés avec une configuration de déploiement qui permet un déploiement bleu/vert.

Diagramme illustrant un déploiement bleu/vert avec AWS Elastic Beanstalk et Amazon Route 53

Figure 8 : Déploiement bleu/vert avec AWS Elastic Beanstalk et Amazon Route 53

Détection des écarts

L’écart est défini comme tout changement qui fait qu’une ressource d’infrastructure présente un état ou une configuration différent de ce qui est attendu. Toute modification de configuration non gérée va à l’encontre de la notion d’infrastructure immuable et doit être détectée et corrigée afin de garantir la mise en œuvre d’une infrastructure immuable.

Étapes d’implémentation

  • Interdisez la modification sur place des ressources d’infrastructure en cours d’exécution.

    • Vous pouvez utiliser AWS Identity and Access Management (IAM) pour spécifier qui ou quoi peut accéder aux services et aux ressources dans AWS, gérer de manière centralisée les autorisations détaillées et analyser les accès pour affiner les autorisations dans AWS.

  • Automatisez le déploiement des ressources d’infrastructure pour améliorer la reproductibilité et minimiser le risque d’erreur humaine.

    • Comme décrit dans le livre blanc Introduction au DevOps sur AWS, l’automatisation est la pierre angulaire des services AWS et est prise en charge en interne dans tous les services, fonctionnalités et offres.

    • La préintégration de votre Amazon Machine Image (AMI) peut accélérer son lancement. EC2 Image Builder est un service AWS entièrement géré qui vous permet d’automatiser la création, la maintenance, la validation, le partage et le déploiement d’une AMI Linux ou Windows personnalisée, fiable et à jour.

    • Les services qui prennent en charge l’automatisation incluent :

      • AWS Elastic Beanstalk est un service permettant de déployer et de mettre à l’échelle rapidement des applications et des services web développés avec Java, .NET, PHP, Node.js, Python, Ruby, Go et Docker sur des serveurs courants, tels qu’Apache, NGINX, Passenger et IIS.

      • AWS Proton aide les équipes de plateforme à connecter et à coordonner les différents outils dont vos équipes de développement ont besoin pour le provisionnement de l’infrastructure, les déploiements de code, la surveillance et les mises à jour. AWS Proton permet une infrastructure automatisée sous forme de provisionnement de code et de déploiement d’applications sans serveur et basées sur des conteneurs.

    • L’utilisation d’une infrastructure en tant que code facilite l’automatisation du déploiement de l’infrastructure et contribue à garantir l’immuabilité de l’infrastructure. AWS fournit des services de création, de déploiement et de maintenance programmatique, descriptive et déclarative de l’infrastructure.

      • AWS CloudFormation aide les développeurs à créer des ressources AWS de manière ordonnée et prévisible. Les ressources sont écrites dans des fichiers texte au format JSON ou YAML. Les modèles nécessitent une syntaxe et une structure spécifiques, qui dépendent des types de ressources créées et gérées. Vous créez vos ressources au format JSON ou YAML avec n’importe quel éditeur de code, vous les archivez dans un système de contrôle de version, puis AWS CloudFormation crée les services spécifiés d’une manière sûre et reproductible.

      • AWS Serverless Application Model (AWS SAM) est un cadre open source que vous pouvez utiliser pour construire des applications sans serveur sur AWS. AWS SAM s’intègre à d’autres services AWS et constitue une extension de AWS CloudFormation.

      • AWS Cloud Development Kit (AWS CDK) est un cadre de développement logiciel open source que vous pouvez utiliser pour modéliser et allouer vos ressources d’applications cloud à l’aide de langages de programmation familiers. Vous pouvez utiliser AWS CDK pour modéliser l’infrastructure d’applications avec TypeScript, Python, Java et .NET. AWS CDK utilise AWS CloudFormation en arrière-plan pour provisionner les ressources de manière sécurisée et reproductible.

      • AWS Cloud Control API introduit un ensemble commun d’API CRUDL (Create, Read, Update, Delete, and List) pour aider les développeurs à gérer leur infrastructure cloud de manière simple et cohérente. Les API courantes de Cloud Control API permettent aux développeurs de gérer de manière uniforme le cycle de vie des services AWS et tiers.

  • Mettez en œuvre des modèles de déploiement qui minimisent l’impact sur les utilisateurs.

  • Détectez les écarts de configuration ou d’état. Pour plus de détails, consultez Détection de modifications non gérées de la configuration des piles et des ressources.

Ressources

Bonnes pratiques associées :

Documents connexes :

Vidéos connexes :