Tengo un depósito s3 con más de un millón de archivos y alrededor de mil archivos agregados cada día por varias aplicaciones en varias carpetas.
También me gustaría descargar y conservar todos los archivos localmente, en un servidor Linux. ¿Cuál sería la mejor manera de descargar todos los archivos una vez y luego descargar solo archivos nuevos, digamos los que se cargaron durante las 24 horas anteriores?
Entiendo que Amazon cobra por enumerar cada archivo s3, por lo que no quiero enumerar todos los archivos todos los días y luego descargar los archivos más recientes.
Intenté hacerlo con el siguiente manual y funciona, pero me preguntaba si hay una manera mejor. No necesariamente tiene que usar Ansible, simplemente lo usé porque lo usamos para prácticamente todo.
- name: List s3 objects
aws_s3:
bucket: "testbucket"
prefix: "test"
mode: list
register: s3objects
- name: Download s3objects
aws_s3:
bucket: "testbucket"
object: "{{ item }}"
mode: get
dest: "/tmp/{{ item|basename }}"
with_items: "{{ s3objects.s3_keys }}"
Respuesta1
Utilizar elsincronización de aws s3dominio
aws s3 sync s3://bucketname/folder/ c:\localcopy
aws s3 sync s3://bucketname/folder/ c:\localcopy --delete
Utilizo el indicador --delete al final de ese comando para eliminar localmente cosas que se eliminan del servidor. No sé acerca de los costos de los listados y demás cuando usas la sincronización, pero lee la documentación y deberías resolverlo.