AWS CLI, Boto3

Boto3를 활용한 S3 bucket 관리

Joon0464 2021. 7. 15. 21:41

사전 준비

aws cli v2와 boto3가 설치되어 있어야 하며 aws configure에 Access Key와 Secret Key가 등록되어 있어야 한다.

boto3 설치와 설정 및 간단하게 사용해보기 (tistory.com)

 

boto3 설치와 설정 및 간단하게 사용해보기

Boto3란? Python을 AWS CLI에서 사용하기 위한 AWS SDK(Software Development Kit)이다. Boto3를 사용하기 위해서는 1. python 3.6버전 이상이 설치되어야 한다. https://www.python.org/ftp/python/3.9.6/python-..

cumulus.tistory.com

이전 글에 해당 내용들이 모두 포함되어 있으므로 참고할 것.

1. S3 bucket 생성

AWS Boto3 공식문서에 가면 친절하게 샘플 코드가 주어진다.

# createbucket.py

import logging
import boto3
from botocore.exceptions import ClientError


def create_bucket(bucket_name, region):
    # Create bucket
    try:
        if region is None:
            s3_client = boto3.client('s3')
            s3_client.create_bucket(Bucket=bucket_name)
        else:
            s3_client = boto3.client('s3', region_name=region)
            location = {'LocationConstraint': region}
            s3_client.create_bucket(Bucket=bucket_name,
                                    CreateBucketConfiguration=location)
    except ClientError as e:
        logging.error(e)
        return False
    return True

create_bucket('joon-boto3-test-bucket','ap-northeast-2')

Boto3 공식문서에서 제공하는 샘플 코드의 마지막줄에 인수와 함께 함수를 호출하는 "create_bucket('joon-boto3-test-bucket','ap-northeast-2')" 를 추가하고 createbucket.py 라는 이름으로 저장한다.

createbucket.py를 실행하고 이전 글에서 생성해둔 bucketlist.py를 실행하여 bucket의 목록을 조회해보았다.

joon-boto3-test-bucket이 정상적으로 생성된 것을 볼 수 있다.

콘솔에서 직접 확인해보면 joon-boto3-test-bucket이 생성되어있다.

 

2. S3 bucket에 파일 업로드

ansible.png라는 파일을 방금 생성한 joon-boto3-test-bucket에 업로드할 것이므로 ansible.png를 파이썬 코드가 작성되는 폴더로 경로를 이동시켜준다.

# s3_upload.py

import logging
import boto3
from botocore.exceptions import ClientError


def upload_file(file_name, bucket, object_name=None):
    # If S3 object_name was not specified, use file_name
    if object_name is None:
        object_name = file_name

    # Upload the file
    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True

upload_file('ansible.png','joon-boto3-test-bucket')

boto3 공식문서에서 제공되는 샘플 코드의 마지막줄에 upload_file을 인수와 함께 호출하는 문장을 추가로 작성하였다.

만약 업로드될 때 이름을 지정하고 싶으면 upload_file의 함수를 호출할 때 3번째 인수로 원하는 파일 이름을 적어주면 된다.

s3_upload.py를 실행하여 업로드를 진행한다.

aws 콘솔에서 확인해보면 ansible.png 파일이 정상 업로드 된 것을 볼 수 있다.

 

3. S3 bucket에서 파일 다운로드

# s3_download.py

import boto3

s3 = boto3.client('s3')
s3.download_file('joon-boto3-test-bucket', 'ansible.png', 'ansible2.png')

s3.download_file('버킷 이름','버킷에서 내려받을 오브젝트 이름','로컬pc에 저장할 이름')으로 작성하여 함수에 인수를 전달한다.

s3_download.py를 실행한다.

ansible2.png라는 이름으로 해당 파일을 s3 버킷으로부터 내려받아진 모습이다.