• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • Selon l'enquête sur le rapport Accelerate State of DevOps 2019, 80% des répondants ont déclaré que l'application ou le service principal qu'ils prenaient en charge était hébergé sur une sorte de plate-forme cloud. 50% des répondants ont déclaré que leur application principale était hébergée sur le cloud public.

    Pourquoi Infrastructure as Code?

    Traditionnellement, si nous regardons en arrière lorsque vous vouliez un serveur, vous lèveriez un ticket, et quelqu'un de l'équipe des opérations créait une instance de VM ou commandait un serveur physique. Cela peut être l'utilisation de scripts, pointer et cliquer ou même une installation manuelle.

    Et puis, à chaque demande, il y aurait plus de VM, pour DNS, courrier, bases de données, etc. Et puis, il y avait des mises à jour continues des systèmes d'exploitation, des serveurs Web, des machines virtuelles Java et de tout le reste. Au fil du temps, ils avaient des configurations légèrement différentes les unes des autres (dérive de configuration) résultant en des serveurs de flocon de neige. Et quand quelque chose se cassait, c'était un défi de suivre les changements apportés.

    C'était toujours acceptable tant que les serveurs étaient peu nombreux et durables.

    Un grand changement s'est produit avec l'arrivée de service cloud des entreprises comme AWS. De nombreuses entreprises, au lieu d'investir dans du matériel et des centres de données, ont commencé à déplacer leurs applications vers le cloud. Et dans le cloud, vous pouvez déployer un serveur en quelques minutes, ce qui prenait auparavant des heures, voire des jours.

    Pour maintenir des performances et une disponibilité optimales, vous devrez peut-être déployer davantage d'instances pour répondre à la demande. Et plus tard, vous devrez peut-être les résilier pour économiser sur les coûts. Comme vous payez à l'heure, vous devrez peut-être augmenter ou réduire chaque jour. Faire cela manuellement, plusieurs fois par jour est clairement un défi.

    La capture des étapes requises pour déployer ou terminer des instances et d'autres composants d'infrastructure dans le code permet l'automatisation. L'automatisation du provisionnement du cloud et de l'infrastructure peut aider à générer de la valeur plus rapidement et de manière fiable.

    Qu'est-ce que l'infrastructure en tant que code?

    L'infrastructure en tant que code (IaC) est l'automatisation de l'infrastructure utilisant des principes et des pratiques de développement logiciel.

    L'idée est que vous traitez votre infrastructure comme un logiciel, puis que vous écrivez, testez et exécutez du code pour définir, déployer, mettre à jour et détruire votre infrastructure. Vous écrivez du code pour gérer vos serveurs, bases de données, réseaux, journaux, déploiement et configuration d'applications. Lorsque vous souhaitez apporter des modifications à votre infrastructure, vous apportez des modifications au code, vous le testez, puis vous l'appliquez à vos systèmes.

    Avantages

    L'infrastructure en tant que code offre des avantages significatifs par rapport au provisionnement manuel:

    En libre service

    L'infrastructure étant définie comme du code, l'ensemble du processus et du déploiement peut être automatisé et peut être démarré par n'importe qui dans le DevOps équipe. Les utilisateurs de l'infrastructure obtiennent les ressources dont ils ont besoin lorsqu'ils en ont besoin.

    Idempotence

    Être idempotent signifie que vous définissez l'état souhaité, et quel que soit le nombre de fois que vous exécutez le script, le résultat est le même. Il vérifie l'état actuel et l'état souhaité et n'applique que les modifications nécessaires. Cela peut être extrêmement difficile à réaliser avec des scripts bash.

    Des outils comme Ansible et Terraform ont des fonctionnalités intégrées pour rendre votre code idempotent.

    Coûts réduits

    Réduit le temps et les efforts requis pour l'approvisionnement, bien moins que l'approvisionnement manuel.

    Livraison de logiciels plus rapide

    Le provisionnement rapide de l'infrastructure pour le développement, les tests et la production vous permet de fournir des logiciels beaucoup plus rapidement. Étant donné que le processus de déploiement est automatisé, il est également cohérent et reproductible.

    Auto-documentation

    L'état de l'infrastructure est défini dans un code facilement lisible par n'importe qui.

    Contrôle de version

    Traditionnellement, les modifications des systèmes de production sont considérées comme risquées. Mais alors, le changement est inévitable. Vous devrez peut-être ajouter une nouvelle base de données lorsque vous ajoutez une nouvelle fonctionnalité. Vous devrez peut-être ajouter de nouveaux serveurs ou un nouveau stockage au cluster. L'infrastructure en tant que code réduit l'effort et le risque de modifications de l'infrastructure.

    Vous pouvez archiver vos fichiers source dans le contrôle de version, ce qui signifie que vous pouvez suivre toutes les modifications apportées à l'infrastructure et revenir rapidement à la version précédente en cas de panne.

    Validation et test

    L'infrastructure en tant que code permet de tester et d'appliquer de petits changements en continu. Comme tout est code, vous pouvez vérifier les erreurs à l'aide d'une analyse statique et de tests automatisés.

    Sécurité améliorée

    Le passage à l'infrastructure sous forme de code vous permet d'intégrer la sécurité dès le début, puis vous pouvez appliquer les modifications de manière fiable et sûre.

    Infrastructure comme outils de code

    Bien que de nombreux outils soient disponibles, en choisir un avec lequel travailler n'est peut-être pas facile. Voici quelques-unes des considérations qui pourraient vous être utiles:

    Gestion de la configuration vs outils de provisioning

    De manière générale, les outils disponibles appartiennent à deux catégories -

    • Outils de gestion de la configuration.
    • Outils de provisionnement

    Outils de gestion de la configuration

    Les outils de gestion de la configuration sont conçus pour gérer les utilisateurs, installer et gérer les logiciels et les outils sur les serveurs existants. Chef, Fantoche, Ansible, et SaltStack sont tous principalement des outils de configuration.

    Infrastructure comme outils de gestion de la configuration du code

    Vous pouvez utiliser les outils de gestion de la configuration pour installer et mettre à jour le logiciel sur les serveurs.

    Outils de provisionnement

    Terraformer, Formation NuageOpenStack Heat, quant à lui, sont des outils de provisioning, c'est-à-dire utilisés pour créer des serveurs, des serveurs de bases de données, des équilibreurs de charge, des files d'attente, des sous-réseaux, des pare-feu et tous les autres composants de votre infrastructure. Ces outils font des appels d'API aux fournisseurs pour créer l'infrastructure requise.

    Infrastructure comme outils de provisioning de code

    Infrastructure mutable vs immuable

    L'infrastructure mutable est une infrastructure qui peut être modifiée après avoir été provisionnée. Chef, Ansible, Puppet et SaltStack sont conçus pour installer ou mettre à jour le logiciel sur des serveurs existants. Cela peut se produire plusieurs fois au cours de la durée de vie d'un serveur. Après de nombreuses mises à jour, chaque serveur est susceptible d'être un peu différent des autres, entraînant une dérive de configuration. Par exemple, certaines modifications qui fonctionnent correctement sur les serveurs de test peuvent ne pas fonctionner sur les serveurs de production.

    Des outils comme Terraform et Formation Nuage sont conçus pour créer à chaque fois un nouveau serveur à partir d'une image de machine ou d'une image de conteneur. Si les serveurs doivent être mis à jour, vous les remplacez par de nouveaux serveurs. Lorsque les nouveaux serveurs sont en place, vous pouvez mettre fin aux anciens. Chaque déploiement utilise une image immuable pour créer un serveur, évitant ainsi la dérive de configuration. Cela peut être un peu lent, cependant.

    Outils impératifs vs déclaratifs

    Les outils impératifs sont similaires aux scripts. Vous listez les étapes à suivre pour arriver à l'état souhaité. Les outils déclaratifs vous permettent de spécifier l'état final, et l'outil définit les étapes pour atteindre cet état.

    Alors que Chef est avant tout un outil impératif, Ansible utilise une approche hybride et prend en charge les techniques impératives et déclaratives.

    Terraform, CloudFormation, Puppet, OpenStack Heat et SaltStack appartiennent tous à la catégorie des outils déclaratifs dans laquelle vous déclarez l'état final souhaité.

    Utiliser plusieurs outils ensemble

    Bien que chacun de ces outils puisse être utilisé seul, une approche commune consiste à les utiliser ensemble. Par exemple, vous pouvez utiliser Terraform pour créer des VPC, des sous-réseaux, des passerelles Internet, des équilibreurs de charge et des machines virtuelles, puis utiliser Ansible pour configurer et déployer des services sur ces instances.

    Conclusion

    L'infrastructure définie en tant que code offre de nombreux avantages par rapport au provisionnement manuel: elle peut être contrôlée, testée en version et conduit à un provisionnement et une livraison de logiciels plus rapides. De nombreuses organisations ont déjà commencé à adopter l'approche IaC pour construire et gérer leur infrastructure.