**2023.08 Update : AWS에서 S3 공식 마운트 방법이 "Mountpoint for Amazon S3"라는 이름으로 정식 출시 되었습니다.
해당 솔루션에 관한 자세한 내용은 AWS Blog링크를 참고 해주시고, 저희도 테스트 해서 포스팅 할 계획입니다.
Summary
s3fs를 사용하여 EC2 Instance에 S3 Bucket을 Mount하여 사용하고자 하는데
어떤 방식으로 진행하면 될까요?
Solution
* 답변하기에 앞서, s3fs의 경우는 3rd party 솔루션으로 AWS에서 지원하는 공식 솔루션이 아닙니다.
* s3fs는 간헐적으로 연결이 불안정한 경우들이 있습니다. 따라서 실제 서비스 용도로 사용하는 것은 권고 하지 않습니다.
* 서비스용으로 EC2 Instance에 S3 Bucket을 Mount 를 원하신다면 EFS 활용 하시는 것을 권장드립니다.
s3fs 를 사용하여 EC2에 S3를 Mount 하는 방법에 관해 설명 드리겠습니다.
[사전 준비]
서비스 : EC2 인스턴스, S3 버킷
아래 테스트 과정을 캡쳐하여 함께 안내드리오니 참고 부탁드립니다.
ec2 서버에 S3 버킷에 대한 엑세스 권한을 정의하는 정책을 부여합니다.
부여한 IAM 정책은 아래와 같습니다.
- s3 버킷 : sohyun-bucket-test
- IAM Role : sohyun-s3-mount-test-role
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::sohyun-bucket-test"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::sohyun-bucket-test/*"
}
]
}
이 역할은 "sohyun-bucket-test"라는 특정 S3 버킷에 대한 리스트, 업로드, 다운로드, 삭제 및 ACL 관리와 같은
일련의 작업을 수행할 수 있는 권한을 부여하는 역할입니다.
(필요에 따라 권한을 수정하시어 사용하시면 됩니다.)
[테스트 과정]
s3fs 설치
# yum update
# yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel
# git clone https://github.com/s3fs-fuse/s3fs-fuse.git
# cd s3fs-fuse
# ./autogen.sh
# ./configure — prefix=/usr — with-openssl
# make
# sudo make install
mount 할 디렉토리 생성
# mkdir /backup_data
s3 mount
# s3fs -o iam_role="sohyun-s3-mount-test-role" -o url=https://s3-us-west-2.amazonaws.com -o endpoint=us-west-2 -o allow_other -o use_cache=/tmp sohyun-bucket-test /backup_data
-o iam_role="sohyun-s3-mount-test-role"
: s3fs가 IAM 역할 "sohyun-s3-mount-test-role"을 사용하여 S3 버킷에 액세스할 수 있도록 지정합니다. 이를 통해 역할에 부여된 권한을 사용하여 인증 없이 S3에 액세스할 수 있습니다.
-o url=https://s3-us-west-2.amazonaws.com
: S3의 엔드포인트 URL을 지정합니다. 이 경우, "us-west-2" 리전의 S3를 사용하고 있으며, 해당 리전의 엔드포인트 URL을 제공합니다. 다른 리전을 사용하는 경우 해당 리전의 엔드포인트 URL을 지정해야 합니다.
-o endpoint=us-west-2
: 마운트할 S3 버킷이 있는 AWS 리전을 지정합니다. 이 경우, "us-west-2" 리전을 사용하고 있으며, s3fs에게 해당 리전을 사용하도록 지시합니다.
-o allow_other
: 다른 사용자도 마운트된 파일 시스템에 접근할 수 있도록 허용합니다. 이 옵션을 사용하면 다른 사용자가 마운트된 S3 버킷에 액세스할 수 있습니다.
-o use_cache=/tmp
: s3fs가 데이터를 캐시할 디렉토리를 지정합니다. 이 경우, "/tmp" 디렉토리를 사용하여 캐시를 유지합니다.
mount 확인 및 s3 확인
서버에서 test.txt 파일을 생성하면, s3 버킷 콘솔에 바로 연동 되어 동일한 파일이 업로드 되는 것도 볼 수 있습니다.
Reference
▶ 참고문서[1] : https://github.com/s3fs-fuse/s3fs-fuse