• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 28/11/2019

Montez une base de données et une machine EC2 dans votre VPC

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Le dirigeant de la société Cat’s eyes qui vous emploie est tout content avec son réseau, mais il faut bien admettre que ce directeur n’est pas très technique. S’attendant à vous voir tirer des câbles, il a demandé ce matin à votre collègue de lui montrer les machines. Venant à la rescousse de votre collègue, vous avez expliqué au dirigeant que ces machines étaient virtuelles et que tout se pilotait depuis l’interface Amazon, mais devant sa méfiance, vous l'avez rassuré en lui disant “allez, venez avec moi, je vous montre !”

La journée avec le directeur dans les pattes va être compliquée, mais heureusement, vous avez quelque chose de plutôt cool à faire : il faut monter le blog de l’entreprise dans le nouveau réseau Cloud, afin que Julien de l’équipe marketing puisse publier des articles. Le blog tourne à l’aide d’un logiciel libre appelé DotClear, qui utilise PHP et une base de données MySQL ou PostgreSQL. Il nous faudra alors :

  1. Créer une machine EC2.

  2. Créer une base de données PostgreSQL.

  3. Installer DotClear sur la machine EC2.

  4. Configurer la redondance en cas de panne.

Vous avez déjà vu dans le cours d’introduction à AWS comment lancer une base de données RDS et une machine EC2 ; nous allons le refaire, mais  cette fois-ci dans notre réseau VPC créé lors de la partie précédente.

Lancez une machine EC2 dans le sous-réseau public

J’ai pas lu le cours d’introduction, c'est possible d'avoir un rappel vite fait sur les EC2 ? :p

Amazon EC2 est un environnement de virtualisation d’Amazon. EC2 signifie Elastic Compute Cloud. Avec Amazon EC2, vous aurez la possibilité de démarrer des machines virtuelles, de manière simple et dans le cloud. Un des avantages d’Amazon EC2 est le paiement à l’utilisation, c’est-à-dire que vous n’allez payer que les heures pendant lesquelles votre machine virtuelle sera démarrée, ou le transfert de données.

Nous allons donc lancer une machine. Pour cela, rendez-vous dans le service EC2 et cliquez sur Instances. Cliquez ensuite sur Launch Instance.

Ensuite, choisissez une AMI Amazon Linux en 64 bits et avec un processeur x86.

C’est quoi une AMI ?

Plus de détails sont disponibles dans le chapitre Lancez une instance Amazon EC2.

  • Choisissez une instance de type t2.micro et cliquez sur Next :  Configure Instance Details ;

  • choisissez le VPC créé précédemment, ainsi qu’un sous-réseau public ;

  • au niveau de Auto-assign Public IP, choisissez Enable ;

  • cliquez ensuite sur Review and Launch.

Cliquez sur Launch et choisissez ou créez une paire de clés publique et privée, comme dans la section Lancement du serveur du cours d’introduction.

Vérifiez que vous pouvez vous connecter à votre machine et qu’elle est en route :

  

Lancez une base de données dans le sous-réseau privé

Pourquoi le réseau privé ?

Pour des raisons de sécurité, nous ne souhaitons pas qu’il soit possible de se connecter à notre base de données depuis Internet. Un sous-réseau privé est tout à fait adapté à cet usage, car il va isoler au niveau réseau la base de données, en ne permettant pas à celle-ci d’être accessible de l’extérieur.

Créez une base de données dans Amazon

Pour créer votre base de données, allez dans le service RDS puis suivez les étapes :

  • cliquez sur Create Database ;

  • choisissez PostgreSQL ;

  • cliquez sur Next ;

  • choisissez Dev/Test ;

  • cliquez sur Next.

Choisissez un mot de passe, et cliquez sur Next. Dans la section Network And Security, choisissez votre VPC créé pendant la partie précédente. Laissez les autres paramètres par défaut et cliquez sur Create.

Heu, je croyais qu’il fallait mettre la base de données dans un réseau privé, mais on n’a rien spécifié de tout cela ?! 

Exact ! Je ne vous l’ai pas dit, mais en laissant les autres paramètres par défaut, la console web d’AWS a fait des choses pour nous. Cliquez sur Subnet groups et vous verrez qu’un groupe de sous-réseau par défaut a été créé :

 

En cliquant dessus on en voit le détail :

 

Houlà, il y a les sous-réseaux publics dedans. C'est pas bon ça, hein ? 

Eh oui ! Il faut se méfier des choses un peu automatiques qui peuvent se passer quand on clique dans la console web d’Amazon. Mais ne vous inquiétez pas, nous allons le modifier. Revenez sur la liste des groupes, cochez la ligne de votre groupe, puis cliquez sur Edit. Dans la section Subnets, retirez les sous-réseaux publics et ne conservez que les privés, puis cliquez sur Save.

Nous allons maintenant essayer de voir si notre machine arrive à interroger la base de données. Allez dans votre base de données et récupérez l’URL affichée en dessous de Endpoint. Elle ressemblera à quelque chose comme bdd.xyz.eu-west-1.rds.amazonaws.com.

Connectez-vous à la base de données depuis la machine EC2

Depuis votre console SSH connectée à la machine EC2, vous allez pouvoir essayer de vous connecter à la base de données et exécuter des requêtes. Pour cela, nous allons installer le client PostgreSQL et lancer la commande de connexion :

