Используйте модуль 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