[s3fs] Mac 이나 Linux에서 S3에 파일 시스템으로 마운트 하기 Develop Tip

아마도 싸고 이용하기 쉬운 저장공간을 예로 들라하면 아마존의  S3를 들 수 있겠는데요,
이를 서비스로 이용하면서 로컬 공간 처럼 사용하면 좋겠다는 생각이 당연히 들 수 있습니다.

이를 지원해 주는 것이 바로 s3fs-fuse 라는 것이 있네요.
설치하는 것은 간단한 편입니다.

우분투에서는 
sudo apt-get install s3fs

페도라에서는
sudo yum install s3fs-fuse

맥에서는
brew cask install osxfuse
brew install s3fs

라고 설치하면 됩니다.

설치는 이상없이 잘 됩니다.

이제는 AWS에 S3를 만들어 놓았다는 가정하에
AccessKey 와 SecretKey 를 다음과 같이 저장해 놓습니다.

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs

위에 ACCESS_KEY_ID 와 SECRET_ACCESS_KEY 는 자신의 것으로 대치합니다.

그리고 커맨드로 다음과 같이 돌려보면 된다고 하여,

s3fs mybucket /path/to/mountpoint -o passwd_file=${HOME}/.passwd-s3fs
를 돌려보았으나 제대로 동작하지 않았습니다.

그래서 디버깅 옵션을 주고 돌려보았더니,

$ s3fs mybucket ${HOME}/mybucket -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -f -o curldbg
[CRT] s3fs.cpp:set_s3fs_log_level(257): change debug level from [CRT] to [INF]
[INF]     s3fs.cpp:set_mountpoint_attribute(4193): PROC(uid=1000, gid=1000) - MountPoint(uid=1000, gid=1000, mode=40775)
[CRT] s3fs.cpp:s3fs_init(3378): init v1.82(commit:unknown) with GnuTLS(gcrypt)
[INF] s3fs.cpp:s3fs_check_service(3754): check services.
[INF]       curl.cpp:CheckBucket(2914): check a bucket.
[INF]       curl.cpp:prepare_url(4205): URL is https://s3.amazonaws.com/pkg.argos-labs.com/
[INF]       curl.cpp:prepare_url(4237): URL changed is https://pkg.argos-labs.com.s3.amazonaws.com/
[INF]       curl.cpp:insertV4Headers(2267): computing signature [GET] [/] [] []
[INF]       curl.cpp:url_to_host(100): url is https://s3.amazonaws.com
*   Trying 52.219.56.110...
* TCP_NODELAY set
* Connected to pkg.argos-labs.com.s3.amazonaws.com (52.219.56.110) port 443 (#0)
* found 133 certificates in /etc/ssl/certs/ca-certificates.crt
* found 401 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
*        server certificate verification OK
*        server certificate status verification SKIPPED
* SSL: certificate subject name (*.s3.amazonaws.com) does not match target host name 'pkg.argos-labs.com.s3.amazonaws.com'
* stopped the pause stream!
* Closing connection 0
[ERR] curl.cpp:RequestPerform(2078): ###curlCode: 51  msg: SSL peer certificate or SSH remote key was not OK
[ERR] curl.cpp:CheckBucket(2953): Check bucket failed, S3 response:
[CRT] s3fs.cpp:s3fs_check_service(3820): unable to connect(host=https://s3.amazonaws.com) - result of checking service.
[ERR] s3fs.cpp:s3fs_exit_fuseloop(3368): Exiting FUSE event loop due to errors

[INF] s3fs.cpp:s3fs_destroy(3441): destroy
[WAN] s3fs.cpp:s3fs_destroy(3445): Could not release curl library.

위와 같이 오류 메시지가 나왔습니다. 음.. 무언가 지정을 안해서 그런가 싶어,

$ export region=ap-northeast-2
$ s3fs mybucket ${HOME}/mybucket -o dbglevel=info -f -o curldbg -o use_path_request_style -o url=https://s3-${region}.amazonaws.com

와 같이 하였더니 비로소 잘 동작을 하였습니다.

결론은 특정 리전 (위에서는 Seoul 리전)을 지정해야 한다는 것입니다.

따라서 다음과 같이 간단하게 Shell Script를 만들어 동작하게 하거나,

$ cat mts3
#!/bin/bash
export region=ap-northeast-2
s3fs mybucket ${HOME}/mybucket -o use_path_request_style -o url=https://s3-${region}.amazonaws.com -o uid=1000 -o gid=1000

(보통 Mac 에서는 uid에 501, gid에 20을 넣습니다. 자신의 계정에서 id 명령으로 확인해 봅니다)

또는 /etc/fstab 에 다음과 같은 줄을 넣어 

s3fs#mybucket /home/user/mybucket        fuse    _netdev,allow_other,use_path_request_style,url=https://s3-ap-northeast-2.amazonaws.com/,uid=1000,gid=1000

$ sudo mount a
또는 reboot 을 하면 잘 동작하였습니다.


어느 분께는 도움이 되셨기를 ..


핑백

덧글

댓글 입력 영역

구글애드텍스트