aws s3 버킷 생성 및 iam user 생성 과정 보러가기
1. Boto3 기본 설정하기
1. dotenv를 설치하여 .env파일에 IAM USER정보 넣기
$ pip install python-dotenv
AWS_ACCESS_KEY_ID=MYACCESSKEYID
AWS_ACCESS_KEY_SECRET=MYACCESSKEYSECRET
aws_session()함수를 만든 다음 .env파일의 값을 불러와서(os.gotenv(..)) 인증된 새션 객체를 생성하여 반환한다.
# file_manager.py
import os
import boto3
from dotenv import load_dotenv
load_dotenv(verbose=True)
def aws_session(region_name='ap-northeast-2'):
return boto3.session.Session(aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.getenv('AWS_ACCESS_KEY_SECRET'),
region_name=region_name)
2. awscli를 사용하여 cmd에 IAM USER 정보 넣기
cmd창에 aws configure를 입력하여 정보를 입력한다.
$ aws configure
AWS Access Key ID [None]: {자신의 IAM Access KEY}
AWS Secret Access Key [None]: {자신의 IAM Secret Access KEY}
Default region name [None]: ap-northeast-2
Default output format [None]:
그러면 해당 awscli가 설치되어있는 Python 내부에서는 해당 aws계정에 접근이 가능하다.
import boto3
# Let's use Amazon S3
s3 = boto3.resource('s3') # s3에 대한 권한 및 상태를 s3(변수)에 저장
for bucket in s3.buckets.all():
print(bucket)
2. Boto3를 사용하여 S3 버킷 생성 및 파일 업로드
1. resource 클래스의 create_bucket()로 버킷 생성
boto3 resource 클래스의 create_bucket 메서드를 사용하여 AWS 이름 지정 규칙을 준수하는 문자열 이름과 함께 액세서 제어 목록 정책(ACL)을 다시 설정하는 문자열을 입력하여 버킷을 생성한다.
def make_bucket(name, acl):
session = aws_session()
s3_resource = session.resource('s3')
return s3_resource.create_bucket(Bucket=name, ACL=acl)
s3_bucket = make_bucket('tci-s3-demo', 'public-read')
2. resource 클래스의 Bucket()으로 파일 업로드
children.csv 데모파일
name, age
Kallin, 3
Cameron, 0
여기에서는 Bucket 리소스 클래스의 upload_file (...) 메서드 를 사용하여 children.csv 파일을 업로드한다.
매개변수는 filename, s3객체 고유 식별자인 key가 있다. key는 s3 버킷과 유사한 AWS 객체 명명 규칙을 확인해야한다.
def upload_file_to_bucket(bucket_name, file_path):
session = aws_session()
s3_resource = session.resource('s3')
file_dir, file_name = os.path.split(file_path)
bucket = s3_resource.Bucket(bucket_name)
bucket.upload_file(
Filename=file_path,
Key=file_name,
ExtraArgs={'ACL': 'public-read'}
)
s3_url = f"https://{bucket_name}.s3.amazonaws.com/{file_name}"
return s3_url
s3_url = upload_file_to_bucket('tci-s3-demo', 'children.csv')
print(s3_url) # https://tci-s3-demo.s3.amazonaws.com/children.csv
3. Boto3를 사용하여 S3 버킷 생성 및 파일 업로드
데이터를 로컬에 저장할 필요없이 즉시 처리 한 다음 폐기하기 위해 S3 객체 데이터 만 다운로드하는 경우 메모리 스트림을 처리하는 io 모듈에서 유용한 스트리밍 클래스 BytesIO를 사용한다.
이러한 방식으로 S3 객체 데이터를 다운로드하려면 이전에 인 메모리 데이터에서 업로드된 about.txt 파일을 다운로드하여 아래에 설명 된대로 S3 객체 리소스 클래스 의 download_fileobj (...) 메서드 를 사용하는 것이 좋다.
def download_data_from_bucket(bucket_name, s3_key):
session = aws_session()
s3_resource = session.resource('s3')
obj = s3_resource.Object(bucket_name, s3_key)
io_stream = io.BytesIO()
obj.download_fileobj(io_stream)
io_stream.seek(0)
data = io_stream.read().decode('utf-8')
return data
about_data = download_data_from_bucket('tci-s3-demo', 'about.txt')
print(about_data)
그런 다음 데이터를 인쇄한다.
My name is Adam
I live in Lincoln
I have a beagle named Doc Holiday
※ 참고
'Dot Programming > Python' 카테고리의 다른 글
[Python] awscli, boto3를 이용하여 AWS S3 연동하기 (0) | 2021.05.18 |
---|---|
[Python] BeautifulSoup으로 웹 스크래핑하기 (0) | 2021.05.12 |
[Python] Mac에서 Python 가상환경(Pyenv) 사용 (0) | 2021.03.23 |
[Python] 크레온 API를 통한 주식 자동화 프로그램 만들기 (OS : Window) (0) | 2021.03.05 |