Skip to content

Latest commit

 

History

History
274 lines (188 loc) · 6.19 KB

File metadata and controls

274 lines (188 loc) · 6.19 KB

Plan de migration : Paris (eu-west-3) → Irlande (eu-west-1)

Variables à adapter avant de lancer les commandes

# Régions
REGION_SOURCE="eu-west-3"           # Paris  (source)
REGION_CIBLE="eu-west-1"            # Irlande (destination)

# S3 bucket intermédiaire
BUCKET="migration-temp-eazytraining"

# Base de données source (RDS Paris)
RDS_SOURCE="eazytraining-instance-db.cjybsregwr2r.eu-west-3.rds.amazonaws.com"
DB_USER="eazytraining"
DB_NAME="eazytraining"
DB_PASSWORD="eazytraining"


# Base de données cible (RDS Irlande)
RDS_CIBLE="eazytraining-rds.cbg0wwkig9eh.eu-west-1.rds.amazonaws.com"
WORDPRESS_DB_NAME="eazytraining"
WORDPRESS_DB_USER="eazytraining"
WORDPRESS_DB_PASSWORD="eazytraining"

# Fichiers WordPress sur EC2 Paris
WP_SOURCE_DIR="/home/centos/site-vitrine/eazytraining/"


# EFS Irlande
EFS_DOMAIN="<efs-id>.efs.eu-west-1.amazonaws.com"
EFS_MOUNT="/home/ec2-user/eazytraining"

PHASE 1 — Depuis l'EC2 Paris (eu-west-3)

Étape 1 — Créer le bucket S3 intermédiaire (depuis Paris)

aws s3api create-bucket \
  --bucket $BUCKET \
  --region $REGION_CIBLE \
  --create-bucket-configuration LocationConstraint=$REGION_CIBLE

Le bucket est créé en Irlande pour éviter les frais de transfert inter-régions côté destination.


Étape 2 — Dump de la base de données MySQL

# Dump complet avec transaction cohérente (sans interruption de service)
sudo mysqldump \
  -h $RDS_SOURCE \
  -u $DB_USER \
  -p$DB_PASSWORD \
  --single-transaction \
  --routines \
  --triggers \
  --no-tablespaces \
  --databases $DB_NAME \
  > /tmp/dump_eazytraining_$(date +%Y%m%d_%H%M%S).sql

# Vérifier que le dump n'est pas vide
wc -l /tmp/dump_eazytraining_*.sql

Étape 3 — Upload du dump vers S3 (depuis Paris vers Irlande)

aws s3 cp /tmp/ s3://$BUCKET/database/ \
  --recursive \
  --exclude "*" \
  --include "dump_eazytraining_*.sql" \
  --region $REGION_CIBLE

# Vérifier
aws s3 ls s3://$BUCKET/database/ --region $REGION_CIBLE

Étape 4 — Synchroniser les fichiers WordPress vers S3 (depuis Paris vers Irlande)

# Synchronisation directe du dossier WordPress vers S3 (pas d'archive, pas de compression)
aws s3 sync $WP_SOURCE_DIR s3://$BUCKET/wordpress/ --region $REGION_CIBLE --delete

# Vérifier
aws s3 ls s3://$BUCKET/wordpress/ --region $REGION_CIBLE

Remarque : On ne crée pas d'archive pour éviter les problèmes d'espace disque sur l'instance source.


PHASE 2 — Depuis un bastion/instance EC2 en Irlande (eu-west-1)

Prérequis : une EC2 temporaire dans le VPC Irlande avec accès au RDS et à l'EFS (sous-réseaux privés). Le rôle IAM de cette instance doit avoir accès à S3, RDS et EFS.


Étape 6 — Installer les outils nécessaires

# Ubuntu
sudo apt-get update
sudo apt-get -y install git binutils

Étape 7 — Télécharger le dump depuis S3 (en Irlande)

mkdir -p /tmp/migration

aws s3 sync s3://$BUCKET/database/ /tmp/migration/ --region $REGION_CIBLE


