L’industrie est en constant changement les volumes traités sur Internet sont maintenant immense. Être capable de réagir à ces changements n’est pas facile.
Dans cette suite d’articles, nous allons voir comment adopter certains outils et bonnes pratiques pour nous faciliter les changements que connaît le web. En utilisant les services fournis par Amazon nous avons la possibilité de mettre en place les principes clés d’une gestion efficacement de notre infrastructure et de construire un processus de gestion du cycle de vie de notre application.
Dans cet post, nous allons aborder certains de ces principes :
- réfléchir en terme de Cloud et non en termes de structure
- adopter la culture Devops
- déployer sur AWS en respectant les bonnes pratiques du Devops
La mise en place d’un data center est quelque chose de très lourd et de très coûteux. Quand on déploie sur le Cloud nous n’avons pas à gérer les différentes problématiques liées à la gestion d’une si grande structure (Personnel de sécurité, refroidissement, Groupe électrique de secours etc).
L’avantage du Cloud est que nous ne payons que les ressources dont nous avons besoin sur une durée utile. Quand le trafic augmente nous pouvons augmenter les ressources et quand de trafic diminue diminuer les ressources.
Les différents types de service cloud:
IaaS : Infrastructure en tant que service c’est la couche fondamentale sur laquelle tous les services du Cloud sont construits il offre une combinaison de process de mémoire de stockage et de réseau. Les entités de type IaaS que l’on peut trouver sont les machines virtuelles les équipements réseau de type load-balancer les interfaces Ethernet virtuel le stockage etc. Cette couche est très proche du hardware.
PaaS : Plateforme en tant que service, c’est sur cette couche que les choses deviennent intéressantes avec le Cloud quand on construit une application nous avons besoin de certains composants comme le stockage les queues. cette couche nous fournit un nombre d’applications prêtes à l’emploi pour nous aider à construire nos propres service sans se soucier de l’administration du système des services tiers comme les bases de données.
Saas : Software en tant que service, cette couche est le glaçage de notre gâteau elle est similaire à la couche PaaS mais elle fournit des solutions prêtes à l’emploi pour la gestion des ressources ou le monitoring par exemple.
Adopter une culture DevOps:
Le DevOps est un nouveau mouvement qui est apparue en 2009 quand un groupe de personnes ont organisé une conférence pour parler de certains concepts agile et comment l’appliquer à une infrastructure.
La méthodologie Agile à transformer la manière de développer. Dans une approche traditionnelle l’équipe métier vient avec des spécifications, l’équipe design définit une certaine expérience utilisateur, l’équipe des développeurs commence l’implémentation et fournit le résultat à l’équipe de qualification qui va tester et s’assurer que le code fourni est correct et s’accorde avec les spécifications attendues. quand tous les bugs sont fixés une équipe se charge de construire un paquet qui est fourni à l’équipe d’exploitants qui se charge de déployer sur la production et de surveiller l’application. Cependant la complexité du cycle de développement de certaines applications on démontré la limite de ce système de déploiement.
Il était temps donc de moderniser le cycle de vie de l’application c’est là que le mouvement DevOps à commencé à repenser les interactions entre le développeur et l’exploitants.
Dans une culture non DevOps les développeurs développent de nouvelles fonctionnalités maintiennent le code existant et peuvent être recontactés si le code n’est pas conforme, leur motivation est de livrer le plus vite possible. D’un autre côté l’exploitant est en charge de maintenir la disponibilité de la production pour ces équipes le changement c’est le diable . Le développement de nouvelles fonctionnalités et services augmente le risque de panne et pour eux il est indispensable de changer avec précaution.
Pour effectuer le déploiement l’exploitant prévoit l’opération à l’avance afin de préparer ses environnements, une maintenance et aussi mise en place ce qui veut dire que ce type de changement ne peut être fait qu’un nombre très limité de fois, malheureusement ce type de déploiement est en général infructueux et cela pour les raisons suivantes:
- la taille du code modifié et des fonctionnalités ajoutés sont plus importantes quand il n’y a que quelques déploiements de prévus par an ce qui augmente le risque que le déploiement échoue.
- la différence entre les environnements de développement et les environnements de production.
- la communication entre les équipes de développeurs et d’exploitants peut contenir des incompréhensions.
Les caractéristiques d’une culture DevOps:
Les principes d’unee culture Devops peuventt se résumer en trois points :
- le contrôle des sources : Avant le DevOps seul le code était vérifié, à présent tous dois être vérifié incluant la configuration, les tests, la documentation et l’automatisation de la mise en place de la structure nécessaire pour le déploiement de l’application sur tous les environnements. Tout cela se fait à travers un processus de révision pour chaque modification même mineure.
- Tous automatiser : Automatisation des tests en intégrant les tests unitaires lors du développement et cela devient la responsabilité du développeur de mettre en place des tests pour chaque nouvelle fonctionnalité ajouter. Tous doit être testé test unitaire test d’intégration test de l’interface graphique test système. Automatisation de la mise à disposition de l’infrastructure et de sa configuration Automatisation du déploiement
- Tous mesurer : le nombre de build par jour pousser en production, combien de temps prends un rollback en production, pourcentage de couverture du code « code coverage », performance de l’application, fréquence des pannes, temps moyen des pannes etc.
Déployer sur AWS:
AWS et la tête de file des fournisseurs du Cloud, ils ont commencé par SQS et EC2 pour devenir rapidement le plus grand fournisseur d’infrastructures en tant que service Iaas. Ils possèdent la plus grande infrastructure le plus gros écosystème et le plus grand nombre de fonctionnalités et nouveaux services. Les services Amazon sont comme des Lego si on a une vision précise de notre produit final et de son infrastructure nous pouvons explorer les différents services et commencer à les combiner pour atteindre notre objectif.
Comment AWS s’accorde avec la culture DevOps:
Avoir une culture Devops a donc pour but principal de briser les séparations entre les equipes de developpeur et d’exploitant, et de mettre en place des outils pour respecter les bonnes pratiques.
AWS fournit plusieurs services pour mettre en place cette une architecture Devops par exemple:
- EC2 pour la création de machines virtuelle.
- Auto dimensionnement des notre infra
- des conteneurs de type on docker via ECS
- des fonctions servless ne nécessitant pas de s’exécuter sur une instance particulière ou une VM (AWS Lambda)
Pour le CI/CD nous avons:
- S3 service de stockage d’objets, qui nous permettra de stocker nos artifacts.
- CodeBuild : nous permettra de tester notre code
- CodeDeploy : nous permettra de déployer nos artifacts sur les instancesEC2
- CodePipeline : permet d’orchestrer le build le teste et le déploiement sur les environnements
- Pour superviser et mesurer tout cela nous aurons besoin de CloudWatch et plus tard de ElasticSearch/Kibana pour collecter indexer et visualiser les métriques et les logs. Pour envoyer les emails d’alerte nous aurons besoin du service SNS.
- Pour la gestion des environnements nous aurons besoin de CloudFormation qui permet de créer des templates d’une infrastructure
- Pour l’aspect sécurité nous avons Inspector et Trusted Advisor, IAM et VPC
Pour utiliser l’ensemble de ses services nous avons besoin d’un compte sur AWS.
Nous pourrons par la suite accéder à AWS de trois manières CLI, Console Web ou à travers différent SDK (JAVA, Python, JavaScript, .NET, PHP, Ruby Go, C++) tout cela pour gérer notre infrastructure AWS.