260307 TIL #636 FUSE & MountPointS3

김춘복·6일 전

TIL : Today I Learned

목록 보기
640/640

Today I Learned

코드제출 worker에서 S3에 있는 zip 파일을 boto3를 이용해서 받지 않고, file system을 이용하는 것처럼 엑세스해서 압축을 해제한 뒤에 가져오는 방법으로 바꿔보았다.


FUSE(Filesystem in Userspace) 개요

파일 시스템은 본래 운영체제 커널의 영역. 새로운 파일 시스템을 만들려면 복잡한 커널 코드를 수정해야 하며, 오류 발생 시 시스템 전체가 다운될 위험이 있음. FUSE는 이러한 제약을 해결하기 위해 등장한 기술

  • 커널 수정 없이 사용자 영역(User Space)에서 파일 시스템을 구현할 수 있게 해주는 프레임워크.
  • 개발자가 C, Python, Go 등 익숙한 언어로 파일 시스템 로직을 작성할 수 있어 개발 생산성이 높음.
  • 사용자 영역에서 동작하므로 버그가 발생해도 시스템 전체의 안정성에 미치는 영향이 적음.
  • 클라우드 저장소를 로컬 드라이브처럼 연결하는 기술의 기반이 됨.

Mountpoint for Amazon S3란?

Mountpoint for Amazon S3는 AWS에서 공식적으로 개발한 오픈소스 FUSE 클라이언트. S3 버킷을 리눅스 시스템의 로컬 디렉토리처럼 마운트하여 사용할 수 있게 지원.

주요 특징 및 장점

  • 높은 성능: AWS 환경에 최적화되어 대량의 데이터를 다루는 작업에서 높은 처리량을 보여줌.
  • POSIX 인터페이스 지원: 별도의 SDK나 API 호출 없이도 표준 파일 인터페이스(open, read 등)로 S3 데이터에 접근 가능함.
  • 비용 효율성: 로컬 디스크를 거치지 않고 S3와 직접 통신하여 스토리지 비용과 관리 리소스를 줄여줌.
  • 관리의 용이성: AWS 공식 도구로서 IAM 역할(Role)을 통한 인증 및 권한 관리가 간편.

최적의 유즈케이스

모든 작업에 적합한 것은 아니며, 특정 워크로드에서 강력한 성능을 발휘함.

  • 머신러닝 학습: 대규모 데이터셋을 S3에서 직접 읽어와 학습 모델에 공급하는 경우.
  • 데이터 렌더링 및 분석: S3에 저장된 대용량 미디어 파일이나 로그 데이터를 분석 도구로 읽어 들일 때.
  • 백업 및 아카이빙: 로컬 결과물을 S3로 직접 전송하여 저장하는 워크플로우.

사용 시 유의사항

S3는 객체 스토리지이므로 일반적인 파일 시스템과는 동작 방식이 다름을 인지해야 함.

  • 순차적 읽기/쓰기에 최적화되어 있어, 기존 파일의 중간 내용을 수정하는 작업은 지원되지 않음.
  • 심볼릭 링크 생성이나 파일 권한(Chmod) 변경 등 일부 POSIX 기능이 제한될 수 있음.
  • 빈 디렉토리는 S3 상에서 실재하지 않으므로 로컬과는 다르게 보일 수 있음.
  • 대용량 데이터 전송 시 EC2 대역폭과 S3 처리량 제한 고려해야함.

사용 설정

EC2 서버에서 사용하는 방법

  1. IAM 권한 부여
  • AmazonS3FullAccess이나 특정 버킷에 대한 Get, List, Put 권한이 포함된 정책을 EC2에 연결
  1. Mountpoint for Amazon S3 설치
# 최신 패키지 다운로드 (x86_64 아키텍처 기준)
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm

# yum을 이용한 설치
sudo yum install ./mount-s3.rpm -y

# 설치 버전 확인
mount-s3 --version
  1. 마운트
# 마운트 포인트 디렉토리 생성
mkdir ~/my-s3-bucket

# S3 버킷 마운트 실행 (버킷명: my-example-bucket)
mount-s3 my-example-bucket ~/my-s3-bucket
  • --readonly: 읽기 전용 모드로 마운트함.
  • --allow-delete: 파일 삭제 권한을 허용함 (기본값은 삭제 불가).
  • --region: 버킷이 위치한 리전을 명시함 (필요 시).
  • 마운트 이후로는 ls 같은 파일시스템처럼 인식해서 사용하면 됨
  1. 마운트 해제
umount ~/my-s3-bucket
  • systemd 를 이용한 자동 마운트 설정
[Unit]
Description=Mountpoint for Amazon S3
After=network.target

[Service]
Type=forking
User=ec2-user
Group=ec2-user
ExecStart=/usr/bin/mount-s3 my-example-bucket /home/ec2-user/my-s3-bucket --allow-other --uid 1000 --gid 1000
ExecStop=/usr/bin/umount /home/ec2-user/my-s3-bucket
Restart=always

[Install]
WantedBy=multi-user.target
# 데몬 재로드
sudo systemctl daemon-reload

# 서비스 활성화 (부팅 시 자동 실행)
sudo systemctl enable s3-mount

# 서비스 시작
sudo systemctl start s3-mount

적용 후 장단점

  • 기존 zip 파일 다운 -> 압축해제 -> zip 파일 삭제를 바로 압축해제 과정만 진행하면 되므로 로컬 디스크 공간 관리 효율화 및 로직 효율화로 인한 속도 개선.
  • S3 API 의존성이 제거되어 코드 복잡도는 감소했지만, 저장소를 S3에서 다른 곳으로 바꿀경우 Mountpoint가 아닌 다른 라이브러리로 FUSE 로직을 유지해야하는 기술적 부담은 있음.
profile
Full-Stack Dev / MLOps

0개의 댓글