EC2 Ubuntu S3 마운트 방법

Posted in AWSTagged with , , , , , 7 Comments

– 개요

S3 (Simple Storage Service)는 AWS에서 제공하는 스토리지 서비스로 S3 API를 직접 사용하여 스토리지 기능을 이용하거나 또는 EC2에 직접 마운트하여 사용할 수 있다.

하지만 EC2에 마운트를 하기 위해서는 S3FS를 이용해야 한다.

 

– S3FS 설치

Ubuntu의 버전에 따라 설치하는 패키지가 아래와 같이 약간 상이하다.

[Ubuntu 14.04 LTS, Ubuntu 14.10]

# 컴파일 관련 패키지 설치
sudo apt-get install build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool
sudo apt-get install pkg-config libssl-dev

# 깃으로 S3FS 다운로드
git clone https://github.com/s3fs-fuse/s3fs-fuse

# S3FS 설치
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl
make
sudo make install

 

[Ubuntu 12.04 LTS, Ubuntu 10.10]

# 컴파일 관련 패키지 설치
sudo apt-get install build-essential libfuse-dev fuse-utils libxml2-dev mime-support automake libtool
sudo apt-get install libcurl4-openssl-dev

# 깃으로 S3FS 다운로드
git clone https://github.com/s3fs-fuse/s3fs-fuse

# S3FS 설치
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl
make
sudo make install

 

혹시 make 과정중 ERR 또는 WARN 메시지가 발생했다면 컴파일 관련 패키지가 제대로 설치되지않았을 수 있으니 위의 패키지가 모두 잘 설치되었는지 다시 한번 확인해보기 바란다.

 

– S3 ACCESS KEY 확인

EC2에 S3를 마운트하기 전에 먼저 AWS에서 S3 생성 후 ACCESS KEY 값을 확인해야 된다. 이를 확인하는 방법은 아래와 같다.

[우측 상단 Welcome to AWS 드랍다운 버튼 클릭 후 Security Credentials 클릭]

ACCESS1

[알림창에서 Continue to Security Credentials 클릭]

aws_access_2

[Access Keys 부분 클릭]

aws_access_2.5

[아래 Create New Access Key 버튼을 눌러 새 Access Key를 생성]

aws_access_2.6

[Show Access Key 버튼을 눌러 생성된 키를 확인]

aws_access_2.7

위의 순서대로 진행을 하면 Access Key ID, Secret Access Key 두개의 키값을 얻을 수 있다.

단, AWS에서는 이 Secret Access Key를 오직 한번만 보여주기 때문에 두개의 키값을 따로 저장해놓거나 위 그림의 Download Key File 버튼을 눌러 키값이 들어있는 csv파일을 잘 보관해둬야 한다.

참고로 AWS에서는 보안상의 이유로 90일에 한번씩 기존 ACCESS KEY를 파기하고 재생성하여 사용하기를 권장하고 있다.

 

– S3FS 설정

이제 S3FS에서 S3에 접근할 수 있도록 위에서 알아낸 두 키값을 passwd-s3fs 파일에 입력을 해야된다. Ubuntu에서 아래 명령어를 이용해서 <ACCESS KEY>:<SECRET ACCESS KEY> 형식으로 입력을 해야 한다.

# passwd-s3fs 파일 생성
sudo vi /etc/passwd-s3fs

예를들어 ACCESS KEY 값이 ABC123이고, SECRET ACCESS KEY 값이 aBcD12#4 라면 passwd-s3fs 파일안에 ABC123:aBcD12#4를 입력하면 된다.

생성된 passwd-s3fs 파일의 권한중 전체유저에 대해 읽기 권한이 포함된 상태로 생성이 되었을 것이다. 이 상태로는 보안에 취약하기 때문에 전체유저에 대해서는 읽기 권한을 제거해야 된다. chmod명령어를 이용해 아래와 같이 읽기 권한을 제거해보자.

# 기존 644권한에서 640으로 권한 변경
sudo chmod 640 /etc/passwd-s3fs

마지막으로 S3FS의 환경설정을 해야 된다.

# S3FS 환경설정 파일 열기
sudo vi /etc/fuse.conf

아래와 같이 user_allow_other 주석을 제거해주면 된다.

# /etc/fuse.conf - Configuration file for Filesystem in Userspace (FUSE)

# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
mount_max = 1000

# Allow non-root users to specify the allow_other or allow_root mount options.
user_allow_other

 

– S3FS 마운트

