Назад | Перейти на главную страницу

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

Модуль 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