Ansibleを使用してaws s3バケットにファイルをコピーする

Ansibleを使用してaws s3バケットにファイルをコピーする

私の計画は、ansibleを使用してバケットからバケットにファイルをコピーすることですec2s3ここでプレイブックを作成しましたが、いくつかのエラーが発生しました。

2s3.ymlのコピー

---
- name: Copy to s3
   s3:
     aws_access_key: "{{ lookup('env','aws_key') }}"
     aws_secret_key: "{{ lookup('env','aws_secret') }}"
     bucket: "{{ aws_packages_bucket }}"
     object: "/JI79IML/my_part_X86_64_c7.15.tar.gz"
     dest: "/data/parts/JI79IML/my_part_X86_64_c7.15.tar.gz"
     mode: get
     overwrite: no

次のエラーが発生します。

$ ansible-playbook copy2s3.yml -i 172.18.2.12,

 ERROR! 's3' is not a valid attribute for a Play

The error appears to have been in '/home/ubuntu/bk/copy2s3.yml': line 2, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
- name: Copy to s3
^ here

答え1

モジュール名(s3)は、次のものと同じインデントレベルにする必要がありますname

- name: Copy to s3
  s3:
    aws_access_key: "{{ lookup('env','aws_key') }}"
    aws_secret_key: "{{ lookup('env','aws_secret') }}"
    bucket: "{{ aws_packages_bucket }}"
    object: "/JI79IML/my_part_X86_64_c7.15.tar.gz"
    dest: "/data/parts/JI79IML/my_part_X86_64_c7.15.tar.gz"
    mode: get
    overwrite: no

答え2

Ansibleモジュールを使用してローカルサーバーからS3にオブジェクトをコピーするには、次のようにします。

mode: put

getオブジェクトをダウンロードするために使用されます。

引用する

答え3

s3の代替モジュールaws_s3を使用して同様の問題が発生しました。

boto(s3およびaws_s3用)とboto3(aws_s3用)が正しくインストールされていることを確認してください。

boto、boto3をインストールしましたが、仮想環境を使用しているため、Python3.5のみがインストールされ、他のバージョンのPythonはインストールされませんでした。したがって、Python Ansibleを使用している場合(私の設定ではPython2.7)、botoを取得できず、この非常に難解なエラーメッセージで失敗します。

すべてが正しくインストールされていることを確認するには、コマンドラインからPythonを実行し、botoを手動でインポートします。

13:20 $ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto
>>> import boto3
>>> 
13:21 $ python3
Python 3.5.2 (default, Sep 14 2017, 22:51:06) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto
>>> import boto3
>>> 

Pythonでエラーが発生すると、Ansibleでもエラーが発生します。

答え4

このソースはあなたに役立ちます

このソースコードには4つの主要なタスクがあります。

ㅏ。 S3 バケットのディレクトリのリストを取得します。

b。 S3 バケットのコンピュータにディレクトリ構造を作成します。

氏。 S3バケットのファイルとディレクトリを生成されたディレクトリ構造にダウンロードします。

d。ダウンロードしたS3バケットファイルへのアクセスを提供します。

varlist.ymlの生成と変数の追加

1. バケット名 2. aws_access_key 3. aws_secret_key

---
 - name: Bucket copy
   hosts: localhost
   become_method: sudo
   become_user: root
   become: true
   gather_facts: False
   vars_files:
     - varlist.yml
   tasks:
     - name: Get s3 objects     # Make list of directory and files in register
       aws_s3:
         bucket: "{{ Bucket_name }}"
         mode: list
         aws_access_key: "{{ aws_access_key }}"
         aws_secret_key: "{{ aws_secret_key }}"
       register: s3_object_list
     - name: Create download directory  # Create directory for download latest code on s3 bucket 
       file:
         path: "S3/{{ item }}"
         state: directory
       with_items:
         - "{{ s3_object_list.s3_keys }}"
       ignore_errors: true
     - name: Download s3 objects       # Download files in there appropriate directory on serverside  
       aws_s3:
         bucket: "{{ Bucket_name }}"
         object: "{{ item }}"
         mode: get
         dest: "S3/{{ item }}"
         aws_access_key: "{{ aws_access_key }}"
         aws_secret_key: "{{ aws_secret_key }}"
       with_items:
         - "{{ s3_object_list.s3_keys  }}"
       ignore_errors: true
     - name: Folder permissions
       file:
         path: S3/*                                         
         state: touch
         mode: "u=rw,g=r,o=r"

関連情報