Instantanés automatisés d'une instance EC2 à l'aide d'EBS exécutant Ubuntu

Je lance une instance EBS qui fait office de serveur de création d'une équipe de développement logiciel (exécutant Jenkins et d'autres services). Le serveur exécute Linux (dernier Ubuntu des AMI officiels ).

J'aimerais prendre des instantanés automatiques et réguliers du volume EBS associé à l'instance. Je n'ai besoin que d'une dernière sauvegarde (c'est-à-dire que les anciens instantanés doivent être taillés) et une bonne fréquence serait une fois par jour.

Il semble qu'Amazon ne fournit pas un tel service de sauvegarde hors de la boîte, donc vous devez passer les scripts tiers ou rouler votre propre solution.

Ma question est, quel est le moyen le plus simple d'y parvenir? J'aimerais avoir un minimum de tracas, de configuration et de dépendances externes. Configurer ceci comme une sorte de script chronométré sur la boîte Linux elle-même est, à ma connaissance, une option valide.

5 Solutions collect form web for “Instantanés automatisés d'une instance EC2 à l'aide d'EBS exécutant Ubuntu”

Basé sur le concept de Jonik, j'ai créé un script python à l'aide de boto. Vous fournissez une liste de volumes à l'instantané, et combien de snapshots à garder pour chaque volume:

# Define the snapshots manage. We'll snapshot the specified volume ID, and only keep the X newest ones. snapshots = [("vol-XXXXXXXX", 30), ("vol-YYYYYYYY", 180)] import boto.ec2 auth = {"aws_access_key_id": "YOURACCESSKEY", "aws_secret_access_key": "YOURSECRETKEY"} ec2 = boto.ec2.connect_to_region("YOURREGIONNAME", **auth) description = "automated backup" for volume, num_trailing in snapshots: snaps = ec2.get_all_snapshots(filters={"volume-id": volume, "description": description}) print "%s: Creating new snapshot. %s automated snapshots currently exist." % (volume, len(snaps)) ec2.create_snapshot(volume, description) purgeable = sorted(snaps, key=lambda x: x.start_time)[:-num_trailing] print "Deleting snapshots for %s > %s: %s" % (volume, num_trailing, purgeable) for snap in purgeable: ec2.delete_snapshot(snap.id) 

Je l'ai configuré comme travail de Jenkins (via le plugin Python), configuré pour fonctionner tous les jours. Si vous utilisez IAM pour gérer les informations d'identification, notez que cela nécessitera dans les règles ec2: DescribeRegions, DescribeVolumes, CreateSnapshot, DeleteSnapshot, DescribeSnapshots, CreateTags (en raison de la mise en œuvre de boto).

D'accord, pour ce qu'il vaut, voici ce que j'ai fait. J'espère que mes faibles scripts encouragent les gens à publier de meilleures solutions!

J'ai écrit deux simples scripts bash et les automatisé à l'aide de cron . (Pour le moment, je les exécute sur un serveur local, car je pense (?) Qu'il n'est pas recommandé de mettre les certificats AWS dans les instances / AMI / EBS eux-mêmes.)

Pour créer un nouvel instantané :

 # ESB volume associated with the instance we want to back up: EBS_VOL_ID=vol-xxxxyyyy ec2-create-snapshot --region eu-west-1 -K pk.pem -C cert.pem -d "Automated backup" $EBS_VOL_ID 

Pour tailler tous sauf le dernier instantané :

 EBS_VOL_ID=vol-xxxxyyyy ec2-describe-snapshots --region eu-west-1 -K pk.pem -C cert.pem | grep "Automated backup" | grep "$EBS_VOL_ID" | awk '{ print $5 "\t" $2 }' | sort > .snapshots latest_id=$(tail -n1 .snapshots | awk '{ print $2 }') cat .snapshots | awk '{ print $2 }' > .snapshot_ids for i in $(cat .snapshot_ids) do if [ "$i" != "$latest_id" ] then echo "Deleting snapshot $i" ec2-delete-snapshot --region eu-west-1 -K pk.pem -C cert.pem $i fi done 

(Ceci analyse les informations d'instantané appropriées à partir de la ec2-describe-snapshots et crée un fichier temporaire avec les entrées [timestamp tab snapshot-id] (p. Ex. 2011-06-01T10:24:36+0000 snap-60507609 ) où l'instantané le plus récent est 2011-06-01T10:24:36+0000 snap-60507609 La dernière ligne.)

Notes :

  • Mettez votre certificat X509 et votre clé privée dans un endroit où les scripts peuvent les trouver.
  • Vous devez spécifier explicitement --region avec toutes les commandes. Sinon, par exemple, ec2-create-snapshot échouerait si l'ID du volume était inconnue. (YMMV si vous utilisez la région par défaut "us-east-1").
  • J'ai utilisé une description d'instantané ("Sauvegarde automatisée") comme marqueur pour éviter que le script prune supprime d'autres snapshots du volume en question (p. Ex. Instantanés liés aux IAM).

Disclaimer: Cela est devenu en partie un exercice de programmation Bash / Unix pour moi, en particulier le script prune. Je reconnais volontiers que vous obtiendrez probablement un résultat beaucoup plus clair avec, par exemple, Python, lorsque vous avez besoin d'une logique comme «faire quelque chose pour tous, sauf le dernier élément d'une liste». Et même avec Bash, vous pourriez probablement le faire plus élégamment (par exemple, vous n'avez pas vraiment besoin de fichiers temporaires). Alors, n'hésitez pas à publier d'autres solutions !

Si vous êtes ouvert aux services publics externes, consultez Skeddly .

Divulgation : Je suis le PDG de Eleven41 Software, la société derrière Skeddly.

J'ai développé l'idée du script de Jonik pour permettre la conservation de multiples instantanés. Le code est trop long pour correspondre à un commentaire, alors j'ajoute une nouvelle réponse. Ce code suppose que toutes les variables d'environnement correctes ont été configurées pour les outils CLI. En outre, cela implique de prendre un instantané de l'instance en cours.

 # Look up our instance ID using the magic URL INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) # The number of previous backups we want to keep N=3 # get list of locally attached volumes via EC2 API: VOLUME_LIST=$(ec2-describe-volumes | grep ${INSTANCE_ID} | awk '{ print $2 }') DATE=$(date '+%Y-%m-%d-%H%M%S') sync # actually creating the snapshots for VOLUME in $(echo $VOLUME_LIST); do echo "Processing volume $VOLUME" SNAPSHOT_LIST=$(ec2-describe-snapshots | grep completed | grep "Automatic snapshot" | grep $VOLUME | awk '{print $5 "\t" $2}' | sort | head "--lines=-$N" | awk '{print $2}') ec2-create-snapshot $VOLUME -d "Automatic snapshot on $DATE" for SNAPSHOT in $(echo $SNAPSHOT_LIST); do ec2-delete-snapshot $SNAPSHOT done done 

J'ai écrit un script en PHP qui automatisera EBS Snapshots et supprime les anciens. Il vous enverra même les résultats des instantanés. Vous devez configurer AWS PHP SDK et PHPMailer pour la fonctionnalité de messagerie, mais ces deux étapes sont assez simples. Ensuite, vous exécutez le script tous les soirs avec CRON ou Windows Scheduled Tasks. Des instructions et un code détaillés peuvent être trouvés sur mon blog:

http://www.caleblloyd.com/software/automatically-take-ebs-snapshots-and-delete-old-ones-with-php-script/

  • CloudBerry Backup (Linux) vers Amazon Glacier
  • Les nombres maximums pour les assemblys de filesystems sous Linux
  • Besoin de conseils sur un deployment
  • Exemples de sauvegarde EC2
  • S3 Interfaces pour sauvegarde, etc.
  • Comment puis-je sauvegarder un godet AWS S3 sans versionner le seau source
  • Amazon S3 versioning est-il vraiment une option de sauvegarde raisonnable?
  • Plan efficace pour sauvegarder l'instance EC2, les volumes EBS et les bases RDS
  • Comment conserver MinIO sauvegardé?
  • Sauvegarde des données stockées sur Amazon S3
  • Comment démonter un périphérique si un autre est monté sur le même path
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.