Ansible을 사용하여 aws s3 버킷에 파일 복사

Ansible을 사용하여 aws s3 버킷에 파일 복사

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

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"

관련 정보