使用 Ansible S3 模块同步 EC2 实例中的文件

使用 Ansible S3 模块同步 EC2 实例中的文件

以下操作是将文件从 S3 存储桶同步到 EC2 中的实例的正确方法吗?

我正在我的 Mac 上运行我的游戏。

    - name: "syncing S3 for Keys"
      hosts: ec2instances
        s3:
          aws_access_key: "{{ aws_access_key }}"
          aws_secret_key: "{{ aws_secret_key }}"
          bucket: hosts
          mode: get
          object: /data/*
          dest: /etc/data/conf/

答案1

ansible S3 模块当前没有内置方式以递归方式将存储桶同步到磁盘。

理论上你可以尝试收集要下载的密钥

- name: register keys for syncronization
  s3:     
    mode: list
    bucket: hosts
    object: /data/*
  register: s3_items

- name: sync s3 bucket to disk
  s3:
    mode=get
    bucket=hosts
    object={{ item }}
    dest=/etc/data/conf/
  with_items: s3_bucket_items.s3_keys

虽然我经常看到这种解决方案,但它似乎不适用于当前的 ansible/boto 版本,这是由于嵌套 S3“目录”存在错误(请参阅此错误报告有关详细信息),以及 ansible S3 模块不为密钥创建子目录。我相信在同步非常大的存储桶时,使用此方法也可能会遇到一些内存问题。

我还想补充一点,你很可能不想使用剧本中编码的凭证——我建议你使用IAM EC2 实例配置文件相反,它们更加安全和舒适。

对我有用的解决方案是这样的:

- name: Sync directory from S3 to disk
  command: "s3cmd sync -q --no-preserve s3://hosts/{{ item }}/ /etc/data/conf/"
  with_items:
    - data

相关内容