# 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"aws s3api create-bucket \
--bucket $BUCKET \
--region $REGION_CIBLE \
--create-bucket-configuration LocationConstraint=$REGION_CIBLELe bucket est créé en Irlande pour éviter les frais de transfert inter-régions côté destination.
# 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_*.sqlaws 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# 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_CIBLERemarque : On ne crée pas d'archive pour éviter les problèmes d'espace disque sur l'instance source.
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.
# Ubuntu
sudo apt-get update
sudo apt-get -y install git binutils
mkdir -p /tmp/migration
aws s3 sync s3://$BUCKET/database/ /tmp/migration/ --region $REGION_CIBLE
ls -lh /tmp/migration/*.sqlmysql \
-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';"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# 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
eazytrainingde EFS via le nom de domaine fourni par AWS.- La synchronisation se fait depuis le bastion, qui doit avoir accès à EFS et à S3.
Dans GoDaddy, mettre le TTL de l'enregistrement eazytraining.fr à 600 secondes (10 min).
À 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_*.sqlRécupérer le domaine CloudFront après terraform apply :
terraform output cloudfront_domain
# ou depuis la console AWS CloudFrontSur GoDaddy, modifier :
| Type | Nom | Valeur |
|---|---|---|
CNAME |
www |
xxxx.cloudfront.net |
CNAME |
@ |
xxxx.cloudfront.net |
# 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"# Vider puis supprimer le bucket
aws s3 rm s3://$BUCKET --recursive --region $REGION_CIBLE
aws s3api delete-bucket --bucket $BUCKET --region $REGION_CIBLE# 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_SOURCEAttendre 48h avant de terminer l'instance pour s'assurer que tout fonctionne.