subir precios online nube aws archivos amazon-s3 backup

precios - ¿Cómo puedo hacer una copia de seguridad o sincronizar un depósito de Amazon S3?



backup online precios (4)

La mejor manera sería tener la capacidad de sincronizar mi grupo con un grupo nuevo en una región diferente en caso de pérdida de datos.

A partir del 24 de marzo de 2015 , esto es posible mediante la función de replicación entre regiones de S3.

Uno de los Escenarios de caso de uso enumerados es "requisitos de cumplimiento", que parece coincidir con su caso de uso de protección adicional de datos críticos contra la pérdida de datos:

Aunque, de forma predeterminada, Amazon S3 almacena sus datos en múltiples Zonas de disponibilidad geográficamente distantes, los requisitos de cumplimiento pueden dictar que almacene los datos a distancias aún más lejanas. La replicación entre regiones le permite replicar datos entre regiones de AWS distantes para satisfacer estos requisitos de cumplimiento.

Consulte Cómo configurar la replicación entre regiones para obtener instrucciones de configuración.

Tengo datos críticos en un cubo de Amazon S3. Quiero hacer una copia de seguridad semanal de sus otros contenidos en otro servicio en la nube, o incluso dentro de S3. La mejor manera sería sincronizar mi grupo con un nuevo grupo dentro de una región diferente, en caso de pérdida de datos.

¿Cómo puedo hacer eso?


Este script respalda un cubo S3:

#!/usr/bin/env python from boto.s3.connection import S3Connection import re import datetime import sys import time def main(): s3_ID = sys.argv[1] s3_key = sys.argv[2] src_bucket_name = sys.argv[3] num_backup_buckets = sys.argv[4] connection = S3Connection(s3_ID, s3_key) delete_oldest_backup_buckets(connection, num_backup_buckets) backup(connection, src_bucket_name) def delete_oldest_backup_buckets(connection, num_backup_buckets): """Deletes the oldest backup buckets such that only the newest NUM_BACKUP_BUCKETS - 1 buckets remain.""" buckets = connection.get_all_buckets() # returns a list of bucket objects num_buckets = len(buckets) backup_bucket_names = [] for bucket in buckets: if (re.search(''backup-'' + r''/d{4}-/d{2}-/d{2}'' , bucket.name)): backup_bucket_names.append(bucket.name) backup_bucket_names.sort(key=lambda x: datetime.datetime.strptime(x[len(''backup-''):17], ''%Y-%m-%d'').date()) # The buckets are sorted latest to earliest, so we want to keep the last NUM_BACKUP_BUCKETS - 1 delete = len(backup_bucket_names) - (int(num_backup_buckets) - 1) if delete <= 0: return for i in range(0, delete): print ''Deleting the backup bucket, '' + backup_bucket_names[i] connection.delete_bucket(backup_bucket_names[i]) def backup(connection, src_bucket_name): now = datetime.datetime.now() # the month and day must be zero-filled new_backup_bucket_name = ''backup-'' + str(''%02d'' % now.year) + ''-'' + str(''%02d'' % now.month) + ''-'' + str(now.day); print "Creating new bucket " + new_backup_bucket_name new_backup_bucket = connection.create_bucket(new_backup_bucket_name) copy_bucket(src_bucket_name, new_backup_bucket_name, connection) def copy_bucket(src_bucket_name, dst_bucket_name, connection, maximum_keys = 100): src_bucket = connection.get_bucket(src_bucket_name); dst_bucket = connection.get_bucket(dst_bucket_name); result_marker = '''' while True: keys = src_bucket.get_all_keys(max_keys = maximum_keys, marker = result_marker) for k in keys: print ''Copying '' + k.key + '' from '' + src_bucket_name + '' to '' + dst_bucket_name t0 = time.clock() dst_bucket.copy_key(k.key, src_bucket_name, k.key) print time.clock() - t0, '' seconds'' if len(keys) < maximum_keys: print ''Done backing up.'' break result_marker = keys[maximum_keys - 1].key if __name__ ==''__main__'':main()

Utilizo esto en una tarea de rake (para una aplicación Rails):

desc "Back up a file onto S3" task :backup do S3ID = "AKIAJM3FAKEFAKENRWVQ" S3KEY = "0A5kuzV+F1pbaMjZxHQAZfakedeJd0dfakeNpry" SRCBUCKET = "primary-mzgd" NUM_BACKUP_BUCKETS = 2 Dir.chdir("#{Rails.root}/lib/tasks") system "./do_backup.py #{S3ID} #{S3KEY} #{SRCBUCKET} #{NUM_BACKUP_BUCKETS}" end


He intentado hacer esto en el pasado, y todavía es molesto, especialmente con grandes, múltiples GB, muchos millones de archivos de archivos. La mejor solución que encontré fue S3S3Mirror , que se creó exactamente para este propósito.

No es tan trivial como simplemente apretar un interruptor, pero sigue siendo mejor que la mayoría de las otras soluciones de bricolaje que he probado. Es multihilo y copiará los archivos mucho más rápido que los enfoques de un solo hilo similares.

Una sugerencia: configúrelo en una instancia de EC2 separada, y una vez que la ejecute, simplemente apague la máquina pero deje la AMI allí. Luego, cuando necesite volver a ejecutar, encienda la máquina nuevamente y estará listo. Esto no es tan bueno como una solución realmente automatizada, pero es manejable para copias de seguridad mensuales o semanales.


Prefiero hacer una copia de seguridad local usando sync donde solo se actualizan los cambios. Esa no es la solución de copia de seguridad perfecta, pero puede implementar actualizaciones periódicas más adelante, según sea necesario:

s3cmd sync --delete-removed s3://your-bucket-name/ /path/to/myfolder/

Si nunca usó s3cmd, instálelo y configúrelo usando:

pip install s3cmd s3cmd --configure

También debería haber servicios de copia de seguridad de S3 por $ 5 / mes, pero también verifico Amazon Glacier, que le permite colocar un archivo de almacenamiento único de casi 40 GB si usa una carga de varias partes.

http://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html#qfacts

Recuerde, si su cuenta S3 está comprometida, tiene la oportunidad de perder todos sus datos, ya que sincronizaría una carpeta vacía o archivos con formato incorrecto. Por lo tanto, es mejor que escriba un script para archivar su copia de seguridad varias veces, por ejemplo, al detectar el inicio de la semana.

Actualización 01/17/2016:

AWS CLI basado en Python está muy maduro ahora.

Utilice: https://github.com/aws/aws-cli
Ejemplo: aws s3 sync s3://mybucket .