以下の遊びは、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モジュールには、バケットをディスクに再帰的に同期する方法が組み込まれていません。
理論的には、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