cloud public AWS scalabilité et Devops

Infrastructure scalable et déploiement automatisé pour l’IoT sur AWS – retour d’expérience avec une startup de l’Agritech

Une start-up a par définition un objectif de croissance hors norme ; quand elle opère dans l’IoT, c’est encore amplifié par la multiplication exponentielle des objets connectés et des données à traiter: x 100, x 1000 par an. Disposer d’une infrastructure scalable capable de suivre ce rythme est un enjeu majeur.

Il était une fois une start-up spécialisée dans l’IoT dans le domaine agricole. Elle propose une application d’aide à la décision pour les agriculteurs qui s’appuie sur des capteurs connectés positionnés sur les lieux de culture. Cet article présente comment cette start-up, accompagnée par alfa-safety, a déployé pour soutenir sa très forte croissance, une nouvelle plateforme qui répondait à tous ses objectifs opérationnels:

  • Une infrastructure scalable sur AWS pour accompagner la très forte croissance des volumes,
  • Le déploiement automatisé de l’application pour plus d’agilité,
  • Un déploiement automatisé des moyens d’infrastructure, en Infrastructure as a Code, pour déployer rapidement des environnements tout en les sécurisant,
  • Un budget optimisé et proportionnel à son activité.

Notre client et ses objectifs

Notre client édite une solution SaaS d’aide à la décision à destination des agriculteurs. Cet outil exploite notamment les données de capteurs qu’elle produit et placés dans les champs de l’agriculteur. Ces capteurs remontent plusieurs types de données comme la pluviométrie, la température de l’air, l’humidité du sol… qui sont traitées par l’application pour fournir des graphiques d’évolution et des recommandations d’actions. La société développe sa propre plateforme logicielle assurant le stockage et le traitement des données envoyées par les capteurs et la mise à disposition des informations au client final via une interface web.

Les données sont remontées des capteurs via le réseau Sigfox puis stockées dans une base de données pour ensuite être exploitées par l’application. Jusque là, la configuration était déployée sur serveur physique avec les inconvénients de ce type de configuration.

Les objectifs

L’équipe souhaitait donc évoluer vers une nouvelle infrastructure avec pour objectifs :

  • La scalabilité pour faire face à des pics ponctuels de connexion et à la croissance continue d’utilisation du service et des volumes de données,
  • Faciliter le déploiement au fil de l’eau de nouvelles versions de l’application
  • Simplifier l’administration et la maintenance de l’infrastructure
  • Le tout dans l’objectif budgétaire fixé.

Nos réalisations

Pour répondre à ces objectifs, les orientations ont été les suivantes :

  • Transférer l’architecture sur le Cloud Amazon Web Services,
  • Déployer l’application sous Docker avec un orchestrateur de conteneurs (Amazon Elastic Container Services – « ECS »),
  • Automatiser les déploiements des serveurs en Infrastructure as Code sous Terraform.

Une infrastructure exploitant la scalabilité automatique du cloud AWS

Chaque service de l’application est packagé dans un conteneur Docker et l’ensemble des conteneurs et géré par l’orchestrateur Elastic Container Service. ECS contrôle le déploiement et le fonctionnement des conteneurs dans un cluster d’instances EC2 gérées dans un auto-scaling group d’AWS. Nous avons donc 2 axes de scalabilité :

  • La scalabilité verticale (scale-up) en ajoutant des conteneurs supplémentaires dans un nœud du cluster, gérée par ECS
  • La scalabilité horizontale (scale-out) en ajoutant des instances au cluster, gérée par l’auto-scaling group

Chaque service est supervisé via Cloudwatch qui, sur atteinte de seuils spécifiés, déclenche via ECS, le déploiement de conteneurs supplémentaires pour ce service afin de traiter la demande additionnelle. Par défaut les conteneurs sont déployés sur les instances existantes du cluster. Ces dernières sont pilotées via un auto-scaling group qui peut déclencher le déploiement d’une ou plusieurs instances supplémentaires lorsque la charge sur les instances existantes dépasse un seuil défini.

A noter que l’utilisation d’un autre orchestrateur de conteneurs comme Rancher ou Kubernetes était possible, mais ECS a été retenu pour sa simplicité d’utilisation.

En combinant Elastic Container Service et l’auto-scaling group, l’infrastructure est parfaitement scalable. Elle permet de faire face à pic de charge ponctuel en adaptant automatiquement les ressources allouées puis en revenant au capacités standards une fois le pic passé.

Au passage, nous avons rendu les instances applicatives « stateless », les données sont stockées sur le serveur de base de données, et rien n’est conservé sur l’instance elle-même. Ainsi on peut aussi bien arrêter complètement une instance, qu’en redéployer une à la volée.

Mise en place d’un déploiement automatisé

