S3 버킷을 파일시스템 형태로 마운트
CentOS를 포함한 AWS 환경의 리눅스 운영체제에서 디렉토리를 공유하여 사용하기 위해서는 일반적으로 EFS(엘라스틱 파일 시스템)을 이용합니다. 파일시스템 형태의 EFS 서비스와 달리 S3 의 경우 객체 기반의 오브젝트 스토리지이기 때문에 기본적으론 EC2 인스턴스에 마운트하여 사용하는 용도의 서비스는 아닙니다. 하지만 S3 버킷을 CentOS와 같은 리눅스 시스템에 파일시스템 형태로 마운트하여 사용하는 방법이 있어 참고 삼아 글을 작성합니다.
goofys
S3 버킷을 리눅스 시스템에 파일시스템 형태로 마운트하여 사용하기 위한 오픈소스 툴입니다. GO 언어 기반으로 제작되었으며, fuse 모듈을 이용합니다. (fuse - 사용자가 커스텀 파일시스템을 만들 수 있도록 하는 유닉스 계열 운영체제용 소프트웨어 인터페이스, 커널 모듈)
goofys는 AWS에서 공식적으로 제공하는 기능이 아닌 오픈소스로 만들어진 소프트웨어입니다.
S3 버킷을 소프트웨어적으로 파일시스템으로 인식하도록하여 마운트하는 것이기 때문에 당연히 EBS 볼륨에 비해 안정성과 속도 모두 떨어진다고 합니다.
아래는 goofys 와 동일하게 S3 버킷을 파일시스템으로 마운트하는 툴인 s3fs와 읽기/쓰기를 비교한 것이라고 합니다.
IAM 사용자 생성
goofys 가 S3 버킷을 마운트하기 위해서는 AWS 액세스키와 시크릿 액세스키를 이용하기 때문에, S3 버킷 권한만을 가진 IAM 사용자를 새로 생성합니다.
go 설치 및 환경변수 설정
yum install -y golang fuse
mkdir -p /usr/local/golang
cat << EOF >> ~/.bash_profile
export GOROOT=/usr/lib/golang
export GOBIN=$GOROOT/bin
export GOPATH=/usr/local/golang
export PATH=$PATH:$GOROOT/bin
EOF
source ~/.bash_profile
# go 환경변수 확인
go env
goofys 설치
go get github.com/kahing/goofys
go install github.com/kahing/goofys
AWS 자격 증명 설정
mkdir ~/.aws/
vim ~/.aws/credentials
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXX # 생성한 iam 사용자의 액세스키로 치환
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXX # 생성한 iam 사용자의 스크릿키로 치환
S3 버킷 마운트
# 마운트할 디렉토리 생성
mkdir /S3_data
# 마운트 방법
goofys S3_버킷_이름 마운트할_로컬_디렉토리
예)
goofys image /S3_data
마운트 확인
"df -h" 명령어로 정상적으로 마운트가 되었는지 확인합니다.
마운트한 디렉토리로 이동하여 디렉토리 및 파일 생성한 뒤, AWS 콘솔상에서 동일한 디렉토리 및 파일이 생성되었는지 확인합니다.
파일을 다운로드하여 파일의 내용도 이상 없이 동일한지 확인합니다.
fstab 설정
재부팅 시 자동으로 마운트 되도록 /etc/fstab 파일을 작성합니다.
goofys_명령어_절대경로#마운트할_버킷_이름 마운트할_디렉토리 fuse _netdev 0 0
재부팅하여 정상적으로 마운트가 되는지 테스트합니다.
결론
S3 버킷을 리눅스 인스턴스에 파일시스템 형태로 마운트하는 방법을 알아보았습니다. 속도 및 안정성 면에서 권장할만한 방법은 아니지만 간단히 로그 백업 정도의 용도로는 사용할 수 있을 것으로 생각됩니다.