私の計画は、ansibleを使用してバケットからバケットにファイルをコピーすることですec2
。s3
ここでプレイブックを作成しましたが、いくつかのエラーが発生しました。
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
答え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"