23년 3월 14일에 고성능 오픈 소스 파일 클라이언트인 Mountpoint for Amazon S3의 알파 릴리스가 공개되었습니다.
그리고 공개 이후 5개월 뒤인 2023년 8월 14일에 정식 출시되었습니다.
이번 글에서는 정식 출시된 Mountpoint for S3를 테스트해 보고, 어떻게 사용할 수 있을지에 대해 알아보겠습니다.
Mountpoint for Amazon S3 정식 출시 – 오픈 소스 기반 파일 시스템 클라이언트 | Amazon Web Services 한국 블로그
마운트된 S3에 있는 객체를 가져와 작업하는 테스트는 위 글에서 보여주고 있으니 생략하겠습니다.
제가 테스트할 내용은 Mountpoint가 웹 서비스에서 로컬 디스크처럼 사용될 수 있는지 확인하는 것입니다.
테스트 환경은 Amazon Linux 2입니다. 대상 S3 버킷은 퍼블릭 액세스가 차단된 상태입니다.
명령을 실행하는 사용자는 root 사용자입니다.
먼저 Mountpoint 패키지를 받아 설치합니다.
$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
$ sudo yum install ./mount-s3.rpm
※ rpm 파일을 받아 설치를 진행하기에 Ubuntu에서 Mountpoint for S3를 사용하려면 alien 패키지를 통해 변환해서 설치해야 합니다.
이후 mount-s3 명령어를 사용해 디렉터리와 S3 버킷을 연결합니다.
기본 명령어는 아래와 같습니다.
$ mount-s3 [S3 bucket name] [dir name]
아래는 마운트 명령어 실행 예시입니다.
$ mkdir ./mnt-dir
$ mount-s3 test-bucket mnt-dir
mount-s3 -h 명령을 통해 사용 가능한 다른 옵션들을 확인할 수 있습니다.
아래 사진은 사용 가능한 옵션 중 일부입니다.
마운트 시 사용 가능한 옵션은 여러 가지가 있지만, 자주 사용할 만한 옵션은 아래와 같습니다.
--prefix : 버킷 전체를 마운트하는 것이 아니라 버킷 내에 있는 접두사 기준으로 마운트
--allow-delete : 마운트된 서버에서 버킷 내 파일을 삭제할 수 있도록 설정
--allwo-other : 마운트를 실행한 사용자 외에 다른 사용자도 접근을 허용
--dir-mode [DIR_MODE] : 디렉토리 권한 설정(기본값 0755)
--file-mode [FILE_MODE] : 파일 권한 설정(기본값 0644)
예를 들면, 별다른 옵션 없이 기본값으로 마운트하면 마운트된 S3에 파일(객체) 업로드는 가능하지만 삭제는 할 수 없습니다.
마운트된 서버에서 S3의 객체를 삭제하려면 마운트 시 --allow-delete 옵션을 넣어야 합니다.
마운트 해제 시에는 umount [mounted dir] 명령을 실행하면 됩니다.
객체 업로드 후, 해당 객체를 서버 측에서 수정할 수 없습니다.
S3를 서버에 마운트해 사용할 수 있는 용도 중 하나는 웹 서비스의 정적 컨텐츠를 저장하고 로컬 디렉토리를 사용해 접근하는 것이 있습니다.
테스트 서버에 아파치 웹 서비스(httpd)를 설치한 후, index.html에 아래와 같이 작성했습니다.
간단한 HTML 코드에서 이미지에 접근하는 3가지 방식을 비교해 보았습니다.
- 로컬 경로에 있는 이미지에 접근
- Cloudfront를 사용해 S3 원본에 접근
- Mountpoint를 사용해 마운트된 경로를통해 접근
결과는 위와 같습니다. 마지막에 있는 Mountpoint 방식만 이미지가 표시되지 않습니다.
개발자 도구를 통해 확인해보면 Mountpoint를 사용해 연결된 경로로 접근할 경우 403 에러와 함께 이미지가 표시되지 않습니다.
위와 같은 문제가 발생하는 이유는 마운트 시 --allow-other 옵션을 설정하지 않았기 때문입니다.
일반적인 마운트라면 마운트 후 위에서 보이는 바와 같이 permission에 따라 권한 정도가 설정되겠지만, Mountpoint의 내부 구성은 명령어를 S3 API로 변환시켜주는 형태이기에 위에서 보이는 권한만으로 판단하기 어렵습니다.
리스트에 보이는 파일에 접근/실행하는 것과 API로 변환되어 해당 객체에 접근/실행하는 것은 다르기 때문입니다.
즉 httpd 프로세스를 실행하는 사용자 'apache'가 마운트된 경로를 통해 객체를 읽어오지 못해 발생한 문제입니다.
마운트를 해제하고 적절한 옵션과 함께 다시 마운트하겠습니다.
$ umount [Target Mounted Directory]
$ mount-s3 --prefix img/ --allow-other [Target S3 bucket] [Target Mounted Directory]
이제는 마운트된 경로에 있는 이미지가 잘 보입니다.
Permission 제한도 존재하지만 --allow-other 옵션을 통해 다른 사용자에게 마운트된 파일의 내용이 노출될 수 있으니 주의해야 합니다.
얼핏 보면 편리하게 S3를 마운트할 수 있어 EFS를 대체할 수 있을까? 라는 생각이 들지만 생각처럼 쉽게 대체되지는 않을 것 같습니다.
가장 대표적인 문제로는 Mountpoint는 실제로는 마운트가 아닌 CLI 명령어를 S3 API로 변환해 작동하는 것이기에 fstab에 등록해 재부팅 후에도 자동으로 마운트되도록 할 수 없습니다.
service 파일을 등록해 [systemctl enable]로 자동 마운트가 가능할 것으로 생각됩니다만, 테스트는 필요할 것 같네요.
성능 관련해서도 Mountpoint는 최대 100Gb/초의 데이터 전송이 가능하다고 하지만, EFS와 비교해서 얼마나 차이가 날지는 이 역시도 테스트가 필요하겠네요.
정식 출시된지 얼마 되지 않았기 때문에 Mountpoint가 게시된 Github에서도 여러 Issue가 제보되고 있습니다.
실제 환경에 도입을 고려하신다면 다방면으로 테스트 후 도입해야 할 것으로 생각됩니다.
'AWS' 카테고리의 다른 글
AWS Backup을 사용한 EC2 자동 백업 (0) | 2024.01.19 |
---|---|
EC2 관리하기 : 자동 백업, 자동 재부팅, 자동 재실행 (0) | 2024.01.18 |
AWS Application Migration Service(MGN) 실습 중 이모저모 (0) | 2022.12.22 |
AWS CodeDeploy 실습 중 이모저모 (0) | 2022.10.25 |
Linux/Windows CloudWatch Agent 설치 (0) | 2022.08.09 |
댓글