L’Infrastructure as Code comme accélérateur de Delivery  

Avr 20, 2021 | Archi/Big Data

Infrastructure as Code : définition

Auparavant, la gestion de l’infrastructure informatique était une tâche difficile. Les administrateurs système devaient gérer et configurer manuellement tout le matériel et les logiciels nécessaires à l’exécution des applications. Cependant, ces dernières années, les choses ont considérablement changé. Des tendances telles que le cloud computing ont révolutionné et amélioré la façon dont les organisations conçoivent, développent et entretiennent leur infrastructure informatique. De la même manière, le DevOps exige des modes de travail agiles et des workflows automatisés qui ne peuvent être atteints qu’avec une infrastructure informatique disponible en continu. Cette infrastructure est essentielle pour exécuter et tester le code développé. L’un des éléments clés de cette tendance est appelé « l’Infrastructure as Code ».

L’Infrastructure as Code, ou IaC, est un mode de configuration informatique qui permet de gérer et de fournir automatiquement l’infrastructure informatique à travers du code sans passer par des processus manuels difficiles à suivre et favorisant les erreurs.

Quels sont les avantages de l’Infrastructure as Code ?

L’Infrastructure as Code (ou IaC) est un contributeur clé pour répondre aux exigences du développement agile de logiciels. Les modifications de l’infrastructure sont effectuées à l’aide de scripts préconfigurés à une vitesse imbattable par rapport à un environnement de gestion manuelle. Dans ce contexte, peu importe que les réglages soient effectués au milieu de la nuit, le week-end ou un jour férié. Comme les erreurs de saisie et de frappe sont exclues, le risque d’erreur est réduit, en particulier en ce qui concerne les étapes administratives appelées à être fréquemment répétées. Par rapport à une administration manuelle, en plus d’une vitesse élevée et d’un faible taux d’erreurs, l’infrastructure programmée présente les avantages suivants :

Automatisation des processus

L’IaC offre la possibilité d’automatiser la majeure partie de la gestion des ressources et contribue ainsi de façon décisive à l’optimisation du cycle de développement logiciel.

Réduction des coûts/charges 

L’automatisation de la gestion de l’infrastructure permet d’économiser beaucoup de temps et d’argent pour les réinvestir avantageusement dans d’autres domaines. En effet, une gestion manuelle nécessitera de nombreux professionnels pour effectuer les tâches nécessaires à chaque étape du processus, des ingénieurs réseau aux techniciens de maintenance du matériel. Toutes ces ressources doivent être rémunérées, bien sûr, mais elles doivent aussi être gérées. Cela entraîne des frais de gestion plus élevés et rend la communication au sein de l’organisation plus complexe.

Scalabilité et disponibilité

Scalabilité et disponibilité sont garanties par la vitesse d’exécution des scripts préconfigurés en IaC. En effet, comme la configuration manuelle est si lente, les applications seraient souvent confrontées à des pics d’accès, tandis que les administrateurs système tenteraient désespérément de mettre en place des serveurs pour gérer la charge. Cela a nécessairement un impact sur la disponibilité. Si l’organisation ne disposait pas de serveurs de sauvegarde ou même de centres de données, l’application pourrait être indisponible pendant de longues périodes.

Réutilisation

Une fois que le code est écrit pour une infrastructure, il peut être exécuté à tout moment et aussi souvent que nécessaire pour mettre l’infrastructure en place. Il en va de même pour les environnements de test appelés « Sandbox » (bac à sable) pendant les phases de développement.

Monitoring et visibilité des performances

Une fois que toute l’infrastructure est mise en place, comment la surveiller pour s’assurer qu’elle fonctionne de manière optimale ? Comment déterminer exactement la cause d’éventuels problèmes au sein de notre infrastructure ? S’agit-il du réseau, du serveur ou de l’application ? Des outils comme Netreovous donnent une visibilité totale sur les performances de l’ensemble de votre infrastructure informatique. Grâce à la découverte et à la configuration automatiques des périphériques de Netreo, il est possible de s’assurer qu’il n’y aura pas d’angles morts dans l’environnement. La cartographie de la topologie de la plate-forme, la corrélation des événements et l’analyse automatisée des causes profondes permettent de déterminer exactement où un problème s’est produit.

