ㅍㅍㅋㄷ

goofys를 이용해 AWS S3 mount 해서 사용하기 본문

IT/AWS

goofys를 이용해 AWS S3 mount 해서 사용하기

클쏭 2016. 4. 27. 16:08

goofys를 이용해 AWS S3 mount 해서 사용하기


S3는 AWS 라인업 중 가장 유용한 서비스 중 하나라고 생각한다. 

하지만 S3 자체가 일반적인 파일 시스템과는 좀 다른 object 기반이기도 하고 REST http 기반이다 보니 사용성에서 약간의 불편함을 느낄 수 있다. 


그래서 최근에는 Storage Gateway 라는 서비스도 출시하며, S3를 iscsi 형태로 제공하도록 appliance를 직접 제공하기도 한다. 


하지만 Storage Gateway를 설정하여 사용하려면, Local IDC 환경 또는 AWS에 Gateway appliance 를 VM형태로 올려야 하기 때문에 추가 비용이 들고 

간단히 사용하기엔 번거롭기도 하다. 


이때 간단한 해결책으로 S3를 filesystem 처럼 mount 하여 사용하는 방법이 즐겨 쓰이곤 한다. 

이중 널리 쓰이는 backend package 중 하나가 FUSE 기반의 s3fs 이다. 


그러나 s3fs는 한가지 이슈가 있는데,

"너무 느리다"


그래서 다른 대안을 찾아보다 보니 s3fs 보다는 성능이 좋다는 goofys 라는 패키지가 있었다. 

이것 또한 s3fs 처럼 opensource 이며, AWS에서 정식 지원하는 패키지는 아니다. 


github : https://github.com/kahing/goofys


주장하기로는, s3fs 대비 몇배의 성능 차이가 난다고 하는데, 직접 테스트 해보진 않아서 모르겠다.

[출처 : https://github.com/kahing/goofys ]






prerequisite



1. 서버에서 s3fs를 통해 mount하려면, S3를 이용하기 위한 access/secret key가 필요하다. 

   

   먼저 s3 이용을 위한 user를 생성해보자.

   security credentials 메뉴로 이동.

   



User 메뉴에서 s3_user를 생성

   


  user를 생성하면 access key와 secret key가 나오니 이걸 잘 기록해두자.

  root 계정의 access key를 이용할수도 있지만, 털리면 위험하니 따로 생성해서 이용하는게 좋다.

 



  해당 user의 permissions 탭에서 policy를 적용한다.

  S3에 access 할수 있는 권한을 주자.


   Attach Policy 클릭

  

    

   적용할 policy를 검색할 수 있는데 Filter에 S3 입력하면 아래와 같이 AmazonS3FullAccess 라는 policy를 찾을 수 있다. 이걸 선택하여 적용하자.

  


    적용 완료 ㅋ

  



2. S3로 연결할 bucket을 생성한다. 


   테스트로 bucket 이름을 goofys-test-01 로 생성했다. 




2. golang 설치


   goofys 는 go로 개발하였다. go부터 설치하자. ( CentOS 기준 )


root@~~# yum install golang fuse


   

3. go 환경 설정  


  go를 사용하기 위한 환경 설정 부터 하자.

  먼저 workspace 부터 만들자.


 root@~~# mkdir -p /usr/local/golang 


  환경 변수도 설정한다.

   ~/.bash_profile에 설정하였다. 


... (중략)


export GOROOT=/usr/lib/golang

export GOBIN=$GOROOT/bin

export GOPATH=/usr/local/golang

export PATH=$PATH:$GOROOT/bin


환경 변수 적용.


root@~~# source .bash_profile


잘 됐는지 확인해보자.


root@~~# go env

GOARCH="amd64"

GOBIN="/usr/lib/golang/bin"

GOEXE=""

GOHOSTARCH="amd64"

GOHOSTOS="linux"

GOOS="linux"

GOPATH="/usr/local/golang"

GORACE=""

GOROOT="/usr/lib/golang"

GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"

GO15VENDOREXPERIMENT=""

CC="gcc"

GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"

CXX="g++"

CGO_ENABLED="1"






Installation


1. goofys 설치


root@~~# go get github.com/kahing/goofys

root@~~# go install github.com/kahing/goofys



2. s3 access key 설정


    key 설정 파일의 default path는 ~/.aws/credentials 이다.

    key는 위에서 열심히 설정한 s3_user의 key를 이용하자.


root@~~# mkdir -p ~/.aws

root@~~# vim ~/.aws/credentials

[default]

aws_access_key_id = XXXXXXXXXXXXXXX

aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX



3. mount 실행


  먼저 mount 할 디렉토리 생성한다. 


root@~~# mkdir -p /goofys


 goofys 실행

 옵션으로 s3 bucket 이름과 mount 디렉토리를 지정하면 끝.


root@~~# goofys goofys-test-01 /goofys


확인해 보자


root@~~# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xvda1      7.8G  1.6G  6.1G  21% /

devtmpfs        490M   60K  490M   1% /dev

tmpfs           498M     0  498M   0% /dev/shm

goofys-test-01  1.0P     0  1.0P   0% /goofys


Comments