Construction d'un site de commerce électronique LAMP hautement disponible et évolutif

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-vpc et définissez le bloc CIDR sur 10.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-1a avec le bloc CIDR 10.0.1.0/24. Associez-le au VPC.
    • Sous-réseau privé : Nommez-le private-subnet-1a avec le bloc CIDR 10.0.101.0/24. Associez-le au VPC.
  • Pour la zone de disponibilité cn-north-1b :
    • Sous-réseau public : Nommez-le public-subnet-1b avec le bloc CIDR 10.0.2.0/24. Associez-le au VPC.
    • Sous-réseau privé : Nommez-le private-subnet-1b avec le bloc CIDR 10.0.102.0/24. Associez-le au VPC.

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 route 0.0.0.0/0 pointant vers une passerelle Internet (IGW).
    • Associez les deux sous-réseaux publics à cette table.
  • 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 route 0.0.0.0/0 pointant vers cette passerelle NAT.
    • Associez les deux sous-réseaux privés à cette table.

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 8001 avec le protocole HTTP.
  • 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 : 30 secondes, Délai d'attente : 5 secondes, 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 port 8001 depuis le groupe de sécurité de l'ALB. Ajoutez une règle autorisant le port 22 depuis 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 VPC ecommerce-vpc et choisissez les deux zones de disponibilité cn-north-1a et cn-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 passe SecurePass123!.
    • 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 port 3306 depuis 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.micro ou t2.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 port 11211 depuis le groupe de sécurité de vos instances EC2.
  • 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 VPC ecommerce-vpc.
  • Ajoutez des cibles de montage pour chacun de vos sous-réseaux privés (private-subnet-1a et private-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-vpc et un sous-réseau public (par ex., public-subnet-1a).
  • Créez un groupe de sécurité (bastion-sg) autorisant le port 22 uniquement 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 port 8001 est autorisé depuis 0.0.0.0/0 (ou une plage d'IP plus restrictive).
  • EC2 (ec2-sg) : Vérifiez l'autorisation du port 8001 depuis le groupe de sécurité de l'ALB, et du port 22 depuis le groupe de sécurité de la machine bastion.
  • RDS (rds-sg) : Confirmez l'autorisation du port 3306 depuis les adresses IP privées des instances EC2.
  • Memcached (memcached-sg) : Vérifiez l'autorisation du port 11211 depuis 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%.

Étiquettes: aws VPC ALB EC2 Auto Scaling

Publié le 5 août à 08h45