내 계획은 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"