[AWS] R에서 S3의 데이터 가져오기

R studio server를 AWS에 설치하고 가장 큰 문제는 데이터 가져오기이다.

구글 드라이브에 데이터를 올리고 불러오거나 github에 올리고 가져오는 방법도 있지만,
우리는 AWS를 쓰고 있으니 S3를 사용해서 하기로 하자.

참고로 이 글은 AWS에서 기본적으로 제공하는 Linux[centOS]를 기반으로 작성되었다.

 

 

S3 bucket 만들기

먼저 S3에서 bucket을 만들어야한다.

aws S3 main

위에서 Create bucket을 누르면 아래처럼 나온다.

aws S3 Create bucket

Bucket name은 여러 조건을 만족시켜야만 한다.

예를들면 insta, instamarket등은 생성할 수 없다.
이유는 여러가지가 있을 수 있지만,  이미 다른 계정에서 생성한 bucket name이면 생성할 수가 없다.

그리고 Region을 택해야 하는데 본인은 N.Virginia에 instance가 있으므로 N.Virginia로 골랐다.

이제 Create 버튼을 눌러주면 생성이 된다.

aws S3 bucket name click

생성이 된 버킷을 클릭한다.

aws S3 upload button.png

그러면 위와 같이 나온다.
이제 Upload 버튼을 눌러 파일을 추가해보자.

aws S3 Upload Add files

이 화면에서 Add files를 눌러 원하는 파일을 가져오고 아래의 Upload 버튼을 눌러준 뒤 조금만 기다리자.
그러면 bucket이 reload 되면서 bucket에 파일이 추가 된 것을 확인 할 수 있다.

aws S3 Upload complete.png

이렇게 되면 S3의 설정은 완료다!

 

R에 aws.s3 pacakge 설치

우리는 먼저 aws.s3라는 package를 설치해야 한다.

그런데 우리는 centOS(아마존 기본 Linux) 환경이기에 추가적으로 몇가지 해주어야한다.

sudo yum install libxml2-devel

위와 같이 ssh로 접속하여 명령어를 입력해서 libxml2-devel을 설치해야만

R에서 aws.s3를 설치해도 xml이라는 package 때문에 설치에 실패하는 일이 없을 것이다.

그리고 R에서

install.packages("aws.s3")

라고 하여 package 설치를 완료해주자.

 

S3 데이터 불러오기

드디어 데이터를 불러올 준비를 모두 마친 상태이다.

먼저, aws.s3 package를 불러오자.

library(aws.s3)

그리고 내 aws로 접근하기 위해 access_key_ID와 secret_access_key를 알아야한다.

Sys.setenv("AWS_ACCESS_KEY_ID" = 'my_access_key_id',
 "AWS_SECRET_ACCESS_KEY" = 'my_secret_access_key')

my_access_key_id와 my_secret_access_key라고 적혀있는 부분은 각자의 id와 key를 적어주면 된다.
이 부분을 자세히 알고 싶으면 스크롤을 내려 아래를 먼저 봐주기 바란다.

이제 bucket을 불러와보자.

mybucket <- get_bucket("bucketname")

위와 같이 불러올 수가 있다.

bucketname에는 각자의 bucketname을 적어주면 된다.

이제 데이터도 불러와보자.

raw_data <- get_object('sample_submission.csv', mybucket)

‘sample_submission.csv’는 불러올 파일의 이름이고, mybucket은 방금전 불러온 bucket이다.

mybucket 대신에 ‘bucketname’을 적어도 상관없다.
대신 매번 bucket을 불러옴으로 여러번 한다면 1번 불러오고 그 변수 계속 사용하기를 추천한다.

이렇게 불러온 raw_data는 가공할 수 없는 데이터이다.

그러므로 아래와 같이 함으로써 우리가 이전에 사용하듯이 data.table 형태로 불러오게 된다.

data <- fread( iconv( readBin( raw_data, character() ), from="UTF-8", to="UTF-8" ))

fread는 data.table package에 있으므로 없는 경우 설치와 불러오기를 해야한다.

이 방법은 접근제어가 가능해 보안이 좋아지는 점은 있지만 문자 엔코딩 변환과 csv 읽기 처리를 별도로 해주기 때문에 성능이 많이 느려집니다.

그런 경우엔 아래와 같이 read.csv를 이용하면 빠르게 가능하다.

orders <- read.csv(text = rawToChar( get_object( mybucket, object = 'orders.csv' )))

 

위와 같은 방식으로 csv 형태의 파일이면 S3에 저장하여 R에서 불러와 작업이 가능해진다.

 

Access_Key_ID & Secret_Access_Key

AWS가 익숙지 않은 저같은 사람의 경우 갑자기 이 둘을 입력하라고 하면 ‘뭐지?’싶다.

그래서 사실 검색하면 누구나 쉽게 가능하지만 끄적이겠습니다.

이는 IAM에서 가능합니다. IAM으로 들어가자.

aws IAM users main.png

먼저, 위와 같이 User로 들어가자.

user로 들어오고 사용할 user를 클릭하여 들어가면 아래와 같이 나온다.

aws IAM users security credentials.png

그리고 위 처럼 Secrutiy credentials 탭으로 들어가고, Create access key를 하여 없는 경우는 만들어주어야한다.

그 외에 있지만 security access key를 모른다면 기존의 것이 아닌 새로 만들어서 access key를 얻자.

우리가 1회용으로 사용할 것이 아니라면 csv 파일로 다운을 받아서 잘 관리하자.

그리고 만약 삭제를 원한다면 status옆에 X 버튼을 누르면 가능하다.

 

다음에는…

S3에서 데이터를 받아왔다. 이제 이 데이터들을 DB로 만들어서 DB 관리를 할 필요가 있다.

무조건 필요하진 않지만 지속적인 프로그램 관리가 이루어지는 경우 필요하다.

그리고 DB로 저장되어 있다면 더 편하게 불러오고 저장하기가 가능하다고 본다.

그러므로 다음에는 AWS로 DB는 어떻게 이용가능할지 알아보자.

 


Reference

Amazon Simple Storage Service 개발자 안내서, 버킷 규제 및 제한,
http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/BucketRestrictions.html

AWS S3 Client Package,
https://cran.r-project.org/web/packages/aws.s3/README.html

Unable to install XML package in R on CentOS,
https://stackoverflow.com/questions/29014062/unable-to-install-xml-package-in-r-on-centos

How to create a singed S3 url,
https://stackoverflow.com/questions/37442118/how-to-create-a-signed-s3-url

AWS Identity and Access Management,  IAM 사용자의 액세스 키 관리,
http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_credentials_access-keys.html

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중