Step-1-0 : Découverte du cloud provider AWS
Un cloud provider est une société tierce fournissant des ressources informatiques que nous pouvons utiliser à la demande afin de répondre à nos besoins : réseau, calcul, stockage de données, analyses...
Ces clouds provider peuvent intervenir à plusieurs niveaux suivant les services qu'ils proposent : IaaS (infrastructure as a service), PaaS (platform as a service), ou SaaS (Software as a service). La plupart du temps les cloud provider proposent un ensemble de ses services à tous les niveaux avec un catalogue plus ou moins riches ou avec des spécialités sur des services particuliers.
AWS (Amazon Web Services) est le leader des clouds provider devant Azure (Microsoft) et GCP (Google). (source)
Amazon fut l'un des précurseurs du "cloud" et popularisa le terme en lançant AWS et ses services EC2, S3 et SQS en 2006.
Concepts
Les avantages
On oppose souvent l'approche Cloud avec l'approche traditionnelle On-premise (Infrastructure dans son propre datacenter ou hébergé dans des salles serveur). On comprend alors vite les avantages que permet le Cloud :
- Pay as you go : on ne paye que des ressources informatiques que l'on utilise.
- Économies d'échelle : avec ces milliers de clients AWS bénéficie d'économies d'échelle permettant des prix plus bas.
- Cesser de deviner la capacité : plus besoin de deviner ou imaginer les charges et consommations puis de payer en avances des serveurs, baies, etc.
- Augmentez la vitesse et l'agilité : les ressources informatiques sont à portée de clic et même d'API, permettant de réduire les temps de provisioning d'infra/serveurs. Cela nous permet une grande agilité les coûts pour nos développements et déploiements.
- Le coût d'entrée d'une infrastructure : ne plus gérer leur propre datacenters et infra physiques permet aux entreprises d'investir ailleurs.
- Passer à l'échelle mondiale facilement : grâces aux interfaces/APIs et à l'infrastructure des clouds providers, on peut déployer rapidement dans d'autres régions du monde et il n'y a plus de limite physique des murs de la salle serveur pour mettre à l'échelle.
Les désavantages
Tous ceci apporte aussi son lot de problématique qu'il faut adresser :
- Maitrise de son SI : Son infrastructure tourne dans le cloud dans un datacentre la plupart du temps mutulisé (pour du cloud public) donc on a moins de maitrise sur son infrastrucutre (Ou tourne exactment nos VMs, sur quelle serveur physique, avec quelle switch/routeur etc..).
- Maitrise des coût : Un cloud provider peut décider d'augmenter le tarif des services que l'on consomme. Cela aura un impact direct sur notre coût d'infrastructure. De plus tout est payant de la simple VM provisionné justqu'au traffic réseau entrant ou sortant, Attention à l'explosion des coûts.
- Vendor locking : Attention lorsque l'on utilise des services cloud, on aura tendance à spécialiser notre infra sur les services cloud qui nous sont proposés. On se retrouve souvent dépendant du cloud et il est difficile de migrer et de retrouver un équivalent chez un autre cloud ou On-premise. A corréler avec la maitrise des coûts.
Les Services AWS
AWS propose des services qui regroupent un ensemble de ressources par problématiques auxquelles elles répondent.
En général, on pourra classer les services AWS dans différentes grandes thématiques ('High level Services').
Les 3 principales :
- Compute (EC2/Lambda/EKS/ECS ...)
- Network (VPC/WAF/VPN/xLB/ ...)
- Storage (S3/Glacier/EFS/FSx/Storage Gateway )
Bien sûr il y en a d'autres : Management&Governance, Developer tools, satellite, migration, Identity, IOT ...
Chaque service est composé de ressources. C'est l'élément le plus petit que l'on peut créer dans AWS. Dans AWS TOUT est resource.
Note
Dans AWS chaque service a des quotas, souvent par région. Par exemple, nombre d'instances EC2, d'IPs publiques, de VPCs, etc. Il y en a plus de 160 juste pour les EC2. Il faut donc y faire attention afin de ne pas se retrouver bloqué. Il est possible de demander des augmentations sur ces quotas.
Nous commencerons par découvrir l'aspect le plus important de toute plateforme cloud : le Compute
On décrit sous Compute tous les services qui permettent d'avoir de la puissance de calcul. Cela peut aller de la simple VM (serveur virtuel) au FunctionAsAService (Lambda AWS) en passant par les orchestrateurs (EKS/ECS).
Global Infrastructure
AWS continue de déployer ses infrastructures partout dans le monde et fourni ses services via des Régions.
Region : une zone géographique dans laquelle on peut déployer. Une region contient au minimum 2 AZs.
AZ (Availability Zone) : Chez AWS c'est un datacenter entier (voire plusieurs datacenter physiquement proches) avec une alimentation complement décorrélée et des interconnexions réseau redondées avec forte bande passante et latence basse.
Edge Location : C'est un point d'accès servant de cache pour les services CDN Cloudfront et pour les GSLB (Global Server Load Balancing) comme le service AWS Accelerator.
Warning
La sécurité et la conformité sont partagées avec ce que AWS appelle le shared responsibility security model. AWS est responsable de protéger les infrastructures, locaux, hardware, network qui font tourner les services. De notre côté en tant que clients, nous sommes responsables des services que l'on utilise et comment nous les configurons.
TP
Commençons avec le Hello World
du cloud : créer la resource de base, c'est-à-dire une instance EC2.
C'est tout simplement un serveur virtuel qui tournera sur le cloud public AWS et qui pourra héberger vos process comme
n'importe quel serveur.
Nous allons voir 3 façons de créer d'instancier cette ressource et interagir avec les APIs AWS.
Création de votre première resource AWS
La console
La console AWS, aussi appelée Dashboard
(ou officieusement Clickodrome
), est une interface web permettant de naviguer sur AWS et d'y
visualiser et créer nos ressources.
- Connectez-vous sur la console AWS. Toutes les informations sont fournies dans le mail reçu en début de cours.
- Vous allez arriver dans la console AWS
- Le service qui nous intéresse ici est
EC2
. Pour trouver ce service, vous pouvez : - Soit rechercher EC2 dans la barre de recherche et cliquer sur EC2
- Soit aller parcourir l'onglet
Services
en haut à gauche -->Compute
-->EC2
Une fois dans le service EC2, vous retrouverez l'ensemble des ressources AWS qui ont trait au Service EC2. Voici ceux qui vont nous intéresser pour cet Hello World :
- Instances : la ressource qui correspond à une machine virtuelle (un serveur) qui va tourner dans le cloud
- Image AMI : L'image de l'instance qui va boot avec les différentes spécifications :
- OS
- Architecture (ARM/Mac ARM/x86)
- Root device disque
- Storage Volume : Les disques que l'on veut ajouter sur nos EC2
- Keypair : les clefs SSH que l'on va pouvoir ajouter à notre instance pour par exemple pourvoir se connecter en remote à notre serveur via SSH.
Note
L'ID d'une image AMI est valide pour une image dans une région (ID de l'ami Ubuntu 22 est différente d'une région à l'autre)
Lorsque vous vous connectez sur la console AWS, vous allez pouvoir sélectionner une région.
Pour commencer, placez-vous dans la région us-east1
il s'agit de la région Virginia aux US
Info
Les services sont scopés par régions.
La région 'global' concerne les services qui ne sont pas rattachés spécifiquement à une région. IAM, Route53, Cloudfront, ... sont des services globaux.
Question
Que se passe-t-il au niveau de votre console AWS sur le service EC2
Réponse
Vous devriez avoir des erreurs de permission sur le service EC2 sur cette région. En effet la policy IAM associé à votre compte
ne vous permet pas d'accéder au service EC2 dans cette région. Vous avez seulement le droit d'accès sur la région eu-west-3
qui est la région de Paris
- Basculez dans la région
eu-west-3
il s'agit de la région Paris. et cliquer surInstances
dans le menu de gauche - Cliquez ensuite sur
Launch Instance
- Name : votre_nom-mon-serveur
- L'image : choisissez l'AMI Ubuntu 22 / L'architecture x86
- Le type d'instance : Pour ce test choisissez
t2.micro
- Sélectionnez votre clé, 2 options ici :
- Vous n'avez pas de clé ssh : dans ce cas, créez votre keypair à ensuite récupérer et stocker dans votre
~/.ssh
- Vous avez déjà une clé ssh : ajoutez-la manuellement dans la partie
Network & Security -> Key Pairs -> Actions -> Import
- Vous n'avez pas de clé ssh : dans ce cas, créez votre keypair à ensuite récupérer et stocker dans votre
- Network : laissez la configuration par défault
- Provisionnez un disque de 10 Go
- Pour le moment, on ne s'intéresse pas au
advanced details
Example
Connectez vous à votre instance via son ip publique.
Initialisation de votre Compte
Pour ce TP nous vous avons fourni un utilisateur IAM (information dans le mail). Ce user vous a permit d'accéder au dashboard AWS. Mais AWS fourni aussi une API qui permettra de piloté votre infrastructure et qui sera utilisé pour les 2 autres méthodes de création de ressources. Pour utiliser cet API vous aurez besoin d'une clef d'accès à l'API.
Configurons donc cette key :
- Dans la console AWS allez sur votre compte en haut à droite -->
Security Credentials
- Vous trouverez un tableau
Access Key
-->Create access key
-->Other
- Vous pouvez optionnelement renseigner un tag pour connaitre son cas d'usage, par exemple
formation
, puiscreate
- Cela va vous gérer une clef composé d'un
Access Key
et d'unSecret Access Key
- Récuperer bien ces deux infos, surtout le secret qui ne sera plus disponible ensuite (si vous le perdez il faudra simplement recréer une key)
Voilà vous avez une clef (composé des 2 éléments Access Key
et Secret Access Key
) qui vous permettra d'interagir avec l'API AWS
Warning
Attention cette clef n'a rien à voir avec la Keypair qui sert à se connecter en SSH sur votre instance (serveur VM).
AWS CLI (scripting)
Une autre manière de provisionner des ressources est l'utilisation du CLI aws (command line interface).
Pour déployer une instance ec2 :
aws ec2 run-instances \
--image-id ami-XXXXXXXXXXXXXXXXX \ # Remplacez par l'ID de l'image que vous souhaitez
--instance-type t2.micro \ # Remplacez par le type d'instance souhaité
--key-name VotreCle \
--region eu-west-3
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=votre_nom-mon-serveur}]'
Vous pouvez aussi récupérer les infos avec le CLI, par exemple pour lister les AMIs :
Ou encore récupérer l'IP public de votre instance :
aws ec2 describe-instances --instance-ids MY_INSTANCE_ID --query 'Reservations[*].Instances[*].PublicIpAddress' --output text
Terraform (IaC)
Enfin 'last but not least', la solution pour déployer des ressources est l'approche Infrastructure as Code. Pour cela,
nous allons utiliser l'outil terraform
.
Cet outil d'InfraAsCode populaire va vous permettre de décrire votre infrastructure sous forme de code, ici du HCL,
et ensuite de la déployer sur le cloud provider que vous allez cibler (ici AWS).
C'est une approche déclarative que l'on apprécie quand l'on veut déployer de l'infrastructure.
- Créez un folder
day1-step1
, puis un fichiermain.tf
dans ce fichier, nous allons décrire le strict minimum pour déployer une instance EC2.
provider "aws" {
region = "eu-west-3"
default_tags {
tags = {
Owner = "JE_REMPLACE_PAR_MON_NOM"
}
}
}
Les tags permettent de pouvoir plus facilement gérer/filtrer ses ressources dans AWS.
Mettre default_tags
ici lors de la déclaration du provider permettra de ne pas avoir à le mettre sur chaque ressource.
resource "aws_instance" "mon_instance" {
ami = "ami-XXXXXXXXXXXX"
instance_type = "t2.micro"
key_name = "VotreCle"
tags = {
Name = "NomDeVotreInstance" # Remplacez par le nom que vous souhaitez donner à votre instance
}
}
- Depuis ce dossier, lancez les commandes terraform suivantes :
//TODO faire un rappel des commandes
- Vérifiez la bonne création de l'instance. Vous pouvez aussi constater qu'un nouveau fichier a été créé dans votre
folder. Il s'agit du
terraform.tfstate
. Regardez le contenu de ce fichier.
Question
Quelle est l'ip public de votre instance EC2 ?
Réponse
Vous pouvez récupérer l'IP publique encore via l'interface ou en output via le provider terraform aws et l'attribut
public_ip
de la ressource aws_instance
Info
Le tfstate contient l'ensemble des informations des ressources provionnées par terraform. Il reflète donc l'ensemble des ressources qui sont déployées sur le cloud.
Question
Relancez les commandes tf plan, tf apply. Que se passe t'il ?
Warning
Pensez bien à détruire votre infra, les instances une fois fini. Une instance non/mal utilisée fait perdre de l'argent à l'entreprise. Optimiser ses coûts fait partie du devops.
Question
Quelle est le contenu de votre tfstate maintenant ?
Voilà, vous avez fait vos premiers pas dans la découverte du provisioning d'infrastructure sur le cloud AWS. Vous avez même fait un peu d'Infrastructure as Code !