메뉴 닫기

AWS S3를 EC2에 EBS처럼 사용하기

CentOS기반의 Amazon EC2 Linux에 S3를 마운트/언마운트하는 방법.

아마존에서 S3는 매우 유용한 서비스입니다. 하지만 s3는 object 기반이고 REST http 기반이다 보니 사용함에 있어 많은 불편함이 있습니다. 그래서 AWS는 최근에 Storage Gateway라는 서비스를 제공합니다.

하지만 Storage Gateway를 설정하여 사용하려면, Local IDC 환경 또는 AWS에 Gateway appliance 를 VM형태로 올려야 하기 때문에 추가 비용이 들고  간단히 사용하기엔 번거롭기도 합니다.

이때 간단한 해결책으로 S3를 filesystem 처럼 mount 하여 사용하는 방법이 있습니다. 바로 s3fs입니다. 오픈소스이며 AWS의 공식지원패키지는 아닙니다.

한가지 주의할 점은 Public Network를 통해 데이터가 전달되기때문에 network성능에 따라 영향을 받으며 FUSE기반이기 때문에 kernel level의 filesystem보다 성능이 안나올수 밖에 없다고한다…

1. 설치파일 인스톨. (최신 패키지 update후 수행 권고. yum -y update)

sudo yum install -y gcc gcc-c++

sudo yum install -y automake

sudo yum install -y fuse fuse-devel curl-devel libxml2-devel openssl-devel

2. wget https://github.com/s3fs-fuse/s3fs-fuse/archive/master.zip

s3fs라고 s3 마운트를 할 수 있게 해주는 프로그램임. 깃허브 참조.

3. master.zip 파일을 압축 풀고 압축 푼 공간에 있는 스크립트를 실행해줌.

unzip master.zip

cd s3fs-fuse-master

./autogen.sh

./configure

make

sudo make install

4. fail 안나면 /etc/에 passwd-s3fs를 만들어서 안에 내용중 S3에 연결할 IAM Credential을 적어서 넣어 줌.

vi /etc/passwd-s3fs (IAM 키를 ACCESS KEY:SECRET ACCESS KEY 같은 식으로 넣음)
:wq로 저장하고 나올 것

※보안상 S3에만 엑세스할수있는 IAM user생성후 s3에대한 role만 부여해서 사용하는것이 좋다.

5. 접근을 위한 권한 부여

chmod 640 /etc/passwd-s3fs

6. 아래 명령어를 수행하여 마운트 : ebs-s3는 S3 Bucket Name /usr/local/bin/s3fs ebs-s3[버킷명] -o allow_other /mnt/s3[마운트위치]


7. 언마운트.

$sudo fusermount -u /mnt/s3[마운트위치]

8. 자동 mount 등록

$sudo vi /etc/fstab

s3fs#ebs-s3 /mnt/s3 fuse allow_other,use_cache=/tmp 0 0

이후 reboot나 start 후에도 auto mount가 되지 않으면, rc.local파일의 exit 0 전에 mount -a를 라인 추가

mount -a

exit 0

fstab파일에 추가

기타 주의 사항으로 /tmp의 cache data를 주기적으로 삭제하는 cron을 염두에 두어야 한다. @daily find /tmp -atime +7 -mtime +30 -exec rm {} \;