
Créer une infrastructure High Available sur AWS
Introduction
Vous avez créé une application et vous l’avez déployé sur un VPS, mais vous vous rendez compte que celui-ci ne pourra pas encaisser des pics de charge ou des incidents matériels. Pour encaisser plus de traffic, vous pourriez augmenter les ressources de votre VPS (scaling vertical), mais cela reviendrait plus cher pour quelques pics de traffic dans la journée.
Notre objectif est donc de créer une infrastructure qui s'étend sur plusieurs emplacements physiques afin de résister à des incidents matériels, réseaux, électriques, etc et qui puisse s'élargir ou se rétrécir selon la charge effective.
Composants nécessaires
Pour ce tutoriel, nous allons avoir besoin de 4 composants :
- Un avec au minimum deux subnets sur deux Availability Zone différentes
- Un Template
- Un EC2 Autoscaling Group
- Un
Créer l'infrastructure réseau
La première étape est de créer notre infrastructure réseau. Pour cela, connectez-vous sur la Console AWS et sélectionnez la région de votre choix (la région devra rester la même pour toutes les étapes suivantes) :

Ensuite, rendez-vous dans VPC :

Puis cliquez sur . Les options à sélectionner sont :
- 2 Availability Zone
- 2 Public subnets
- 0 Private subnets
- Aucun VPC Endpoint
Pour le reste, vous pouvez laisser ce qui est par défaut.

Nous venons donc de créer un réseau virtuel (VPC) qui s'étend sur deux emplacements physiques (Availability Zones) au travers de deux subnets.
Créer le template EC2
Maintenant que notre infrastructure réseau est prête, nous allons pouvoir créer un template EC2. C'est ce template qui sera utilisé pour créer de nouvelles instances selon la charge.

Ensuite, nous allons nous rendre dans la section Launch Template puis cliquer sur

Sur cette page, vous allez pouvoir définir toutes les options de votre template. Attention, la plupart des champs sont optionnels, donc voici une liste de ce que vous devez penser à fournir :
- OS Image
- Instance Type
- Key pair (clé SSH vous permettant de vous connecter)
- :

- Ajouter une interface réseau et ajouter une IP publique :

- Advanced Details > User Data : Ce champ contient le script shell exécuté à la création de l'instance. Donc c'est ici que vous configurerez votre application pour qu'elle puisse tourner sur l'instance.
Une fois terminé, vous pouvez cliquer sur . Vous pouvez éventuellement tester le bon fonctionnement du template en lançant une instance:

Ensuite sélectionnez un des deux subnets créé plus tôt puis cliquez sur . Vous pouvez récupérer l'IP de l'instance sur la page de celle-ci :


Créer l’Autoscaling Group et l'Application Load Balancer
Il ne nous manque plus qu'à créer deux éléments : un Autoscaling Group et un Load Balancer. Ce sont eux les éléments principaux pour atteindre l' et l'ajustement automatisé de l'infrastructure.

Cliquez sur , sélectionnez le template créé précédemment puis cliquez sur .
Sélectionnez le VPC créé plus tôt ainsi que toutes les Availability Zones. Laissez la distribution sur Balanced best effort
À l'étape suivante, sélectionnez Attach to a new load balancer et remplissez la configuration suivante :
- Load balancer type : Application load Balancer
- Load balancer scheme : Internet-facing
- Listeners and routing → Default routing : Create a target group
Dans la section Health Checks, sélectionnez Turn on Elactic Load Balancing health checks puis cliquez sur
Dans la section Scaling, sélectionnez vos limites, puis créez une Target tracking scaling policy :

Vous pouvez ensuite cliquer sur puis .
Rendez-vous ensuite dans la section Load balancers et sélectionnez le Load Balancer créé précédemment.

Une fois que le statut sera passé sur Active, vous pourrez ouvrir le lien pour vérifier le bon fonctionnement.

Conclusion
Et voilà, vous avez maintenant une application High Available et capable de résister à des pics de charge sans vider votre portefeuille. Si vous souhaitez aller plus loin, vous pouvez :
- rendre votre application disponible dans d'autres régions et router les requêtes DNS vers la région la plus proche à l'aide de Route 53
- Mettre en place le déploiement automatique de votre application à l'aide de CodePipeline
- Utiliser quelques Spot Instances pour réduire vos frais