web-dev-qa-db-ja.com

AnsibleS3モジュールを使用して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/
2
JJK

現在、ansible S3モジュールには、バケットをディスクに再帰的に同期する方法が組み込まれていません。

理論的には、tryを使用して、ダウンロードするキーを収集できます。

- 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

私はこの解決策をよく目にしますが、ネストされたS3 'ディレクトリ'のバグ(詳細については このバグレポート を参照)、およびansibleのため、現在のansible/botoバージョンでは機能しないようです。 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
1
M. Glatki