Используйте модуль 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
Другие вопросы по тегам