Cet article détaille la mise en place d'une architecture LAMP (Linux, Apache, MySQL, PHP) robuste pour un site de commerce électronique, en utilisant les services AWS pour garantir haute disponibilité et élasticité.
I. Configuration du réseau
1. Création du VPC
- Connectez-vous à la Console de gestion AWS et accédez au service VPC.
- Cliquez sur "Créer un VPC". Nommez-le
ecommerce-vpcet définissez le bloc CIDR sur10.0.0.0/16.
2. Segmentation en sous-réseaux
- Dans la section "Sous-réseaux", cliquez sur "Créer un sous-réseau".
- Pour la zone de disponibilité
cn-north-1a:- Sous-réseau public : Nommez-le
public-subnet-1aavec le bloc CIDR10.0.1.0/24. Associez-le au VPC. - Sous-réseau privé : Nommez-le
private-subnet-1aavec le bloc CIDR10.0.101.0/24. Associez-le au VPC.
- Sous-réseau public : Nommez-le
- Pour la zone de disponibilité
cn-north-1b:- Sous-réseau public : Nommez-le
public-subnet-1bavec le bloc CIDR10.0.2.0/24. Associez-le au VPC. - Sous-réseau privé : Nommez-le
private-subnet-1bavec le bloc CIDR10.0.102.0/24. Associez-le au VPC.
- Sous-réseau public : Nommez-le
3. Configuration des tables de routage
- Table de routage pour sous-réseaux publics :
- Créez une table nommée
public-route-table. Ajoutez une route0.0.0.0/0pointant vers une passerelle Internet (IGW). - Associez les deux sous-réseaux publics à cette table.
- Créez une table nommée
- Table de routage pour sous-réseaux privés :
- Créez une table nommée
private-route-table. Configurez une passerelle NAT (associée à une adresse IP Elastic) dans la section "Passerelles NAT". Ajoutez une route0.0.0.0/0pointant vers cette passerelle NAT. - Associez les deux sous-réseaux privés à cette table.
- Créez une table nommée
II. Équilibrage de charge et mise à l'échelle automatique
1. Création d'un équilibreur de charge d'application (ALB)
- Accédez au service Elastic Load Balancing, puis cliquez sur "Créer un équilibreur de charge".
- Choisissez Application Load Balancer. Nommez-le
ecommerce-alb. Configurez-le comme "Orienté Internet". Sélectionnez les sous-réseaux publics. - Configurez le port d'écoute sur
8001avec le protocoleHTTP. - Configurez le groupe cible : Nommez-le
ecommerce-target-group. Port :8001. Chemin de vérification de l'état :/health.php(à implémenter dans EC2). Intervalle :30secondes, Délai d'attente :5secondes, Seuils non sains :3. - Cliquez sur "Créer" et notez le nom DNS de l'ALB.
2. Création d'un modèle de lancement EC2
- Accédez à "Modèles de lancement" et cliquez sur "Créer un modèle de lancement".
- Nommez-le
lamp-launch-template. Choisissez une AMI appropriée (par ex., Amazon Linux 2) et un type d'instance (par ex.,t2.micro). - Pour la configuraton réseau, sélectionnez le VPC
ecommerce-vpc. Désactivez l'attribution automatique d'IP publiques car les instances seront dans des sous-réseaux privés. - Configuration du groupe de sécurité : Créez un nouveau groupe de sécurité (
ec2-sg). Ajoutez une règle autorisant le port8001depuis le groupe de sécurité de l'ALB. Ajoutez une règle autorisant le port22depuis l'adresse IP de votre machine bastion (à créer ultérieurement). - Configuration des données utilisateur : Dans la section "Données utilisateur", sélectionnez "En tant que texte" et insérez le script suivant : ```
#!/bin/bash
sudo dnf update -y
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm
sudo dnf install httpd php mysql-server -y
if [ $? -eq 0 ]; then
sudo systemctl start httpd
sudo systemctl enable httpd
mkdir -p /var/www/html
echo "" > /var/www/html/health.php
if [ -f /etc/httpd/conf/httpd.conf ]; then
sudo sed -i 's/Listen 80/Listen 8001/g' /etc/httpd/conf/httpd.conf
fi
sudo systemctl restart httpd
else
echo "Échec de l'installation de httpd ou mysql-server."
fi
- Cliquez sur "Créer" pour finaliser le modèle de lancement.
3. Configuration du groupe de mise à l'échelle automatique (ASG)
- Accédez au service Groupes Auto Scaling.
- Cliquez sur "Créer un groupe Auto Scaling". Sélectionnez le modèle de lancement
lamp-launch-template. - Nommez le groupe
ecommerce-asg. Sélectionnez le VPCecommerce-vpcet choisissez les deux zones de disponibilitécn-north-1aetcn-north-1b. - Définissez le nombre minimal d'instances à
2, maximal à10, et le nombre souhaité à2. - Stratégie d'extension : Sélectionnez "Suivi de cible" et définissez l'objectif de maintenir l'utilisation du CPU à
60%. - Association au groupe cible : Dans la section "Ajouter des instances aux groupes cibles de l'équilibreur de charge", sélectionnez le groupe cible
ecommerce-target-group. - Cliquez sur "Créer" pour finaliser la création de l'ASG.
III. Base de données et mise en cache
1. Création d'une instance RDS (Amazon Aurora)
- Accédez au service RDS et cliquez sur "Créer une base de données".
- Choisissez "Création standard".
- Configuration de la base de données :
- Moteur : Amazon Aurora (choisissez la version appropriée).
- Modèle : "Développement / Test".
- Spécifications de l'instance :
db.t3.medium, Stockage :80 Go. - Déploiement multi-AZ : Cochez "Activer" pour la haute disponibilité.
- Identifiants de base de données : Nom d'utilisateur
ecommuser, Mot de passeSecurePass123!. - Nom de la base de données :
ecommerce_db. - Groupe de sous-réseaux : Sélectionnez un groupe de sous-réseaux contenant vos sous-réseaux privés (
private-subnet-1a,private-subnet-1b). - Groupe de sécurité : Créez un nouveau groupe (
rds-sg) autorisant l'accès au port3306depuis les plages d'adresses IP privées de vos instances EC2.
- Cliquez sur "Créer une base de données". Attendez que le statut devienne "Disponible".
2. Déploiement de Memcached (ElastiCache)
- Accédez au service ElastiCache et cliquez sur "Créer un cluster".
- Moteur : Memcached.
- Configuration du cluster :
- Type de nœud :
t1.microout2.micro. Nombre de nœuds :2(un dans chaque zone de disponibilité). - Groupe de sous-réseaux : Sélectionnez le groupe de sous-réseaux privés.
- Groupe de sécurité : Créez un nouveau groupe (
memcached-sg) autorisant l'accès au port11211depuis le groupe de sécurité de vos instances EC2.
- Type de nœud :
- Cliquez sur "Créer" et attendez que le statut devienne "Disponible".
IV. Configuration du stockage
1. Stockage de contenu statique avec S3
- Accédez au service S3 et cliquez sur "Créer un compartiment".
- Nommez le compartiment de manière unique (par ex.,
ecommerce-static-chaîne aléatoire). Sélectionnez la région appropriée. - Configurez les propriétés du compartiment (contrôle de version, chiffrement).
- Cliquez sur "Créer".
- Téléchargez vos fichiers statiques (CSS, images). Après le téléchargement, accédez aux propriétés de chaque fichier et définissez leur autorisation sur "Lecture publique".
2. Stockage de fichiers partagés avec EFS
- Accédez au service EFS et cliquez sur "Créer un système de fichiers".
- Nommez le système de fichiers
ecommerce-efs. Sélectionnez le VPCecommerce-vpc. - Ajoutez des cibles de montage pour chacun de vos sous-réseaux privés (
private-subnet-1aetprivate-subnet-1b). - Modifiez les données utilisateur du modèle de lancement EC2 (
lamp-launch-template) pour inclure le montage du système de fichiers EFS : ``` sudo yum install -y amazon-efs-utils mkdir /var/www/efs mount -t efs -o tls <ID_DU_SYSTEME_DE_FICHIERS> /var/www/efs # Remplacez <ID_DU_SYSTEME_DE_FICHIERS>
V. Sécurité et administration
1. Déploiement d'une machine bastion
- Dans le service EC2, lancez une instance. Sélectionnez une AMI (par ex., Amazon Linux 2) et un type d'instance (par ex.,
t2.micro). - Sélectionnez le VPC
ecommerce-vpcet un sous-réseau public (par ex.,public-subnet-1a). - Créez un groupe de sécurité (
bastion-sg) autorisant le port22uniquement depuis votre adresse IP administrateur. - Lancez l'instance. Elle servira de point d'entrée sécurisé pour accéder aux instances dans les sous-réseaux privés.
2. Révision des groupes de sécurité
- ALB (
ecommerce-alb) : Assurez-vous que le trafic entrant sur le port8001est autorisé depuis0.0.0.0/0(ou une plage d'IP plus restrictive). - EC2 (
ec2-sg) : Vérifiez l'autorisation du port8001depuis le groupe de sécurité de l'ALB, et du port22depuis le groupe de sécurité de la machine bastion. - RDS (
rds-sg) : Confirmez l'autorisation du port3306depuis les adresses IP privées des instances EC2. - Memcached (
memcached-sg) : Vérifiez l'autorisation du port11211depuis le groupe de sécurité des instances EC2.
VI. Validation et surveillance
1. Validation de l'accès au site
- Accédez au site en utilisant le nom DNS de l'ALB (par ex.,
http://ecommerce-alb-xxxxxx.cn-north-1.elb.amazonaws.com.cn:8001). Vous devriez voir la page d'informations PHP. - Téléchargez une image sur S3, référencez-la dans une page HTML et vérifiez qu'elle se charge correctement. Modifiez le fichier
/var/www/html/health.php(ou un autre fichier de test) comme suit : ``` - Si l'image ne s'affiche pas, vérifiez les permissions du compartiment S3. Assurez-vous que les objets sont accessibles publiquement, soit via les paramètres d'accès public du compartiment, soit via une politique de compartiment : ```
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ecommerce-static1/"
}
]
}
2. Test de mise à l'échelle automatique
- Utilisez un outil de simulation de charge comme Locust pour générer du trafic vers votre site.
- Surveillez l'utilisation du CPU des instances EC2 via CloudWatch. Observez si le groupe Auto Scaling ajoute ou supprime des enstances lorsque l'utilisation du CPU dépasse ou descend en dessous du seuil de 60%.