Publié à l'origine sur mon blog: http://eladnava.com/backing-up-your-amazon-s3-buckets-to-ec2/
Synchronisez régulièrement votre compartiment S3 avec un serveur EC2
Cela peut être facilement réalisé en utilisant plusieurs utilitaires de ligne de commande qui permettent de synchroniser un compartiment S3 distant avec le système de fichiers local.
s3cmd
Au début, s3cmd
semblait extrêmement prometteur. Cependant, après l'avoir essayé sur mon énorme compartiment S3 - il n'a pas réussi à évoluer, erreur avec un Segmentation fault
. Cela fonctionnait bien sur de petits seaux, cependant. Comme cela ne fonctionnait pas pour d'énormes seaux, je me suis mis à trouver une alternative.
s4cmd
La nouvelle alternative multithread à s3cmd
. Cela avait l'air encore plus prometteur, cependant, j'ai remarqué qu'il continuait à télécharger des fichiers qui étaient déjà présents sur le système de fichiers local. Ce n'est pas le genre de comportement que j'attendais de la commande sync. Il devrait vérifier si le fichier distant existe déjà localement (la vérification du hachage / taille du fichier serait bien) et l'ignorer lors de la prochaine synchronisation sur le même répertoire cible. J'ai ouvert un numéro ( bloomreach / s4cmd / # 46 ) pour signaler ce comportement étrange. En attendant, je me suis mis à trouver une autre alternative.
awscli
Et puis j'ai trouvé awscli
. Il s'agit de l'interface de ligne de commande officielle d'Amazon pour interagir avec leurs différents services cloud, S3 inclus.
Il fournit une commande de synchronisation utile qui télécharge rapidement et facilement les fichiers de compartiment distant sur votre système de fichiers local .
$ aws s3 sync s3: // nom-de-votre-bucket / home / ubuntu / s3 / nom-de-votre-bucket /
Avantages:
- Évolutif - prend en charge d'énormes compartiments S3
- Multi-thread - synchronise les fichiers plus rapidement en utilisant plusieurs threads
- Intelligent - ne synchronise que les fichiers nouveaux ou mis à jour
- Rapide - grâce à sa nature multi-thread et à son algorithme de synchronisation intelligent
Suppression accidentelle
Idéalement, le sync
commande ne supprimera pas les fichiers du dossier de destination (système de fichiers local) s'ils sont absents de la source (compartiment S3), et vice-versa. C'est parfait pour sauvegarder S3 - au cas où des fichiers seraient supprimés du compartiment, la resynchronisation ne les supprimera pas localement. Et si vous supprimez un fichier local, il ne sera pas non plus supprimé du bucket source.
Configurer awscli sur Ubuntu 14.04 LTS
Commençons par installer awscli
. Il existe plusieurs façons de le faire, cependant, j'ai trouvé qu'il était plus simple de l'installer via apt-get
.
$ sudo apt-get install awscli
Configuration
Ensuite, nous devons configurer awscli
avec notre ID de clé d'accès et notre clé secrète, que vous devez obtenir auprès d' IAM , en créant un utilisateur et en attachant la stratégie AmazonS3ReadOnlyAccess . Cela vous empêchera également, vous ou toute personne ayant accès à ces informations d'identification, de supprimer vos fichiers S3. Assurez-vous de saisir votre région S3, par exemple us-east-1
.
$ aws configurer
Préparation
Préparons le répertoire de sauvegarde S3 local, de préférence au format /home/ubuntu/s3/{BUCKET_NAME}
. Assurez-vous de le remplacer {BUCKET_NAME}
par le nom réel de votre bucket.
$ mkdir -p / home / ubuntu / s3 / {BUCKET_NAME}
Synchronisation initiale
Allons-y et synchronisons le bucket pour la première fois avec la commande suivante:
$ aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
En supposant que le compartiment existe, les informations d'identification AWS et la région sont correctes et le dossier de destination est valide, awscli
commencera à télécharger le compartiment entier sur le système de fichiers local.
En fonction de la taille du compartiment et de votre connexion Internet, cela peut prendre de quelques secondes à quelques heures. Lorsque cela est fait, nous allons mettre en place une tâche cron automatique pour maintenir la copie locale du bucket à jour.
Configurer un travail Cron
Allez-y et créez un sync.sh
fichier dans /home/ubuntu/s3
:
$ nano /home/ubuntu/s3/sync.sh
Copiez et collez le code suivant dans sync.sh
:
#! / bin / sh
# Écho la date et l'heure actuelles
écho '-----------------------------'
Date
écho '-----------------------------'
écho ''
# Initialisation du script d'écho
echo 'Synchronisation du compartiment S3 distant ...'
# Exécutez en fait la commande de synchronisation (remplacez {BUCKET_NAME} par le nom de votre compartiment S3)
/ usr / bin / aws s3 sync s3: // {BUCKET_NAME} / home / ubuntu / s3 / {BUCKET_NAME} /
# Achèvement du script d'écho
echo 'Synchronisation terminée'
Assurez-vous de remplacer {BUCKET_NAME} par le nom de votre compartiment S3, deux fois tout au long du script.
/usr/bin/aws
Conseil de pro: vous devriez utiliser pour créer un lien vers le aws
binaire, car il crontab
exécute des commandes dans un environnement shell limité et ne pourra pas trouver l'exécutable par lui-même.
Ensuite, assurez-vous que chmod
le script peut être exécuté par crontab
.
$ sudo chmod + x /home/ubuntu/s3/sync.sh
Essayons d'exécuter le script pour nous assurer qu'il fonctionne réellement:
$ /home/ubuntu/s3/sync.sh
La sortie doit être similaire à ceci:
Ensuite, éditons l'utilisateur actuel crontab
en exécutant la commande suivante:
$ crontab -e
Si c'est votre première exécution crontab -e
, vous devrez sélectionner un éditeur préféré. Je recommanderais de sélectionner nano
car c'est le plus facile à utiliser pour les débutants.
Fréquence de synchronisation
Nous devons dire à crontab
quelle fréquence exécuter notre script et où le script réside sur le système de fichiers local en écrivant une commande. Le format de cette commande est le suivant:
commande mh dom mon dow
La commande suivante se configure crontab
pour exécuter le sync.sh
script toutes les heures (spécifié via les paramètres minute: 0 et hour: *) et pour qu'il redirige la sortie du script vers un sync.log
fichier dans notre s3
répertoire:
0 * * * * /home/ubuntu/s3/sync.sh> /home/ubuntu/s3/sync.log
Vous devez ajouter cette ligne au bas du crontab
fichier que vous modifiez. Ensuite, continuez et enregistrez le fichier sur le disque en appuyant sur Ctrl + W puis sur Entrée . Vous pouvez ensuite quitter nano
en appuyant sur Ctrl + X . crontab
va maintenant exécuter la tâche de synchronisation toutes les heures.
Conseil de pro: vous pouvez vérifier que le travail cron horaire est exécuté avec succès en inspectant /home/ubuntu/s3/sync.log
, en vérifiant son contenu pour la date et l'heure d'exécution, et en inspectant les journaux pour voir quels nouveaux fichiers ont été synchronisés.
Tout est prêt! Votre compartiment S3 sera désormais automatiquement synchronisé avec votre serveur EC2 toutes les heures, et vous devriez être prêt à partir. Notez qu'avec le temps, à mesure que votre compartiment S3 s'agrandit, vous devrez peut-être augmenter la taille du volume EBS de votre serveur EC2 pour accueillir de nouveaux fichiers. Vous pouvez toujours augmenter la taille de votre volume EBS en suivant ce guide .