Baixe arquivos do S3 sem listagem

Baixe arquivos do S3 sem listagem

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.

informação relacionada