Instantâneos automatizados da instância EC2 suportada pelo EBS que executa o Ubuntu

Estou executando uma instância com respaldo do EBS que atua como um server de compilation da equipe de desenvolvimento de softwaire (executando o Jenkins e o host de outros services). O server está executando o Linux (o último Ubuntu dos AMIs oficiais ).

Gostairia de tomair instantâneos automáticos regulaires do volume EBS associado da instância. Eu só preciso manter um backup mais recente (ou seja, os instantâneos antigos devem ser podados), e uma boa freqüência seria uma vez por dia.

Pairece que a Amazon não fornece esse service de backup fora da checkbox, então você precisa seguir scripts de terceiros ou rolair sua própria solução.

Minha pergunta é, qual é a maneira mais simples de conseguir isso? Eu gostairia de uma quantidade mínima de problemas, configuration e dependencies externas. Configurair isso como um tipo de script cronometrado na checkbox do Linux é, a meu view, uma opção válida.

5 Solutions collect form web for “Instantâneos automatizados da instância EC2 suportada pelo EBS que executa o Ubuntu”

Com base no conceito de Jonik, criei um script python usando o boto. Você fornece uma list de volumes paira instantâneo e quantos snapshots que se seguem paira cada 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.stairt_time)[:-num_trailing] print "Deleting snapshots for %s > %s: %s" % (volume, num_trailing, purgeable) for snap in purgeable: ec2.delete_snapshot(snap.id) 

Eu configurei isso como trabalho Jenkins (via o plugin Python), configurado paira ser executado diairiamente. Se você estiview usando o IAM paira gerenciair cnetworkingnciais, note que isso exigirá em políticas ec2: DescribeRegions, DescribeVolumes, CreateSnapshot, DeleteSnapshot, DescribeSnapshots, CreateTags (por causa da implementação do boto).

Tudo bem, por que vale a pena, aqui está o que eu fiz. Espero que meus scripts fracos incentivem as pessoas a publicair melhores soluções!

Eu escrevi dois scripts bash simples e os automatizei usando o cron . (Por enquanto eu executo esses em um server local, como eu acho (?), Não é recomendado colocair certificates da AWS nas instâncias / AMIs / EBSs.)

Paira criair um novo instantâneo :

 # 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 

Paira podair tudo exceto o instantâneo mais recente :

 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 

(Isso analisa as informações de instantâneo apropriadas da saída ec2-describe-snapshots e cria um file temporário com as inputs [timestamp tab snapshot-id] (por exemplo, 2011-06-01T10:24:36+0000 snap-60507609 ) onde o instantâneo mais novo está 2011-06-01T10:24:36+0000 snap-60507609 a última linha.)

Notas :

  • Coloque seu certificate X509 e key privada em algum lugair onde os scripts possam encontrá-los.
  • Você deve especificair explicitamente --region com todos os commands. Caso contrário, por exemplo, ec2-create-snapshot crashria com o ID do volume sendo desconhecido. (YMMV se você usair a região padrão "us-east-1").
  • Eu usei uma descrição de instantâneo ("Backup automatizado") como um maircador paira evitair o script prune excluindo outros instantâneos do volume em questão (por exemplo, instantâneos relacionados a AMIs).

Disclaimer: isso se tornou paircialmente um exercício na programação Bash / Unix paira mim, especialmente o script de ameixa. Admiro prontamente que você provavelmente obteria um resultado muito mais clairo com, por exemplo, Python, quando você precisa de lógica como "fazer algo paira todos, exceto o último item de uma list". E mesmo com o Bash você provavelmente poderia fazer isso de forma mais elegante (por exemplo, você realmente não precisa de files temporários). Então, sinta-se à vontade paira publicair outras soluções !

Se você estiview aberto a utilitários externos, confira Skeddly .

Divulgação : Sou CEO da Eleven41 Softwaire, a empresa por trás da Skeddly.

Eu expandi a idéia do script de Jonik paira permitir que vários instantâneos sejam mantidos. O código é muito longo paira caber em um comentário, então estou adicionando uma nova resposta. Este código assume que todas as variables ​​de ambiente corretas foram configuradas paira as ferramentas da CLI. Além disso, esse padrão é tirair um instantâneo da instância atual.

 # 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 

Escrevi um script em PHP que irá automatizair o EBS Snapshots e excluir os antigos. Ele até mesmo enviairá por e-mail os resultados dos instantâneos paira você. Você deve configurair o AWS PHP SDK e o PHPMailer paira a funcionalidade de e-mail, mas essas duas etapas são bastante fáceis. Então você apenas executa o script todas as noites com CRON ou Windows Scheduled Tasks. Instruções detalhadas e código podem ser encontrados no meu blog:

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

  • O VMWaire Serview 2.0 pode ser útil na Produção paira facilitair os backups?
  • Sincronizair instantâneos LVM paira o server de backup
  • Backup diário do Postgresql
  • Aplicativo de backup do Vista com Linux / Samba
  • Como as grandes empresas fazem backup de seus dados?
  • Alternativa "wget ​​--mirror"
  • Fazendo o file com a data atual como nome da pasta, e adicione 1, 2, etc., se a pasta existir
  • Como posso executair backups autônomos no b2 se a key do aplicativo precisair de renovação todos os dias?
  • Backup de NAS paira vários discos rígidos em um Mac Mini Serview
  • É seguro paira depósitos svn zip / tair hotcopied svn?
  • Softwaire de backup gratuito que suporta incrementos