通过Ansible从AWS S3存储桶中获取整个存储桶或多个对象

Pre*_*ura 6 amazon-s3 ansible

据我所知,Ansible的S3模块,它只能立刻得到一个对象.

我的问题是,如果我想一次从S3存储桶下载/获取整个存储桶或多个对象,该怎么办?有什么黑客攻击吗?

Tho*_*ner 8

我能够像这样实现它:

- name: get s3_bucket_items
  s3:
    mode=list
    bucket=MY_BUCKET
    prefix=MY_PREFIX/
  register: s3_bucket_items

- name: download s3_bucket_items
  s3:
    mode=get
    bucket=MY_BUCKET
    object={{ item }}
    dest=/tmp/
  with_items: s3_bucket_items.s3_keys
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 你的前缀不应该有一个前导斜杠.
  • 该{{ item }}值将具有前缀.

  • 此解决方案不适用于子目录,因为 S3 模块不会自动创建子目录。还有一个关于仅包含其他目录的目录的公开错误,请参阅 https://github.com/ansible/ansible/issues/19600 (2认同)
  • `with_items: "{{ s3_bucket_items.s3_keys | map('replace', prefix + '/', '') | map('dirname') | unique}}"` 会将对象转换为要创建的目录列表。 (2认同)

Bru*_*e P 1

从 Ansible 2.0 开始,S3 模块包含该list操作,可让您列出存储桶中的密钥。

如果您还没有准备好升级到 Ansible 2.0,那么另一种方法可能是使用s3cmd等工具并通过命令模块调用它:

- name: Get objects
  command: s3cmd ls s3://my-bucket/path/to/objects
  register: s3objects
Run Code Online (Sandbox Code Playgroud)