###### tags: `AWS` `ELB`
# <center>**AWS : Equilibreurs de charge & groupes cibles**</center>
---
## Documentation sur les sites officiels d'Amazon
[Documentation Amazon](https://docs.aws.amazon.com/)
[Blog documentation Amazon](https://aws.amazon.com/fr/blogs/aws/aws-documentation-is-now-open-source-and-on-github/)
[Documentation Amazon pour développeur](https://developer.amazon.com/fr/documentation/)
---
---
## - SOMMAIRE
**I - Introduction**
**II - Création instances**
**III - Equilibreurs de charge**
**IV - Groupes cibles**
**V - Configurer une IP élastique**
**VI - Créer un système de fichiers Amazon EFS**
**VII - Installer Apache sur les deux instances**
**VIII - Troubleshooting**
**IX - Conclusion**
---
## I - Introduction
EC2 est un service la plus connu et utilisé, qui fournit aux utilisateurs de la capacité de traitement sur demande, avec facturation à l’usage. Cette capacité de traitement est évidemment virtuelle et, par conséquent, illimitée. Tout est articulé autour de serveurs virtuels, appelés instances en terminologie AWS, qui peuvent être dynamiquement démarrées ou arrêtées.
La technologie de virtualisation n’est pas nouvelle, elle existe déjà depuis une bonne dizaine d’années. À ce jour, la plupart des organisations font tourner leurs charges de travail sur des plateformes virtuelles comme VMware, Citrix, Hyper-V ou Xen.
Chez AWS on utilise une version modifiée de Xen qui, contrairement aux autres technologies de virtualisation, a l’avantage d’être open source. Ce que l’on appelle donc image et instance en terminologie AWS ne sont rien d’autre que des machines virtuelles. Contrairement aux simples machines virtuelles, AWS a déployé des efforts importants pour concevoir et structurer ces images et instances, pour qu’elles restent légères, démarrent rapidement et soient facilement manipulées.
Une image n’est rien d’autre qu’un modèle préconfiguré servant de base pour la création d’instances. En terminologie AWS, les images sont appelées AMI (Amazon Machine Images). Chaque AMI contient un système d’exploitation équipé de différentes applications et services optionnels, par exemple des serveurs web, des serveurs d’application, etc. En ce qui concerne les systèmes d’exploitation, l’offre va des distributions Linux diverses et variées jusqu’à Windows.
Amazon Linux est un système d’exploitation très léger, basé sur la distribution RHEL (RedHat Enterprise Linux), et packagé par AWS même. Ce système d’exploitation n’existe pas comme tel, il est seulement disponible en tant qu’AMI sur AWS. Cette image est préconfigurée avec tous les utilitaires, les librairies et les outils nécessaires de manière à faciliter l’intégration avec d’autres services AWS. C’est l’AMI la plus recommandée pour être utilisée avec AWS.
Les instances ne sont rien d’autre que des machines virtuelles créées à partir d’une AMI. Chaque instance possède son propre ensemble de ressources, c’est-à-dire CPU, mémoire, stockage, réseau, différenciées en fonction du type de l’instance. C’est donc le type de l’instance qui détermine ces ressources. Chaque type d'instance inclut une ou plusieurs tailles d'instance, ce qui permet de mettre à l'échelle les ressources en fonction des exigences de la charge de travail ciblée. [Types d'instances Amazon EC2](https://aws.amazon.com/fr/ec2/instance-types/)
Le répartiteur de charges (ELB - Elastic Load Balancing) est un service AWS qui permet de distribuer le trafic réseau entrant à travers un ensemble d’instances EC2.
## II - Création instances
L'ensemble est composé de deux instances de type "t2.micro".
### 1 - Création d'une machine virtuelle
En tant qu'étudiant, il est possible d'utiliser le labs "[vocareum](https://labs.vocareum.com/main/main.php?m=editor&nav=1&asnid=14334&stepid=14335)" gratuitement sans utiliser de carte bancaire.
* Cliquer sur "Student Accesss"

* L'utilisation des ressources est limité à 30$.
Cliquer sur le bouton "AWS Console"

* Cliquer sur le bouton "Démarrez une machine virtuelle"

* Cliquer sur le bouton radio "Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0323c3dd2da7fb37d (64 bits x86)"

* Cliquer sur la case à cocher "t2.micro" puis sur le bouton "Suivant : Configurer les détails de l'instance"

* Cliquer sur le bouton "Suivant : Ajouter le stockage"

* Garder les valeurs par défaut puis cliquer sur le bouton "Suivant : Ajouter les balises"

* Cliquer sur le bouton "Suivant : Configurer le groupe de sécurité

* Réaliser les 3 actions

L'adresse IP de l'instance est "212.129.18.107/32"
* Cliquer sur le bouton "Lancer"

* Réaliser les 3 actions décrites sur l'image suivante

* Vérifier que le fichier de clé privée "ELP.pm" a bien été téléchargé

* Placer le dans un répertoire dédié

* Cliquer sur le bouton "Lancer des instances"

* Cliquer sur le bouton "Afficher les instances"

* Cliquer sur l'onglet "Se connecter"

* Après avoir choisi la méthode de connexion, "Un client SSH autonome", cliquer sur le bouton "Fermer".

### 2 - Connexion en ssh vers la machine virtuelle
La connexion s'effectue avec Putty.
* Nom de l'instance à l'aide de son DNS public
ec2-user@ec2-35-153-158-60.compute-1.amazonaws.com
* Nom de login/utilsateur
ec2-user
* CONVERTIR LE FICHIER PEM AU FORMAT PPK
PuTTY ne prend pas en charge nativement le format PEM qu'AWS utilise, vous devez donc d'abord convertir votre fichier PEM en un fichier PPK (PPK = PuTTY Private Key). Pour ce faire, vous utilisez l'utilitaire PuTTYgen. Pour démarrer l'utilitaire, vous pouvez taper puttygen dans la boîte de dialogue de démarrage de Windows:

* Dans la boîte de dialogue PuTTYgen, cliquez sur le bouton "Load", puis sélectionnez le fichier "ELB.pem" que vous avez téléchargé à partir d'AWS. Remarque: lorsque vous recherchez votre fichier pem, assurez-vous de sélectionner Tous les fichiers dans la liste déroulante située à droite du champ "Nom du fichier". PuTTYgen chargera et convertira ensuite votre fichier.
* Cliquer sur «Enregistrer la clé privée». Vous recevrez un message d'avertissement vous demandant si vous souhaitez enregistrer cette clé sans mot de passe. Assurez-vous de sélectionner "Oui".
* Donner un nom à votre fichier ppk et cliquez sur enregistrer.

* LANCEMENT PuTTY
* Dans la boîte de dialogue de démarrage de Windows, tapez putty pour démarrer l'utilitaire.
* Entrer votre nom d'hôte dans le champ approprié :
"ec2-35-153-158-60.compute-1.amazonaws.com".

* Pour une AMI Amazon Linux, le nom d'utilisateur est "ec2-user".

* Cliquer sur le bouton + à côté du champ SSH pour développer cette section. Ensuite, cliquez sur Auth (qui signifie authentifier) et entrez le nom de votre fichier de clé privée (c'est-à-dire le fichier ELB.ppk) où il est dit Fichier de clé privée pour l'authentification (si vous cliquez sur Parcourir, vous pouvez facilement rechercher le répertoire où vous avez stocké).

* Cliquer sur Open

* La connexion est effective

### 3 - Création d'une deuxième machine virtuelle
Réaliser les étapes
* 1 - Création d'une machine virtuelle
* 2 - Connexion en ssh vers la machine virtuelle
L'adresse IP de l'instance est 212.129.18.107/32
* Informations pour se connecter à cette nouvelle instance

* Nom de la deuxième instance à l'aide de son DNS public
ec2-user@ec2-35-174-7-38.compute-1.amazonaws.com
* Nom de login/utilsateur
ec2-user
* La connexion est effective sur la deuxième instance

### 4 - Les deux instances pour de l'équilibrage de charge
Au nivau de l'IHM AWS, pour le service "Répartiteur de charges" à "l'étape 1 : Configurer l'équilibreur de charge", (voir le paragraphe "1 - Création d’un ELB"), dans la partie "Zones de disponibilités", nous utiliserons ces deux "zones de disponibilités" suivantes
* us-east-1c
* us-east-1b

Attention : l'IP et le DNS public des serveurs peuvent changer quand ils redémarrent. Pour éviter ce problème, on configure une "IP elastic".
## III - Equilibreurs de charge
Le service répartiteur de charges (ELB - Elastic Load Balancing) agit comme un point de contact unique entre ces instances EC2 et leurs consommateurs. Un consommateur, ou un client, envoie des requêtes aux services et applications déployées sur les instances EC2 à travers des ELB. C’est l’ELB qui décide quelle sera l’instance EC2 qui servira ces requêtes, en fonction de différents critères comme, par exemple, la charge de travail de chacune, etc. Ainsi, on peut faire face à des montées en charge simplement en ajoutant des instances EC2 sans avoir à se préoccuper ni du routage, ni de la répartition des charges, car c’est l’ELB qui s’en occupe.
Associé à la fonction d’Auto Scaling qui sera présentée un peu plus loin dans ce chapitre, l’ELB fournit un environnement de production résilient et tolérant aux pannes, de haute disponibilité et fiable. Voyons concrètement comment les choses se passent en pratique.
### 1 - Création d’un ELB
Pour créer un ELB, il suffit de se connecter sur la console AWS et, dans le volet de navigation, de sélectionner Équilibreur de charges. Le tableau de bord ELB s’affiche pour effectuer toutes les étapes requises pour la création et configuration :
* la définition de l’ELB
* l’affectation des groupes de sécurité
* la configuration du routage
* l’ajout de cibles
* Cliquer sur le bouton "Créer un équilibrage de charges" dans le tableau de bord ELB.

Les trois options suivantes vous seront présentées :
1. ELB de type application. Ce répartiteur est spécialisé dans la gestion du trafic HTTP/HTTPS et c’est probablement le plus utilisé.
1. ELB de type réseau. Ce répartiteur est spécialisé pour gérer des flux TCP/TLS et il est utilisé dans des cas nécessitant des performances exceptionnelles ou recevant d’importants volumes de requêtes par seconde (plusieurs millions).
1. ELB de génération précédente. Il s’agit là de répartiteurs d’un type compatible avec les anciens réseaux appelés EC2 Classic qui ne sont plus proposés depuis 2013. Cependant, il existe encore des clients qui les utilisent, ce type d’ELB continue donc à être supporté.
https://docs.bitnami.com/aws/how-to/configure-elb-ssl-aws/
* Cliquer sur le bouton "Créer" de la première alternative
* us-east-1c
* us-east-1b

* Configurer l'équilibreur de charge en renseignant le champ Nom avec l’identifiant du nouvel ELB "elbFirst" et cocher au niveau des "zones de disponibilité" "us-east-1c" et "us-east-1b".
ELB est configuré à cheval sur ces deux zones de disponibilité différentes. Ainsi, dans le cas peu probable où toutes les instances EC2 d’une zone de disponibilité sont en panne, le trafic est redirigé vers une autre zone.
Cliquer sur le bouton "Suivant : Configurer les paramètres de sécurité"

* Cliquer sur le bouton "Suivant : Configurer les groupes de sécurité"

* Pour l'affectation de groupe de sécurité, on a la possibilité de créer un nouveau groupe de sécurité dédiée ou d’utiliser l’existant. N’ayant pas d’exigences particulières de sécurité pour ce simple test, par conséquent, nous utiliserons le groupe de sécurité par défaut qui laisse passer tout trafic sur tous les ports.
* Cliquer sur le bouton "Suivant : Configurer le routage"

## IV - Groupes cibles
Un répartiteur de charges achemine les requêtes vers des groupes de cibles. Cette étape permet ainsi de grouper les cibles, soit en utilisant des groupes existants, soit en créant des nouveaux groupes. Nous n’en avons pas encore créé, nous allons donc garder l’option par défaut dans la liste déroulante Groupe cible qui est Nouveau groupe cible. Le type des cibles peut être des instances EC2, des adresses IP ou des fonctions lambda. Dans notre cas, ce seront des instances EC2.
La vérification de l’état est une partie très importante de la configuration de notre ELB. Il s’agit de tests qui sont effectués par l’ELB pour vérifier l’état des instances EC2 cibles. Ces tests peuvent être de simples opérations de ping ou des requêtes HTTP. Si un des tests échoue, l’instance en question est marquée comme hors service et désormais l’ELB ne lui orientera plus de trafic, sauf si lors des tests suivants cette même instance revient à un état normal.
Cliquez maintenant sur le bouton "Suivant : Enregistrer les cibles" pour finir la création de l’ELB.

* L’ajout des cibles est l'étape d’ajout des instances actives EC2, au nouvel ELB.
En cliquant sur le bouton "Suivant : vérification", on passe à la dernière étape de ce processus où nous avons une dernière chance de corriger d’éventuelles inadvertances.

* cliquer sur le bouton "Créer".

* Le nouvel ELB vient d’être créé. Cliquer sur le bouton "Fermer"
* Visualiser l'équilibreur de charge

* Ajouter une règle entrante permissive dans la cadre de la formation
> * Type : Tout le trafic
> * Protocole : Tout
> * Plage de ports : Tous
> * Source : 0.0.0./0

## V - Configurer une IP élastique
Après redémarrage, les noms DNS et adresses IP des deux instances ont été modifiés.

### 1 - Affecter un nom à chaque instance
Dans la colonne "Name" du tableau des instances, survolez une cellule d'une instance jusqu'à visualiser l'icone du crayon et vliquer dessus

* cliquer sur l'icone du crayon pour saisir le nom d'une instance et valider la saisie.

* Répeter les actions pour la deuxième instance

### 2 - Configurer une IP élastique
Une adresse IP élastique associée à une instance EC2 active est gratuite tant qu'une seule IP est associé à cette instance.
Toujours dans le service "EC2", aller dans la section "Réseau et sécurité", section "Adresse IP Elastic".
* Cliquer sur le bouton "Allouer l'adresse IP Elastic"

* Cliquer sur le bouton radio "Pool d'adresses IPv4 Amazon" puis sur le bouton "Allouer. Une adresse IPv4 est allouée à partir du groupe d'adresses IP d'Amazon.

* L'adresse IP 34.257.40.85 est prête à être associée à une instance. Aller dans "Actions" puis cliquer sur "Associer l'adresse IP Elastic"

* Associer l'IP Elastic à une instance. Dans le menu déroulant "Instance", sélectionnez l'instance EC2 à laquelle vous voulez la rattacher.

* Cliquer sur le lien de la colonne "Instance associée" pour visualiser l'instance "instanceaws1"

* Visualiser l'adresse IP publique statique 34.237.40.83 de la première instance "instanceaws1"

* Répéter ces mêmes actions de configuration adresses IP statique pour la deuxième instance "instanceaws2"

* Visualiser l'adresse IP publique statique 3.221.121.240 de la deuxième instance "instanceaws2"

### 3 - Contrôler les IP statiques
* Arrêter et démarrer les 2 instances pour vérifier que les deux instances gardent bien les adresses IP statiques

* Vérifier que les adresses IP n'ont pas été modifiées

## VI - Créer un système de fichiers Amazon EFS
### 1 - Création du File system
Dans le service "Stockage", aller dans la section "EFS"
* Cliquer sur le bouton "Créez un système de fichiers"

* Dans la section Configure network access (Configurer l'accès réseau), pour VPC, choisissez votre VPC par défaut. Il se présente sous la forme vpc-xxxxxxx (default). Notez l'ID du VPC "92dad9e8". Cliquer sur le bouton "Etape suivante".

* Saisir le tag sous forme "clef:valeur", "FS1":"File system site web"

* Cliquer sur le bouton "Etape suivante"

* Cliquer sur le bouton "Créez un système de fichiers"

* Visualiser le File system créé et noté le "ID du système de fichiers" fs-af83932f. Celui-ci sera utilisé pour la première instance. Cliquer sur le lien "Instructions de montage d'Amazon EC2 (depuis un VPC local)"

* Visualiser les commandes de montage file system

* Réaliser les dernières actions pour créer un deuxième système de fichiers. Ce dernier sera utilisé pour la seconde instance

* Visualisation Nouveau File system "fs-f7fbe877" pour le deuxième serveur

### 2 - Ajouter un groupe de sécurité des deux instances
* Dans le service "EC2", aller dans la section "Instance"

* Cocher le groupe sécurité "sg-c42d60ea" puis cliquer sur "Attribuer les groupes de sécurité"

### 3 - Monter le file system
* Taper la commande "sudo yum update" pour mettre à jour le système

* Taper la commande suivante "sudo mkdir -p /var/www/html/efs-mount-point" pour créer le répertoire de montage

* Taper la commande suivante "ls -l /var/www/html" pour visualiser le répertoire créé

* Installer le package "amazon-efs-utils" via la commande "sudo yum install -y amazon-efs-utils"

* Taper la commande suivante "sudo mount -t efs fs-af83932f:/ /var/www/html/efs-mount-point" pour monter le File System "fs-af83932f" sur le répertoire de montage "/var/www/html/efs-mount-point"

* Le répertoire racine d'un système de fichiers doit être la propriété de "ec2-user" via la commande "sudo chown ec2-user /var/www/html/efs-mount-point"

* Réaliser les dernières commandes sur l'instance "instanceaws2" sauf celle pour monter le File system "fs-af83932f". En effet, le File systeme a monté est "fs-f7fbe877", en exécutant la commande suivante
sudo mount -t efs fs-f7fbe877:/ /var/www/html/efs-mount-point
### 3 - Montage automatique du file system
Pour chacune des instances, ajouter la ligne correspondante, présentée ci-après, dans le fichier "/etc/fstab" en utilisant par exemple la commande "sudo vi /etc/fstab"
* Visualisation du résultat en utilsant la commande suivante "cat /etc/fstab"
#### 3.1 - Instance "instanceaws1"
fs-af83932f:/ /var/www/html/efs-mount-point efs _netdev,tls,iam 0 0
* Visualisation du résultat en utilsant la commande suivante "cat /etc/fstab"

#### 3.2 - Instance "instanceaws2"
sudo mount -t efs fs-f7fbe877:/ /var/www/html/efs-mount-point
fs-f7fbe877:/ /var/www/html/efs-mount-point efs _netdev,tls,iam 0 0
* Visualisation du résultat

## VII - Installer Apache sur les deux instances
### 1 - Installation Apache
* Installer le serveur web Apache en tapant la commande suivante "sudo yum -y install httpd"

### 2 - Configuration Apache
* Ajoutez une règle dans le groupe de sécurité des deux instances EC2s pour autoriser le trafic HTTP sur le port TCP 80 à partir de n'importe quel emplacement.
Une fois la règle ajoutée, le groupe de sécurité d'instance EC2 aura les règles entrantes suivantes.

* Lancer le service httpd en lançant la commande suivante "sudo systemctl start httpd.service"

* Vérifier que le service httpd est bien démarré en lançant la commande suivante "sudo systemctl status httpd.service"

* Programmer Apache pour être lancé automatiquement en lançant la commande suivante "sudo systemctl enable httpd"

* Réaliser la commande suivante sur l'instance "instanceaws1"
```
echo "<html><h1>Hello depuis Amazon EFS1 de l'instance instanceaws1 </h1></html>" > /var/www/html/efs-mount-point/index.html
```
* Réaliser la commande suivante sur l'instance "instanceaws2"
```
echo "<html><h1>Hello depuis Amazon EFS2 de l'instance instanceaws2 </h1></html>" > /var/www/html/efs-mount-point/index.html
```
* Insérer à la première ligne du fichier "/var/www/html/efs-mount-point/index.html" les lignes suivantes sur les deux instances "instanceaws1" et "instanceaws2"
<a href="https://time.is/Paris" id="time_is_link" rel="nofollow" style="font-size:36px">Heure à Paris :</a>
<span id="Paris_z71f" style="font-size:36px"></span>
<script src="//widget.time.is/t.js"></script>
<script>
time_is_widget.init({Paris_z71f:{}});
</script>
### 3 - Test de la configuration Apache
* Depuis un navigateur client saisir l'URL suivante
```
http://elbfirst-987063661.us-east-1.elb.amazonaws.com/efs-mount-point/
```
[Equilibreur de charge](http://elbfirst-987063661.us-east-1.elb.amazonaws.com/efs-mount-point/)
* L'équilibreur de charge pointe sur l'"EFS1" de m'instance "intanceaws1"

* Quelques secondes après, en réalisant un rafraichîssement de la page, l'équilibreur de charge pointe sur l'"EFS2" de m'instance "intanceaws2"

* L'équilibreur de charge pointe sur tel ou tel instance selon l'algorithme "Tourniquet" (round-robin)

## VIII - Troubleshooting
* Arrêter une instance

* Vérifier que l'instance "instaceaws1" est bien arrêté

* Depuis un navigateur client saisir l'URL suivante
```
http://elbfirst-987063661.us-east-1.elb.amazonaws.com/efs-mount-point/
```
[Equilibreur de charge](http://elbfirst-987063661.us-east-1.elb.amazonaws.com/efs-mount-point/)
* L'équilibreur de charge pointe sur l'"EFS2" de m'instance "intanceaws2"


## IX - Conclusion
Le service "équilibreur de charge" est fonctionnel. Il faut veiller au bon paramètrage du groupes de sécurité au niveau de l'équilibreur de charges, le File System et l'instance, notamment au niveau des règles entrant et sortants.