AWS EC2
Le service de capacité de calcul évolutive d'Amazon Web Services qui permet de louer des serveurs virtuels pour exécuter vos applications dans le cloud.
Qu'est-ce qu'Amazon EC2 ?
Imaginez que vous ayez besoin d'un ordinateur puissant pour faire fonctionner votre entreprise. Vous avez deux options : acheter une machine physique coûteuse que vous devrez entretenir et remplacer régulièrement, ou "louer" un ordinateur virtuel qui existe dans le cloud.
Amazon EC2 (Elastic Compute Cloud) correspond à cette deuxième option. C'est comme louer des ordinateurs virtuels dans le cloud d'Amazon. Vous pouvez en utiliser un ou des centaines, les démarrer et les arrêter quand vous voulez, et payer uniquement pour ce que vous utilisez.
Pourquoi est-ce important ?
Flexibilité
Augmentez ou réduisez instantanément la puissance de calcul en fonction de vos besoins, sans avoir à acheter de nouveaux équipements.
Économies
Payez uniquement pour les ressources que vous utilisez, sans investissement initial massif en matériel informatique.
En résumé, Amazon EC2 vous permet d'accéder à des ordinateurs virtuels à la demande dans le cloud, offrant la flexibilité d'ajuster vos ressources informatiques en fonction de vos besoins, tout en vous évitant les tracas liés à la gestion du matériel physique.
Fonctionnement technique
Amazon EC2 est un service web qui fournit une capacité de calcul redimensionnable dans le cloud. Il est conçu pour simplifier l'utilisation de l'informatique en nuage à l'échelle du web pour les développeurs, en offrant un contrôle complet sur les ressources informatiques et en permettant de s'exécuter dans l'environnement de calcul d'Amazon.
Les concepts fondamentaux
Instances et types d'instances
Une instance est un serveur virtuel dans le cloud AWS. EC2 propose divers types d'instances optimisés pour différents cas d'utilisation:
- Instances à usage général (t2, t3, m5, etc.) : Équilibre entre ressources de calcul, mémoire et réseau
- Instances optimisées pour le calcul (c5, c6g, etc.) : Pour les charges de travail intensives en termes de processeur
- Instances optimisées pour la mémoire (r5, r6g, x1, etc.) : Pour les charges de travail qui traitent de grands ensembles de données en mémoire
- Instances optimisées pour le stockage (d2, i3, etc.) : Pour les charges de travail qui nécessitent un accès séquentiel élevé à de grands ensembles de données
- Instances de calcul accéléré (p3, g4, etc.) : Inclut des accélérateurs matériels ou des coprocesseurs
AMI (Amazon Machine Image)
Une AMI est un modèle qui contient une configuration logicielle (système d'exploitation, serveur d'applications et applications) nécessaire pour lancer une instance. Elle peut être:
- AMI AWS : Images fournies par AWS (Amazon Linux, Ubuntu, Windows Server, etc.)
- AMI du AWS Marketplace : Images créées par des tiers
- AMI personnalisées : Images que vous créez à partir d'instances existantes
Stockage
EC2 offre plusieurs options de stockage pour les instances:
- Volumes EBS (Elastic Block Store) : Stockage persistant indépendant de la durée de vie de l'instance
- Stockage d'instance : Stockage temporaire qui est supprimé lorsque l'instance est arrêtée ou résiliée
- EFS (Elastic File System) : Système de fichiers entièrement géré qui peut être monté sur plusieurs instances EC2
S3 (Simple Storage Service) : Stockage d'objets hautement durable pour stocker des données pour les applications EC2
Sécurité
La sécurité dans EC2 est gérée à plusieurs niveaux:
- Groupes de sécurité : Pare-feu virtuel qui contrôle le trafic entrant et sortant d'une instance
- Paires de clés : Clés cryptographiques pour l'authentification SSH
IAM (Identity and Access Management) : Contrôle qui peut lancer, arrêter ou terminer des instances
- VPC (Virtual Private Cloud) : Réseau virtuel isolé dans le cloud AWS
Déploiement d'une instance EC2
Voici un exemple de lancement d'une instance EC2 avec l'AWS CLI:
# Lancement d'une instance EC2 avec AWS CLI
aws ec2 run-instances --image-id ami-0123456789abcdef0 --instance-type t2.micro --key-name my-key-pair --security-group-ids sg-0123456789abcdef0 --subnet-id subnet-0123456789abcdef0 --count 1 --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]' --user-data file://bootstrap-script.sh --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":30,"VolumeType":"gp3"}}]'
Infrastructure as Code avec
CloudFormation
AWS CloudFormation permet de définir et de provisionner l'infrastructure EC2 de manière déclarative:
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Template pour déployer une instance EC2 avec Auto Scaling et Load Balancer'
Resources:
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Autoriser le trafic HTTP et SSH
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
WebServerLaunchConfig:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
ImageId: ami-0123456789abcdef0
InstanceType: t2.micro
SecurityGroups:
- !Ref WebServerSecurityGroup
UserData:
Fn::Base64: |
#!/bin/bash -xe
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<html><h1>Hello from AWS EC2</h1></html>" > /var/www/html/index.html
WebServerAutoScalingGroup:
Type: AWS::AutoScaling::AutoScalingGroup
Properties:
LaunchConfigurationName: !Ref WebServerLaunchConfig
MinSize: 2
MaxSize: 5
DesiredCapacity: 2
VPCZoneIdentifier:
- subnet-0123456789abcdef0
- subnet-0123456789fedcba0
TargetGroupARNs:
- !Ref WebServerTargetGroup
Tags:
- Key: Name
Value: WebServer
PropagateAtLaunch: true
WebServerLoadBalancer:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Subnets:
- subnet-0123456789abcdef0
- subnet-0123456789fedcba0
SecurityGroups:
- !Ref WebServerSecurityGroup
WebServerTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
Port: 80
Protocol: HTTP
VpcId: vpc-0123456789abcdef0
HealthCheckPath: /
HealthCheckIntervalSeconds: 30
HealthCheckTimeoutSeconds: 5
HealthyThresholdCount: 2
UnhealthyThresholdCount: 5
WebServerListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref WebServerTargetGroup
LoadBalancerArn: !Ref WebServerLoadBalancer
Port: 80
Protocol: HTTP
Outputs:
LoadBalancerDNS:
Description: DNS du Load Balancer
Value: !GetAtt WebServerLoadBalancer.DNSName
Provisionnement avec Terraform
Terraform est un autre outil populaire pour définir l'infrastructure EC2 comme code:
# Définition du provider AWS
provider "aws" {
region = "eu-west-3"
}
# Création d'un groupe de sécurité
resource "aws_security_group" "web_server" {
name = "web-server-sg"
description = "Permet le trafic HTTP et SSH"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
# Création d'une instance EC2
resource "aws_instance" "web_server" {
ami = "ami-0123456789abcdef0"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.web_server.id]
key_name = "my-key-pair"
root_block_device {
volume_size = 30
volume_type = "gp3"
}
user_data = <<-EOF
#!/bin/bash -xe
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<html><h1>Hello from AWS EC2</h1></html>" > /var/www/html/index.html
EOF
tags = {
Name = "WebServer"
}
}
# Création d'une adresse IP Elastic
resource "aws_eip" "web_server" {
instance = aws_instance.web_server.id
}
output "public_ip" {
value = aws_eip.web_server.public_ip
description = "L'adresse IP publique de l'instance EC2"
}
Fonctionnalités avancées d'EC2
- Auto Scaling : Ajuste automatiquement le nombre d'instances EC2 en fonction de la demande
- Elastic Load Balancing : Distribue le trafic entrant entre plusieurs instances EC2
- Spot Instances : Permet d'utiliser la capacité EC2 inutilisée à prix réduit
- Reserved Instances : Offre des réductions significatives sur les frais d'instance lorsque vous vous engagez pour 1 ou 3 ans
- EC2 Image Builder : Simplifie la création, le test et le déploiement d'images de machines virtuelles
- Hibernate : Permet de préserver l'état de la RAM d'une instance lorsqu'elle est arrêtée
- Instances à la demande : Paiement à l'utilisation sans engagement
- EC2 Fleet : Lancez et gérez un groupe d'instances dans une seule opération
Bonnes pratiques
- Sélection du type d'instance : Choisissez le type d'instance approprié en fonction des besoins spécifiques de votre application
- Utilisation d'AMI personnalisées : Créez des AMI personnalisées pour accélérer le déploiement
- Auto Scaling : Configurez l'Auto Scaling pour gérer automatiquement la capacité
- Monitoring : Utilisez CloudWatch pour surveiller la performance et l'utilisation des instances
- Sécurité : Appliquez le principe du moindre privilège avec les groupes de sécurité
- Sauvegarde : Créez régulièrement des snapshots EBS pour sauvegarder vos données
- Optimisation des coûts : Utilisez les Reserved Instances ou Savings Plans pour les charges de travail prévisibles
- Infrastructure as Code : Utilisez CloudFormation, Terraform ou AWS CDK pour définir votre infrastructure
Cas d'usage
Hébergement d'applications web
Déploiement de sites web et d'applications avec mise à l'échelle automatique pour gérer des pics de trafic imprévus, souvent couplé avec des équilibreurs de charge et des groupes Auto Scaling.
Infrastructure de développement
Création rapide d'environnements de développement, de test et de staging identiques à la production, facilitant les tests et accélérant les cycles de développement.
Traitement de données
Utilisation d'instances optimisées pour effectuer des analyses de données, du machine learning ou des simulations scientifiques, avec possibilité d'exploiter des instances GPU pour les calculs intensifs.
Traitement par lots
Exécution de jobs programmés ou à la demande, comme le traitement nocturne de données, les sauvegardes ou les rapports, en utilisant des instances Spot pour réduire les coûts.
Industries qui utilisent AWS EC2
Amazon EC2 est utilisé dans pratiquement tous les secteurs d'activité pour une variété de charges de travail: