**2023.08 Update : AWS에서 S3 공식 마운트 방법이 "Mountpoint for Amazon S3"라는 이름으로 정식 출시 되었습니다.

해당 솔루션에 관한 자세한 내용은 AWS Blog링크를 참고 해주시고, 저희도 테스트 해서 포스팅 할 계획입니다.

https://aws.amazon.com/ko/blogs/korea/mountpoint-for-amazon-s3-generally-available-and-ready-for-production-workloads/


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 관리와 같은 

일련의 작업을 수행할 수 있는 권한을 부여하는 역할입니다.

(필요에 따라 권한을 수정하시어 사용하시면 됩니다.)


[테스트 과정]


  1. 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


  1. mount 할 디렉토리 생성


# mkdir /backup_data



  1. 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" 디렉토리를 사용하여 캐시를 유지합니다.


  1. mount 확인 및 s3 확인



서버에서 test.txt 파일을 생성하면, s3 버킷 콘솔에 바로 연동 되어 동일한 파일이 업로드 되는 것도 볼 수 있습니다.



 test.txt 파일을 생성하면, s3  






Reference

▶ 참고문서[1] : https://github.com/s3fs-fuse/s3fs-fuse