Nous sommes enfin prêts à commencer la construction du nouveau site web de The Green Earth Post !
Vous êtes motivés ? Parce que l'équipe de projet l'est certainement. ;)
Un des buts de cette partie est de comprendre les fondamentaux du service AWS EC2, service qui fournit des machines virtuelles dans lesquelles nous allons installer le serveur d’API. Puis, nous verrons comment utiliser une base de données relationnelle RDS (Amazon Relational Database) pour stocker les commentaires des lecteurs. Enfin, on verra comment transformer un compartiment S3 en site web statique pour délivrer les pages du site web de The Green Earth Post.
Découvrez les bases de AWS EC2
Si vous avez suivi le cours “Découvrez le cloud avec Amazon Web Services”, vous connaissez déjà le service AWS EC2. Il y a une partie entière du cours dédiée à EC2 qui explore les fonctionnalités suivantes :
les catégories de types d’instance (instance types) ;
les types de tarification (pricing) ;
la Amazon Machine Image (AMI) ;
les groupes de sécurité (security groups) ;
le stockage par bloc avec Amazon Elastic Block Store (EBS).
C’est déjà une très bonne base, mais pour vous préparer à la certification vous aurez besoin de connaître un peu plus de détails sur EC2. C’est parti !
Types d’instances
Encore une fois, vous pouvez vous rappeler des détails sur les différents types d’instances en consultant le chapitre Démarrez votre première instance EC2 du cours de pré-requis. Voici les points clés pour la certification :
Toute question qui traite de bases de données relationnelles, non-relationnelles (NoSQL) ou de traitement transactionnel en ligne (online transaction processing, abrégé en OLTP) fait référence au type de stockage optimisé (storage optimized).
À l’opposé, si c’est une base de données stockée en mémoire (in-memory), le type d’instance est mémoire optimisée (memory optimized).
Finalement, si cela concerne des applications de calcul haute performance (High Performance Computing, abrégé en HPC), alors choisissez calcul optimisé (compute optimized).
La nomenclature des types d’instances suit un format particulier indiqué dans l’image ci-dessous :
Dans certaines situations, un développeur doit exécuter automatiquement des scripts pour installer un logiciel (par exemple le serveur d’API), lors du premier démarrage d’une instance EC2. Pour les instances Linux uniquement, le développeur peut préciser les scripts dans la section données utilisateur (user data) lors de la création d’une instance. L’instance exécutera les scripts avec l’utilisateur root.
Groupes de sécurité
Intéressons-nous aux groupes de sécurité (security groups) qui contrôlent la manière dont le trafic est autorisé vers ou depuis nos instances EC2. Ils agissent comme un firewall (pare-feu) et sont attachés à un seul VPC (Virtual Private Network) d’une région AWS. Ils peuvent être attachés à plusieurs instances.
L’image suivante montre le fonctionnement d’un groupe de sécurité.
Pour finir, voici les ports classiques et les protocoles à connaître :
22 - SSH (Secure Shell)
21 - FTP (transfert de fichiers)
22 - SFTP (transfert de fichiers sécurisé)
80 - HTTP (Web)
443 - HTTPS (Web sécurisé)
3389 - RDP (connexion à une instance Windows)
Créez et connectez-vous à une instance EC2
Vous avez vu comment créer une instance EC2 et vous y connecter depuis un terminal distant. AWS met à disposition le service EC2 Instance Connect qui permet de s’y connecter à travers la console AWS.
Pour utiliser EC2 Instance Connect, il faut configurer une règle sur le trafic entrant appliquée au groupe de sécurité, autorisant la connexion SSH.
Le serveur d’API du site de The Green Earth Post doit interagir, grâce à l’outil AWS SDK en Python, avec une base de données RDS, afin d’insérer et de récupérer les commentaires des lecteurs sur le site. Pour cela, attachons un rôle IAM à l’instance EC2 comme vu dans la première partie. Le serveur d’API peut alors extraire les informations d'identification de sécurité fournies par le rôle et récupérer les informations nécessaires pour interagir avec RDS.
Regardez comment j’installe un serveur web simple (“Hello, world”) ici :
Vous avez bien suivi ? Maintenant vous allez faire la même chose pour notre projet chez The Green Earth Post. 😉
À vous de jouer !
Le but de cet exercice est d’installer le serveur d’API dans une instance EC2 et d’y accéder depuis Internet. Pour cela, il faudra suivre la procédure suivante :
Créez un groupe de sécurité avec accès sur internet ;
Créez un rôle IAM qui doit être assumé par l’instance EC2, avec une politique qui permet de décrire les instances de bases de données RDS “DescribeDBInstances” ;
Créez une instance EC2, pour héberger le serveur d’API, avec :
une image Amazon Linux,
type t2.micro comme type d’instance,
le groupe de sécurité créé,
un profil d’instance correspondant au rôle IAM créé,
et un script que vous retrouverez dans le registre GitHub, à insérer dans la section données utilisateur ;
Vérifiez que le serveur d’API est disponible sur Internet en testant le point de terminaison /api/health.
Vous pouvez vérifier si vous l’avez fait correctement en regardant ce screencast :
Gérez un parc d’instances EC2
Pour la certification, il est important de savoir comment assurer la résilience et la disponibilité d’instances EC2. Il est commun d’avoir un parc d’instances EC2, AWS met à disposition plusieurs stratégies pour gérer ce parc.
Tarification
Quelle tarification sera la meilleure pour notre cas ?
La meilleure tarification pour The Green Earth Post est savings plan. Mais, pour cette formation, je vous propose de choisir à la demande pour ne pas vous engager à un ou trois ans. 🙃
Trois autres options sont disponibles en plus des options ci-dessus :
Instances dédiées (dedicated instances) : s'exécutent sur un matériel (hardware) dédié à un seul client, elles peuvent partager le matériel avec d'autres instances du même compte. Elles ne contrôlent pas le placement des instances contrairement aux hôtes dédiés.
Réservations de capacité à la demande (On-demand capacity réservations) : réservez de la capacité (instances) dans une AZ spécifique pour n'importe quelle durée, mais sans remise sur la facturation.
Parc d'instances Spot (spot fleet) : un ensemble d'instances Spot et éventuellement d'instances à la demande, lancé en fonction des groupes de capacités Spot (Spot capacity pools) spécifiés (type d’instance, OS, AZ, prix…). Il y a trois stratégies de lancement :
lowestPrice : sélectionner le groupe offrant le prix le plus bas ;
diversified : répartir les instances entre groupes ;
capacityOptimized : sélectionner le groupe avec une capacité optimale pour le nombre d'instances lancées.
Intéressons-nous en détail aux instances Spot qui sont souvent évoquées dans la certification, utilisées pour les traitements résistants aux pannes. La demande d’une instance Spot précise les caractéristiques (type, OS…) et si elle est persistante ou à exécuter une fois. Comme montré sur l’image suivante, le prix d’une instance Spot varie avec le temps et vous pouvez décider d'un prix maximum à payer.
AWS vous fournira une instance qui respecte toutes vos conditions et peut l'interrompre si elle en a besoin ou si le prix Spot est supérieur à votre prix maximum. Dans ce dernier cas, vous aurez une période de deux minutes pour l’arrêter (stop) ou la résilier (terminate). Vous pouvez également les arrêter (stop) ou redémarrer (start) vous-mêmes. L’image suivante indique le cycle de vie d’une demande.
Voici ci-dessous l’évolution de l’état de la demande :
Groupes de placement
AWS vous permet de décider comment répartir vos instances EC2 dans son infrastructure. Trois options s’offrent à vous :
Cluster : regroupe les instances dans un même rack (matériel physique) dans une seule AZ, permettant d’atteindre des performances réseau à faible latence, idéal pour des traitements distribuées HPC pour le Big Data. Si le rack tombe en panne, vous perdez vos instances.
Partition : répartit les instances sur différentes partitions (une partition est un ensemble distinct de racks) dans une AZ. Elle est dédiée à de grandes charges de travail distribuées et répliquées (Hadoop, Cassandra, Kafka…).
Répartition (spread) : répartit les instances sur différents racks pour réduire les risques de pannes (maximum 7 instances par groupe par AZ et jusqu’à 100 instances au total). Cette option est dédiée à des applications à risque (bases de données, serveurs web…).
Les concepts avancés
Abordons certains concepts avancés pour comprendre plus en détail le fonctionnement des instances EC2.
ENI
La connectivité réseau d’une instance EC2 est assurée par le composant Interface réseau Elastic (Elastic network interface - ENI), fourni par défaut à sa création.
EC2 Hibernation (Mettre en veille prolongée)
Cette fonctionnalité permet des démarrages beaucoup plus rapides et est très utile pour des applications qui prennent du temps à s'initialiser comme le back-end du site web.
En résumé
EC2 permet d’installer le serveur d’API du site web.
EC2 propose plusieurs fonctionnalités pour gérer :
le type d’instance,
le trafic réseau (groupes de sécurité),
la tarification,
la connectivité (ENI),
l’hibernation.
Les groupes de placement vous aident à disposer vos instances dans l’infrastructure AWS selon les besoins.
Maintenant qu’on a installé les applications sur EC2, découvrons comment assurer le stockage de vos instances !