Gestion des versions

L’Infrastructure as Code permet d’assurer la documentation et le suivi de toutes les modifications apportées à une infrastructure. L’un des avantages est la possibilité de restaurer une configuration antérieure sans difficulté.

Cohérence

Le dernier avantage est la cohérence. En effet, dans un environnement de déploiement manuel, plusieurs personnes déployant des configurations en même temps peuvent faire face à des incohérences.

Quels sont les risques ?

La réduction des coûts/charges peut s’avérer être un faux avantage. Certes, cet avantage est réel lorsque l’environnement d’Infrastructure as Code est bien programmé, mais il ne faut pas négliger l’effort nécessaire à sa conception et à sa mise en œuvre. En effet, le modèle IaC implique des changements majeurs, car à défaut de comprendre de manière exhaustive le concept d’architecture de Cloud ou de posséder le savoir-faire nécessaire en matière de langages de programmation et d’utilisation des API, il est peu réaliste de vouloir passer à une infrastructure automatisée. Il faut en effet s’attendre à des coûts relativement élevés et à un effort d’intégration important, surtout au début.

Infrastructure as Code : quel outil choisir ?

Le marché de l’IaC a atteint une certaine maturité au fil des années. Il existe une large variété d’outils, proposant différentes fonctionnalités.

Parmi les plus populaires de ces solutions, on peut citer Puppet et Chef. Puppet permet de créer rapidement de nouvelles infrastructures en fonction des besoins des clients, tandis que Chef permet la collaboration rapide entre les membres d’une équipe.

L’outil de gestion de configuration open source Ansible propose quant à lui des modules permettant d’élaborer des Infrastructures sur un grand nombre de configurations Cloud et sur site. Il est compatible SSH (linux) et WinRM (Windows) et son code est écrit en YAML.

 > À LIRE AUSSI : Découverte du Machine Learning avec Python et le Framework Ray

Parmi les autres solutions populaires, on peut citer l’outil Open Source Terraform, l’outil Open Source de gestion de configuration CfEngine, ou encore SaltStack.

Ainsi, différents critères rentrent en jeu pour choisir l’outil le plus adapté à notre besoin. Parmi ces critères on trouve l’homogénéité / hétérogénéité des outils, l’adoption du marché, la courbe d’apprentissage, le public visé … D’autant plus que les approches adoptées, et donc les usages cibles peuvent être différents d’un outil à un autre. Voilà pourquoi, nous nous intéressons tout d’abord à déterminer des indicateurs d’adoption des solutions les plus courantes sur le marché IaC.

 

Liste outils IaC

 

Orchestration, provisioning, deployment et configuration management

  • Deployment : le déploiement est le processus qui consiste à placer une nouvelle application, ou une nouvelle version d’une application, sur un serveur d’application préparé. Pour un développeur, cela peut également correspondre au processus de préparation du serveur, par exemple en installant des bibliothèques.
  • Orchestration : l’orchestration consiste à organiser ou à coordonner plusieurs systèmes. Elle signifie également « exécuter les mêmes tâches sur plusieurs serveurs à la fois, mais pas nécessairement sur tous ».
  • Provisioning : le provisioning est généralement utilisé par les opérationnels pour désigner l’obtention d’ordinateurs ou d’hôtes virtuels et l’installation des bibliothèques ou des services nécessaires sur ceux-ci. Un outil de provisionnement (comme Terraform par exemple) est alors conçu pour provisionner les serveurs lui-même (ainsi que le reste de l’infrastructure, comme les équilibreurs de charge, les bases de données, la configuration des réseaux, etc), laissant le travail de configuration de ces serveurs à d’autres outils. Le « provisionnement » implique souvent que c’est la première fois que nous le faisons.
  • Configuration management : la gestion de la configuration est un processus d’ingénierie des systèmes visant à établir et à maintenir la cohérence des performances, des attributs fonctionnels et physiques d’un produit avec ses exigences, sa conception et ses informations opérationnelles tout au long de sa vie. La gestion de la configuration se fait généralement de manière répétitive. Chef, Puppet, Ansible et SaltStack sont tous des outils de gestion de la configuration.

