以下操作是将文件从 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