Boto3
boto3는 AWS를 코드로 제어할 수 있는, Python SDK 입니다.
Boto3를 이용해서 AWS를 자동 제어하는 파이프라인을 구축할 예정입니다.
본 포스트는, Boto3 Docs에 있는 내용을 천천히 정리한 내용입니다. ( 작성 기준 : 1.21.7 버전 )
QuickStart
SDK는 두 가지 주요 Python패키지로 구성됩니다.
- Botocore - Python SDK와 AWS CLI간에 공유되는 기능 제공
- Boto3 - Python SDK 자체를 구현하는 패키지
대부분의 문서 및 개발자들은 이를 크게 Boto3라고 지징합니다.
Installation
Boto3를 사용하기 위해서, Boto3와, 이의 dependencies를 설치해야합니다.
Boto3를 사용하기 위해, 3.6 버전 이상의 파이썬을 사용하세요.
Install Boto3
pip install boto3
# pip install boto3==1.0.0
# pip install boto3>=1.15.0
# pip install boto3<=1.15.3
가장 최신의 boto3를 설치하려면 pip install boto3
를 입력하시면 알아서 디폴트값으로 최신버전을 설치합니다.
프로젝트를 진행하기 위해 특정 버전이 필요하면 버전을 지정할 수 있습니다.
AWS의 Common Runtime (CRT) 를 포함하기 위해선 옵션을 추가해줍니다.
pip install boto3[crt]
Configuration
Boto3를 사용하기 위해서는, 권한 자격 세팅이 필요합니다.
AWS IAM Console를 통해서 계정을 생성하세요.
- aws_access_key_id 및 aws_secret_access_key가 필요합니다.
S3 제어하기 - 클라이언트 준비
import os
import boto3
AWS_KEY_ID = os.environ.get("AWS_KEY_ID")
AWS_SECRET_KEY = os.environ.get("AWS_SECRET_KEY")
s3 = boto3.client('s3', region_name='ap-northeast-2',
aws_access_key_id=AWS_KEY_ID,
aws_secret_access_key=AWS_SECRET_KEY)
S3 버킷 만들기
s3.create_bucket(Bucket='jb-boto3-test12', CreateBucketConfiguration={'LocationConstraint':"ap-northeast-2"})
위에서 클라이언트를 생성했으면, create_bucket을 이용해서 버킷을 생성합니다.
버킷 생성시 주의사항
- CreateBucketConfiguration을 통해 지역을 지정해줘야 오류가 발생하지 않습니다.
- 버킷 이름은 전세계 리전에서 유니크한 값을 가져야 합니다. ( 다른 버킷 이름과 같으면 안됨 )
- 버킷이름에 언더바( _ ) 를 사용하지 마세요. ( 제가 이것때매 왜 안되는지 삽질하다가, 언더바 안쓰니가 잘 생성되네요 )
버킷 나열하기 ( 조회하기 )
bucket_response = s3.list_buckets()
buckets = bucket_response['Buckets']
print(buckets)
list_bucket()
을 통해 버킷을 조회 할 수 있습니다.
버킷 삭제하기
s3.delete_bucket(Bucket = 'jb-boto3-test12')
delete_bucket()
을 통해 버킷을 삭제 할 수 있습니다.
Object 추가하기
s3.upload_file(Bucket = 'semogong',
Filename = "test_boto3.csv",
Key='test_boto3.csv')
upload_file()
을 통해 설정한 버킷안으로, 오브젝트를 추가하빈다. Filename은 내 로컬환경에서 버킷으로 보낼 파일이며, Key는 S3에서의 이름입니다.
Object 조회하기
response = s3.list_objects(Bucket = 'semogong')
print(response)
# s3.list_objects(Bucket = 'semogong', MaxKeys=2, Prefix='test_')
버킷안에 어떤 오브젝트들이 있는지 조회하는 방법입니다.
옵션으로, 최대로 조회하는 오브젝트 수, 접두어 등을 설정해서 원하는 설정으로 조회할 수 있습니다.
단일 오브젝트 조회
response = s3.head_object(Bucket = 'semogong',
Key = 'test_boto3.csv')
print(response)
단일 오브젝트를 조회하고 싶다면, head_object()
를 통해서 조회할 수 있습니다.
파일 다운로드
s3.download_file(Bucket = 'semogong',
Key = 'test_boto3.csv',
Filename='download.csv')
S3로 부터 파일을 다운받고 싶으면, download_file()
을 통해서 다운받을 수 있습니다.
오브젝트 삭제
s3.delete_object(Bucket='semogong',
Key='test_boto3.csv')
오브젝트 삭제를 하기 위해서는 delete_object()
를 사용합니다.
#### 오브젝트 ACL 변경
s3.put_object_acl(Bucket='semogong',
Key='test_boto3.csv',
ACL='public-read')
put_object_acl()
를 통해 오브젝트의 ACL를 편집할 수 있습니다.
단) 이를 사용하기 위해서는, 버킷 권한에서 ACL권한을 변경해야 합니다.
오브젝트 ACL 변경2
s3.upload_file(Bucket='semogong',
Filename='test_boto3.csv',
Key='test_boto3.csv',
ExtraArgs={'ACL':'public-read'})
처음부터, 파일을 추가할 때, ExtraArgs 파라미터를 이용해서, ACL을 변경할 수 있습니다.