[AWS] SageMaker에서 boto3를 이용해 S3 csv 파일 읽기/쓰기

2022. 6. 16. 23:23AWS

boto3는 python용 AWS SDK(Software Development Kit)로 python에서 Amazon S3, EC2와 같은 서비스를 활용할 수 있도록 지원하는 패키지이다. 

 

여기서는 AWS SageMaker 환경에서 python 코드를 작성하는 경우 boto3를 활용해 S3로부터 데이터를 업로드/다운로드 없이 바로 읽고 쓰는 방법에 대해 소개하고자 한다.

 


1. AWS credential 설정

먼저 S3에 접근하기 위해 AWS Access Key 정보가 필요하다. (access key, secret key)

해당 정보는 직접 입력하거나 설정 파일에서 ConfigParser를 이용해 읽어 올 수 있다. 

 

(1) config.ini 파일 생성

[aws_credentials]
access_key = MY_ACCESS_KEY
secret_key = MY_SECRET_KEY

(2) configparser를 이용해 Access Key 정보 읽어오기

import configparser

parser = configparser.ConfigParser()

parser.read("config.ini")
section_name = "aws_boto_credentials"
access_key = parser.get(section_name, "access_key")
secret_key = parser.get(section_name, "secret_key")

 

2. S3 연동하기 - boto3.client 객체 생성

import boto3

s3 = boto3.client('s3',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key)

 

3. 데이터 읽기 (csv 파일)

S3 bucket에서 원하는 파일을 읽어오기 위해서는 get_object 메서드를 이용한다.

  • Bucket: S3의 bucket name을 입력
  • Key: 폴더 및 파일명을 입력 (예, "Folder/File_Name")
import io
import pandas as pd

obj = s3.get_object(
	Bucket=BUCKET_NAME_to_READ, 
	Key=FILE_PATH_NAME_to_READ
	)
df = pd.read_csv( io.BytesIO( obj["Body"].read() ) )

 

4. 데이터 쓰기 (csv 파일)

dataframe 형태의 데이터를 csv 파일로 S3 bucket에 저장하기 위해서는 put_object 메서드를 이용한다.

  • Body: 저장할 데이터
s3.put_object(
    Body=df.to_csv(index=False).encode(),
    Bucket=BUCKET_NAME_to_SAVE, 
    KEY=FILE_PATH_NAME_to_SAVE
    )

정리하면 SageMaker 환경에서 파일을 업로드/다운로드 하지 않고, 데이터를 읽거나 쓰기 위해서는 boto3.client 객체를 생성한 후 get_object, put_object를 이용하면 된다. 이외에는 S3가 Bytes 형태로 데이터를 읽고 쓸 수 있도록 설계되어있으므로 인코딩 또는 디코딩 작업이 추가적으로 필요하다는 점을 기억하면 될 것 같다.  

 

※  AWS와 관련된 개념과 용어에 대해 아직 완벽하게 이해하지 못한 상태입니다. 잘못된 부분이 있으면 댓글로 알려주시면 감사하겠습니다:) 

 

참고

[1] https://github.com/boto/boto3

[2] https://velog.io/@inhwa1025/Python-boto3%EB%A1%9C-AWS-S3-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

'AWS' 카테고리의 다른 글

[AWS] Machine Learning 자격증 준비를 위한 참고 자료  (0) 2022.07.02