Avec Docker et ECS, il était très simple d’automatiser le déploiement. Les équipes de développement utilisaient Circle CI comme outil d’intégration continue, il était donc logique et simple de poursuivre par une automatisation du déploiement pilotée toujours par Circle CI. Concrètement, voici comment cela fonctionne :

  • Pour déployer un nouveau conteneur, ECS se base sur la « task definition» de ce conteneur, qui  liste les paramètres de ce conteneur ainsi que l’emplacement de l’image docker à déployer.
  • Les différentes images docker de chaque conteneur sont stockées dans un dépôt Elastic Container Registry (ECR).
  • Ainsi lorsque l’équipe de développement décide de passer en production une nouvelle version de code pour un service, Circle CI va commander la mise à jour du dépôt « ECR » du service en question puis commander à « ECS » de lancer un nouveau Docker pour ce service. ECS va alors lire la « task definition » de ce service et lancer le conteneur en récupérant la dernière version de l’image Docker dans ECR. Une fois le nouveau conteneur déployé, Elastic Container Service va pouvoir supprimer le conteneur exécutant l’ancienne version du service.

 

Ainsi, la mise en production d’une nouvelle version de l’application est entièrement automatisée et se déroule sans coupure de service. L’équipe peut à présent déployer de nouvelles versions de l’application plusieurs fois par jour.

Réduction de l’administration et de la maintenance : infrastructure as code avec Terraform

Comme pour nombre de startups, l’équipe technique de notre client est restreinte, elle doit assurer à la fois la gestion de l’infrastructure et le développement logiciel, avec une priorité pour ce dernier et la livraison de nouvelles fonctionnalités. C’est pourquoi un des objectifs était également de réduire et simplifier la maintenance et l’administration de l’infrastructure, tout en passant sur 3 environnements : développement, pré-production et production.

Nous avons donc mis en place une gestion de l’infrastructure via Terraform.

Terraform est un outil d’Infrastructure as code, il nous a permis de mettre en place des fichiers de définition de l’infrastructure dans lesquels sont renseignés les composants et configurations de l’infrastructure tels que :

  • Les instances (avec les AMI utilisées pour les EC2)
  • Le réseau, security groups, tables de routage…
  • L’autoscaling group
  • La configuration du cluster ECS
  • les task definition, les ECR

Le tout est renseigné dans le fichier sous forme de code.


Extrait d’un fichier de configuration Terraform – paramètres liés à la configuration d’une instance EC2.

Ainsi, déployer l’infrastructure se fait simplement en « executant » les fichiers de configuration Terraform.
Les éléments de l’infrastructure dans le fichier sont variabilisés, ainsi il est simple de faire varier les volumétries telles que la taille et le nombre d’instances en modifiant les valeurs concernées dans le fichier. En même temps, le fichier Terraform fournit une trame descriptive complète de l’infrastructure qui permet de sécuriser les déploiements et que l’on peut versionner pour en suivre les évolutions.

Terraform offre une grande facilité de gestion pour l’équipe de notre client qui ne passe qu’un temps très réduit à déployer et modifier l’infrastructure. Les environnements sont toujours cohérents et chaque modification à apporter à l’infrastructure est simple à mettre en œuvre comme à répliquer sur les 3 environnements.

Budget optimisé

Le choix d’AWS et de l’auto-scaling ont aussi permis d’optimiser le budget tout en disposant d’une réserve de puissance importante :

  • L’infrastructure de base est peu couteuse, avec des instances de taille unitaire modérée,
  • L’auto-scaling permet d’ajouter des ressources sur des paliers qui sont peu élevés,
  • le surcoût des instances déployées par l’auto-scaling est strictement proportionnel à leur durée d’usage, quand la charge baisse, elles sont arrêtées et ne coûtent plus rien,
  • l’augmentation des coûts est proportionnelle à l’activité et au service rendu aux clients, et donc au revenu de la société.

L’ensemble de la migration, de la conception initiale jusqu’à la bascule s’est déroulé sur moins d’un mois, ce qui a aussi permis de contenir les frais de migration. Cela a été rendu possible par l’emploi de briques AWS standards et le choix dès le départ de Docker et de l’infrastructure as a code, ce qui a permis d’itérer rapidement les évolutions au cours du projet.

4 objectifs atteints : infrastructure scalable, déploiement automatisé, administration simplifiée, budget optimisé

L’infrastructure mise en place permet de répondre aux objectifs du client. Le cluster Elastic Container Service couplé à l’autoscaling group offre une grande scalabilité sur 2 axes. Le déploiement applicatif est totalement automatisé grâce à l’utilisation de Docker et ECS couplés avec Circle CI. L’ensemble de l’infrastructure est gérée via Terraform et définie dans un fichier de configuration permettant un grande facilité d’administration et d’évolution des 3 environnements. Enfin, le budget d’infrastructure s’adapte automatiquement aux variations de l’activité de la société.

Vous souhaitez en savoir plus sur les thèmes abordés dans cet article : scalabilité, déploiement continu, infrastructure as code ? Consultez notre page dédiée au DevOps.

Alfa-safety est un hébergeur infogéreur spécialisé dans l’hébergement d’applications web critiques. Nous sommes partenaires du Cloud Amazon Web Services et accompagnons nos clients dans leur découverte, expérimentation ou exploitation sur AWS. Proches des équipes de développement, nous maitrisons les méthodes et outils DevOps. Vous souhaitez en savoir plus sur nos prestations d’accompagnement sur AWS ? Consultez la page dédiée à nos prestations d’accompagnement sur AWS

Laisser un commentaire

*

Be sure to include your first and last name.

If you don't have one, no problem! Just leave this blank.