Tenho um bucket s3 com mais de um milhão de arquivos e cerca de mil arquivos adicionados todos os dias por vários aplicativos em várias pastas.
Gostaria de baixar e manter todos os arquivos localmente também, em um servidor Linux. Qual seria a melhor maneira de baixar todos os arquivos uma vez e depois baixar apenas os novos arquivos, digamos aqueles carregados nas 24 horas anteriores.
Entendo que a Amazon cobra pela listagem de cada arquivo s3, por isso não quero listar todos os arquivos todos os dias e depois baixar os arquivos mais recentes.
Tentei fazer isso com o manual a seguir e funcionou, mas queria saber se existe uma maneira melhor. Não precisa necessariamente usar Ansible, apenas usei porque usamos para praticamente tudo.
- 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 }}"
Responder1
Use osincronização aws s3comando
aws s3 sync s3://bucketname/folder/ c:\localcopy
aws s3 sync s3://bucketname/folder/ c:\localcopy --delete
Eu uso o sinalizador --delete no final desse comando para excluir localmente coisas que são removidas do servidor. Não sei sobre os custos de listagens e similares quando você usa a sincronização, mas leia a documentação e você deve resolver isso.