Является ли приведенная ниже игра правильным способом синхронизации файлов из ведра 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/
Модуль 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 не создает подкаталоги для ключей. Я считаю, что также возможно, что вы столкнетесь с некоторыми проблемами памяти при использовании этого метода при синхронизации очень больших сегментов.
Я также хотел бы добавить, что вы, скорее всего, не хотите использовать учетные данные, закодированные в ваших playbooks - я предлагаю вам использовать Профили инстансов IAM EC2 вместо этого, которые намного безопаснее и удобнее.
Решение, которое работает для меня, будет следующим:
- name: Sync directory from S3 to disk
command: "s3cmd sync -q --no-preserve s3://hosts/{{ item }}/ /etc/data/conf/"
with_items:
- data