Différents outils d’IaC peuvent à la fois gérer la configuration mais aussi le provisionnement. L’accent mis sur le fait qu’un outil fait du provisioning ou autre signifie que cet outil sera mieux adapté à ces tâches-là.

Liste des outils Infrastructure as code

[1]

Modèles et méthodes de communication des outils IaC

On trouve principalement deux modèles de communication entre la solution IaC et ses cibles de gestion :

  • Modèles Agentless versus Agent-Based
  • Modèle Push versus Pull

Le premier critère Agentless/Agent-Based concerne la contrainte d’un approvisionnement préalable des cibles avec l’installation d’un logiciel spécifique (l’agent). Bien souvent, en conséquence des protocoles et des mécanismes sous-jacents comme DNS, NTP et TLS sont aussi des préalables qui peuvent être difficile à contrôler au regard de la solution de gestion. On peut alors considérer que l’IaC dépendra toujours d’une autre infrastructure qui n’est pas nécessairement gérée de manière aussi « agile ».

Le second critère Push/Pull concerne la direction des communications entre la solution IaC et ses cibles. Un modèle Push “pousse” les informations auprès des cibles alors qu’un modèle Pull demande aux cibles de la solution de gestion d’aller chercher leurs paramètres. [2]

Types d’approche des outils IaC

L’Infrastructure as Code connait aussi différents types d’approches :

  • L’approche Déclarative (fonctionnelle)
  • L’approche Impérative (procédurale)
  • L’approche Intelligente (en connaissance de son environnement)

Tableau des Types d'approche des outils IaC

Ainsi, l’approche déclarative repose sur une description de l’état final auquel on souhaite faire évoluer l’infrastructure : à partir de données sur l’état initial de notre infrastructure, le système planifie un certain nombre d’actions à réaliser avant de les exécuter. A contrario, l’approche impérative repose sur une définition des actions à réaliser par le système sur l’infrastructure initiale, afin d’arriver à une infrastructure cible. Enfin, l’approche intelligence, dont l’utilisation est encore minoritaire car nouvelle, se base sur l’inférence automatique d’un état cible « stable » à partir des contraintes et relations de dépendances entre les composants de l’infrastructure initiale, puis la planification et l’exécution des instructions pour y arriver.

Adoption du marché

Selon l’étude State of Cloud 2020, conduite par Flexera sur les pratiques Cloud auprès de 750 entreprises répondantes [3], il est intéressant de noter qu’Ansible prend la première place parmi les outils de configuration utilisés dans le Cloud. Cependant, Terraform affiche la plus forte croissance depuis l’an dernier en passant de 31 à 42 % d’adoption. Puppet et Chef quant à eux ont un pourcentage de 32% et 33% mais affiche une baisse par rapport à l’an précédent.

IaC configuration tools

Conclusion

Les solutions d’IaC ne sont donc pas des solutions concurrentes car elles résolvent différentes phases de déploiement d’infrastructure. Il faut alors bien choisir l’outil répondant le mieux à nos besoins quitte à combiner plusieurs outils. Le tableau suivant résume quelques éléments de comparaison entre les outils d’IaC :

Tableau comparatif d'outils comparatifs outis d'infrastructure as code

Sources : 

[1] : https://medium.com/@golibraryco/infrastructure-as-code-orchestration-provisioning-configuration-management-ansible-7cd0615e49c5

[2] : https://iac.goffinet.org/infrastructure-as-code/infrastructure-as-code-introduction/

[3] : State of Cloud 2020, conduite par Flexera sur les pratiques Cloud auprès de 750 entreprises répondantes

 

Photo d'Ayoub Yessari, consultant cloud et DevOps chez DataValue Consulting

 

Par Ayoub Yessari
Consultant Cloud et DevOps chez DataValue Consulting

 

La rédaction vous conseille

> Salesforce Maps, l’outil de géolocalisation intelligente des données

> Health Data : Industrialisation d’un graphe de connaissance sur l’oncologie et le SARS-CoV-2

Nos ressources

Livre Blanc

Mise en oeuvre d'une stratégie 
de qualité des données 

Livre Blanc

Feuille de route d'une stratégie
de Data Management 

Enquête Nationale

État des lieux du pilotage 
dans le secteur public en 2021 

Share This