sudo yum install postgresql
pqsl -h bdd.xyz.eu-west-1.rds.amazonaws.com -d ma_bdd -U mon_user

En remplaçant :

  • bdd.xyz.eu-west-1.rds.amazonaws.com par votre URL de base de données .

  • ma_bdd par le nom que vous avez donné à votre base .

  • mon_user par le nom de l’utilisateur de BDD.

Ça marche pas ??!

Eh oui ! Encore une fois, la configuration automatique nous a joué des tours ; vous devriez avoir le message :

psql :  could not connect to server :  Connection timed out
        Is the server running on host "bdd.xyz.eu-west-1.rds.amazonaws.com" (10.0.101.52) and accepting
        TCP/IP connections on port 5432?

Il faut donc ouvrir l’accès réseau entre la base de données et la machine EC2. Effectivement, l’accès est jusque-là bloqué par AWS, car les groupes de sécurité sont fermés par défaut.

C’est quoi un groupe de sécurité ?

AWS possède deux éléments permettant de bloquer le trafic réseau au sein de votre VPC,  les groupes de sécurité et les ACL réseau :

  • un groupe de sécurité est un pare-feu virtuel pour votre instance qui va contrôler le trafic entrant et sortant. C’est un élément stateful, c’est-à-dire qu’il va conserver l’état de la requête pour, par exemple, autoriser la réponse à ladite requête ;

  • une liste de contrôle d'accès réseau, ou ACL réseau, est une couche de sécurité facultative, qui fait office de pare-feu pour le contrôle du trafic entrant et sortant d'un ou plusieurs sous-réseaux. C’est un élément stateless, c’est-à-dire qu’il ne conserve pas l’état de la requête réseau :  si vous autorisez la sortie de votre réseau sur un port, il vous faudra également autoriser l’entrée si vous souhaitez pouvoir en lire la réponse.

Comment on modifie ça ?

Allez dans la liste de vos instances RDS, et cliquez sur votre base de données. En bas de la page, vous avez une section Security group rules comme ceci :

 

Comme on peut le voir, ce n’est pas la bonne IP qui est configurée en Inbound (entrée).

Cliquez sur le groupe de sécurité rds-launch-wizard. La page de gestion s’affiche, cliquez alors sur l’onglet Inbound et remplacez le bloc CIDR 176.67.91.153/32 par le bloc de votre VPC : 10.0.0.0/16.

Ici, la base de données est dans tous les cas isolée dans un sous-réseau privé, et nous n’avons pas activé le fait qu’elle soit en écoute externe ; mais on n’est pas à l’abri d’une erreur de configuration.

Une fois le groupe de sécurité modifié, la connexion est possible immédiatement ; réessayez la ligne de commande et vous devriez voir apparaître la ligne de commande de PostgreSQL. Essayez d’entrer \l pour lister les bases de données disponibles ; il devrait s’afficher :

Vous pouvez désormais quitter la console PostgreSQL avec la commande \q

Installez votre blog

Nous allons à présent installer Dotclear. Dans votre machine EC2, installez les éléments requis par le logiciel :

sudo yum install https mod_ssl
sudo yum install php php-pgsql php-mbstring php-iconv php-xml
sudo amazon-linux-extras install php7.2

Téléchargez et installez Dotclear :

wget http : //download.dotclear.net/latest.tar.gz
tar -xf latest.tar.gz
sudo mv dotclear/* /var/www/html/
sudo chmod 777 /var/www/html/inc
sudo chmod 777 /var/www/html/cache
sudo chmod 777 /var/www/html/public

Démarrez Apache :

sudo systemctl start httpd

Pour le moment, le serveur tourne, mais l’accès à votre site n’est pas encore effectif. Si vous essayez par exemple d’accéder à http://-ip-de-votre-machine/, vous verrez que le site ne répond pas.

Il faut autoriser l’accès HTTP depuis l’extérieur en entrée de la machine EC2, en ouvrant le Security Group comme nous l’avons fait entre la base de données et la machine. Pour cela, ouvrez le service EC2 et cliquez sur votre instance. En dessous, cliquez sur launch-wizard près du mot Security groups.

 

Ajoutez l’accès HTTP comme ceci :

 

Essayez à présent d’accéder à http://-ip-de-votre-machine/, et vous verrez apparaître l’écran d’installation du blog. Suivez les étapes d’installation dans le navigateur, et vous devriez arriver à cette page, qui est l’administration du site :

 

Notre installation est terminée, mais nous ne sommes pour le moment pas protégés contre les pannes d’une zone de disponibilité. Il aurait fallu pouvoir avoir une machine dans chaque zone de disponibilité, mais pour cela il nous faut un composant qui puisse diriger le trafic vers la ou les machines disponibles ; nous allons voir cela au prochain chapitre.

En résumé

  • le service EC2 permet de créer des machines virtuelles dans le cloud ;

  • le service RDS permet de créer des bases de données dans le cloud ;

  • AWS vous fournit des éléments de sécurité au sein de votre sous-réseau, comme les groupes de sécurité et les listes de contrôle d’accès réseau ;

  • par défaut, les groupes de sécurité sont fermés. Vous devez explicitement ouvrir les accès pour pouvoir accéder à vos machines ou à vos bases de données.

Exemple de certificat de réussite
Exemple de certificat de réussite