ls -lh /tmp/migration/*.sql

Étape 8 — Importer la base de données dans le RDS Irlande

mysql \
  -h $RDS_CIBLE \
  -u $DB_USER \
  -p$DB_PASSWORD \
  $DB_NAME < /tmp/migration/dump_eazytraining_*.sql

# Vérifier le nombre de tables importées
mysql -h $RDS_CIBLE -u $DB_USER -p$DB_PASSWORD \
  -e "SELECT COUNT(*) AS nb_tables FROM information_schema.tables WHERE table_schema='$DB_NAME';"

Étape 9 — Monter EFS sur le bastion via le nom de domaine

sudo mkdir -p $EFS_MOUNT
sudo mount -t efs -o tls,accesspoint=fsap-0916fb0c79207f40a fs-06e8b2998796b035e:/ $EFS_MOUNT

# Vérifier le montage
df -h $EFS_MOUNT

Étape 10 — Synchroniser les fichiers WordPress depuis S3 vers EFS (via le bastion)

# Synchronisation depuis S3 vers le dossier EFS monté
aws s3 sync s3://$BUCKET/wordpress/wp-content/uploads/ $EFS_MOUNT/wp-content/uploads/ --region $REGION_CIBLE

# Vérifier
ls -la $EFS_MOUNT/

Remarque :

  • On monte directement le répertoire eazytraining de EFS via le nom de domaine fourni par AWS.
  • La synchronisation se fait depuis le bastion, qui doit avoir accès à EFS et à S3.

PHASE 3 — Bascule DNS (GoDaddy)

Étape 11 — Baisser le TTL 24h avant la bascule

Dans GoDaddy, mettre le TTL de l'enregistrement eazytraining.fr à 600 secondes (10 min).


Étape 12 — Dump final (delta) juste avant la bascule

À faire après avoir mis le site en mode maintenance sur l'EC2 Paris.

# Sur EC2 Paris – dump final
mysqldump \
  -h $RDS_SOURCE \
  -u $DB_USER \
  -p$DB_PASSWORD \
  --single-transaction \
  --databases $DB_NAME \
  > /tmp/dump_final_$(date +%Y%m%d_%H%M%S).sql

aws s3 cp /tmp/dump_final_*.sql \
  s3://$BUCKET/database/final/ \
  --region $REGION_CIBLE
# Sur bastion Irlande – import du dump final
aws s3 cp s3://$BUCKET/database/final/ /tmp/migration/final/ \
  --recursive \
  --region $REGION_CIBLE

mysql \
  -h $RDS_CIBLE \
  -u $DB_USER \
  -p$DB_PASSWORD \
  $DB_NAME < /tmp/migration/final/dump_final_*.sql

Étape 13 — Changer le CNAME sur GoDaddy

Récupérer le domaine CloudFront après terraform apply :

terraform output cloudfront_domain
# ou depuis la console AWS CloudFront

Sur GoDaddy, modifier :

Type Nom Valeur
CNAME www xxxx.cloudfront.net
CNAME @ xxxx.cloudfront.net

Étape 14 — Vérification finale

# Tester la résolution DNS
nslookup eazytraining.fr
curl -I https://eazytraining.fr

# Vérifier les headers CloudFront
curl -sI https://eazytraining.fr | grep -i "x-cache\|via\|server"

PHASE 4 — Nettoyage

Étape 15 — Supprimer le bucket S3 temporaire

# Vider puis supprimer le bucket
aws s3 rm s3://$BUCKET --recursive --region $REGION_CIBLE
aws s3api delete-bucket --bucket $BUCKET --region $REGION_CIBLE

Étape 16 — Arrêter l'EC2 Paris

# Depuis la console AWS ou CLI – arrêter (pas supprimer) dans un premier temps
aws ec2 stop-instances \
  --instance-ids <id-instance-ec2-paris> \
  --region $REGION_SOURCE

Attendre 48h avant de terminer l'instance pour s'assurer que tout fonctionne.