이제 환경설정도 끝났고, EC2에 직접 마운트하기만 남았다. 마운트를 하기위한 명령어 구문은 아래와 같다. 각자 상황에 맞게 커스터마이즈해서 명령어를 입력해보자.

# /usr/bin/s3fs [S3 버킷명] [마운트할 경로]
# allow_other는 root뿐만아니라 모든 유저의 접근을 허용시켜주는 옵션
# use_cache는 캐싱을 할 경로를 지정하는 옵션

sudo mkdir /mnt/mymountpoint
sudo /usr/bin/s3fs mybucketname /mnt/mymountpoint -o allow_other -o use_cache=/tmp

마운트가 잘 되었다면 해당 경로에 S3의 폴더나 파일들이 보일것이다. 위의 명령어대로 입력했다면 /mnt/mymountpoint 경로에 S3가 마운트된다.

혹여 해당 경로에서 ls 명령어 입력시 Transport endpoint is not connected 메시지가 나온다면 passwd-s3fs 파일의 키값들이 제대로 입력되지 않아 발생되는 문제이니 키값을 다시 한번 확인해보기 바란다.

 

– TIPS

재부팅 후 자동으로 마운트하는 방법과 /tmp에 저장된 캐싱 파일들을 주기적으로 지워주는 방법에 대한 팁이다. 먼저 재부팅 후 자동으로 마운트하는 방법은 /etc/fstab 파일에 아래와 같이 S3FS 구문을 추가해야 한다.

sudo vi /etc/fstab 명령어를 입력해 fstab 파일을 연 다음 아래 구문을 마지막 줄에 추가하자.

s3fs#mybucketname /mnt/mymountpoint fuse allow_other,use_cache=/tmp 0 0

만약 위 구문을 추가한 다음 재부팅뒤에도 마운트가 안된다면 /etc/rc.local 파일을 수정해야 한다.

sudo vi /etc/rc.local 명령어를 입력해 rc.local 파일을 연 다음 아래와 같이 exit 0 위에  mount -a 구문을 넣어주자.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

mount -a
exit 0

이제 재부팅 후에도 마운트가 잘 되는지 확인해본다.

마지막으로 /tmp에 저장된 캐싱파일을 주기적으로 지워주는 방법이다. 리눅스 계열에서는 cron이라는 데몬이 스케쥴러 서비스를 하고 있다. cron의 설정파일인 /etc/crontab 파일에 주기적으로 캐싱파일을 지우는 구문을 추가해보자.

sudo vi /etc/crontab 명령어를 입력해 crontab 파일을 연 다음 아래와 같이 마지막 줄에 구문을 넣어주자.

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
@daily find /tmp -atime +7 -mtime +30 -exec rm {} \;

위 구문의 의미는 /tmp 디렉터리안에서  Access Time이 일주일이 지났거나 Modified Time이 한달이 지난 파일이 있다면 삭제하는 명령을 하루에 한번만 실행한다는 의미이다.

EC2 Ubuntu 환경에서 S3를 마운트하는데 도움이 되었길 바란다.

7 thoughts on “EC2 Ubuntu S3 마운트 방법

  1. df -h했을 때 s3fs가 나오나요?

    1. 네 아래와 같이 나옵니다.
      ==============================
      Filesystem Size Used Avail Use% Mounted on
      udev 492M 12K 492M 1% /dev
      tmpfs 100M 328K 99M 1% /run
      /dev/xvda1 7.8G 1.8G 5.6G 25% /
      none 4.0K 0 4.0K 0% /sys/fs/cgroup
      none 5.0M 0 5.0M 0% /run/lock
      none 497M 0 497M 0% /run/shm
      none 100M 0 100M 0% /run/user
      s3fs 256T 0 256T 0% /mnt/mymount

  2. 이거 사용하면 S3를 이미지 호스팅처럼 사용할 수 있는거지요?

    1. 제가 알기론 EC2와 연동하지 않고도 그냥 S3를 이미지 호스팅할 수 있는걸로 압니다.
      https://blog.codinghorror.com/using-amazon-s3-as-an-image-hosting-service/
      여기 한번 참고해보세요

      간단히 FTP처럼 S3Fox (파이어폭스 플러그인)을 이용해서 이미지들을 업로드하고,
      업로드한 이미지를 접근하는 주소는
      “http://s3.amazonaws.com/S3버킷명/이미지파일명” 이렇게 접근이 되는거 같네요.

  3. 감사합니다 덕분에 안드로이드와 ec2 연동에 성공했어요!!

  4. 와 ㅠㅠ 바로 성공했어요 감사합니다!

  5. Awesome post! Keep up the great work! 🙂

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다