Amazon Web Services 한국 블로그

Mountpoint for Amazon S3 정식 출시 – 오픈 소스 기반 파일 시스템 클라이언트

Mountpoint for Amazon S3는 파일 인식 Linux 애플리케이션을 Amazon Simple Storage Service(S3) 버킷에 직접 쉽게 연결할 수 있게 하는 오픈 소스 파일 클라이언트입니다. 올해 초 알파 릴리스로 발표된 이 제품이 이제 정식 출시되어 데이터 레이크, 기계 학습 교육, 이미지 렌더링, 자율 주행 차량 시뮬레이션, ETL 등의 대규모 읽기 집약적 애플리케이션에서 프로덕션 용도로 사용할 수 있습니다. 이 제품은 순차 및 임의 읽기, 순차적(추가만) 쓰기를 수행하고 전체 POSIX 의미 체계가 필요 없는 파일 기반 워크로드를 지원합니다.

왜 파일인가?
많은 AWS 고객이 S3 APIAWS SDK를 사용하여 S3 버킷의 콘텐츠를 나열, 액세스 및 처리할 수 있는 애플리케이션을 구축합니다. 그러나 많은 고객이 UNIX 스타일로 파일에 액세스하는 방법(디렉터리 읽기, 기존 파일 열기 및 읽기, 새 파일 생성 및 작성)을 알고 있는 기존 애플리케이션, 명령, 도구 및 워크플로를 가지고 있습니다. 이러한 고객들은 S3에 대한 고성능 액세스를 대규모로 지원하는 공식 엔터프라이즈 지원 클라이언트를 요청했습니다. 이러한 고객과 이야기를 나누고 많은 질문을 한 결과, 성능과 안정성이 고객의 주요 관심사이며 POSIX 규정 준수가 꼭 필요한 것은 아님을 알게 되었습니다.

2006년에 Amazon S3에 대해 처음 글을 썼을 때 저는 이것이 파일 시스템이 아닌 객체 스토어로 사용하기 위한 것임을 분명히 했습니다. Mountpoint/S3 조합을 사용하여 Git 리포지토리 등을 저장하고 싶지 않더라도 S3의 규모와 내구성을 활용하면서 파일을 읽고 쓸 수 있는 도구와 함께 이를 사용하는 것이 여러 가지 상황에서 합리적입니다.

Mountpoint에 대한 모든 것
Mountpoint는 개념적으로 매우 간단합니다. 탑재 지점을 생성하고 탑재 지점에 Amazon S3 버킷 또는 버킷 내 경로를 탑재한 다음, 쉘 명령(ls, cat, dd, find 등), 라이브러리 함수(open, close, read, write, creat, opendir 등) 또는 이미 사용 중인 도구 및 언어에서 지원되는 동등한 명령 및 함수를 사용하여 버킷에 액세스합니다.

내부적으로 Linux VFS(Virtual Filesystem)는 이러한 작업을 Mountpoint에 대한 호출로 변환하고, Mountpoint는 이를 S3에 대한 호출(LIST, GET, PUT 등)로 변환합니다. Mountpoint는 네트워크 대역폭을 잘 활용하여 처리량을 늘리고 더 짧은 시간에 더 많은 작업을 수행하여 컴퓨팅 비용을 절감할 수 있도록 합니다.

MountpointAmazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 사용하거나 Amazon Elastic Container Service(Amazon ECS) 또는 Amazon Elastic Kubernetes Service (Amazon EKS) 컨테이너 내에서 사용할 수 있습니다. AWS PrivateLink for Amazon S3를 사용한 AWS Direct Connect 연결을 통해 또는 직접 S3에 액세스하여 기존 온프레미스 시스템에 이를 설치할 수도 있습니다.

Mountpoint for Amazon S3 설치 및 사용
Mountpoint는 RPM 형식으로 사용할 수 있으며 Amazon Linux를 실행하는 EC2 인스턴스에 쉽게 설치할 수 있습니다. RPM을 가져와서 yum을 사용하여 설치하기만 하면 됩니다.

$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
$ sudo yum install ./mount-s3.rpm

지난 몇 년 동안 저는 여러 Washington State Ferry 웹캠에서 정기적으로 이미지를 가져와서 제 wsdot-ferry 버킷에 저장했습니다.

저는 페리의 왕복을 추적하기 위해 이러한 이미지를 수집합니다. 목표는 어떤 시점의 이미지들을 분석하여 페리를 타기 가장 좋은 시간을 찾는 것입니다. 오늘 제 목표는 하루 분량의 이미지를 멋진 타임 랩스로 결합하는 영화를 만드는 것입니다. 먼저 탑재 지점을 생성하고 버킷을 탑재합니다.

$ mkdir wsdot-ferry
$ mount-s3 wsdot-ferry wsdot-ferry

탑재 지점을 통과하여 버킷을 검사할 수 있습니다.

$ cd wsdot-ferry
$ ls -l | head -10
total 0
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2020_12_30
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2020_12_31
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_01
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_02
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_03
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_04
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_05
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_06
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 2021_01_07
$
$  cd 2020_12_30
$ ls -l
total 0
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 fauntleroy_holding
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 fauntleroy_way
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 lincoln
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 trenton
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_112_north
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_112_south
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_bunker_north
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_bunker_south
drwxr-xr-x 2 jeff jeff 0 Aug  7 23:07 vashon_holding
$
$ cd fauntleroy_holding
$  ls -l | head -10
total 2680
-rw-r--r-- 1 jeff jeff  19337 Feb 10  2021 17-12-01.jpg
-rw-r--r-- 1 jeff jeff  19380 Feb 10  2021 17-15-01.jpg
-rw-r--r-- 1 jeff jeff  19080 Feb 10  2021 17-18-01.jpg
-rw-r--r-- 1 jeff jeff  17700 Feb 10  2021 17-21-01.jpg
-rw-r--r-- 1 jeff jeff  17016 Feb 10  2021 17-24-01.jpg
-rw-r--r-- 1 jeff jeff  16638 Feb 10  2021 17-27-01.jpg
-rw-r--r-- 1 jeff jeff  16713 Feb 10  2021 17-30-01.jpg
-rw-r--r-- 1 jeff jeff  16647 Feb 10  2021 17-33-02.jpg
-rw-r--r-- 1 jeff jeff  16750 Feb 10  2021 17-36-01.jpg
$

다음과 같은 단일 명령으로 애니메이션을 만들 수 있습니다.

$ ffmpeg -framerate 10 -pattern_type glob -i "*.jpg" ferry.gif

다음은 결과물입니다.

보시다시피 Mountpoint를 사용하여 기존 이미지 파일에 액세스하고 새로 만든 애니메이션을 다시 S3에 썼습니다. 이는 매우 간단한 데모이지만 기존 도구와 기술을 사용하여 S3 버킷의 객체를 처리하는 방법을 보여줍니다. 수년에 걸쳐 수백만 개의 이미지를 수집했다는 점을 감안할 때 이미지를 로컬 파일 시스템에 명시적으로 동기화하지 않고 처리할 수 있다는 것은 큰 장점입니다.

Mountpoint for Amazon S3의 몇 가지 유의할 점
다음은 Mountpoint를 사용할 때 유의해야 할 몇 가지 사항입니다.

  • 요금Mountpoint 사용에 대한 새로운 요금은 없습니다. 기본 S3 작업에 대해서만 비용을 지불하면 됩니다. Mountpoint를 사용하여 요청자 지불 버킷에 액세스할 수도 있습니다.
  • 성능Mountpoint는 각 EC2 인스턴스와 S3 간 최대 100Gb/초의 데이터 전송을 비롯하여 S3에서 제공하는 탄력적 처리량을 활용할 수 있습니다.
  • 보안 인증Mountpoint는 버킷을 탑재할 때 유효한 AWS 보안 인증을 사용하여 S3 버킷에 액세스합니다. 보안 인증, 버킷 구성, 요청자 지불 사용, S3 객체 Lambda 사용 팁 등에 대한 자세한 내용은 CONFIGURATION 문서를 참조하세요.
  • 작업 및 의미 체계Mountpoint는 기본 파일 작업을 지원하며 최대 5TB 크기의 파일을 읽을 수 있습니다. 또한 기존 파일을 나열하고 읽을 수 있으며 새 파일을 생성할 수 있습니다. 그러나 기존 파일을 수정하거나 디렉터리를 삭제할 수 없으며 심볼 링크 또는 파일 잠금을 지원하지 않습니다(POSIX 의미 체계가 필요한 경우 Amazon FSx for Lustre 검토). 지원되는 작업과 그 해석에 대한 자세한 내용은 SEMANTICS 문서를 참조하세요.
  • 스토리지 클래스Mountpoint를 사용하여 S3 Glacier Flexible Retrieval, S3 Glacier Deep Archive, S3 Intelligent-Tiering Archive Access Tier 및 S3 Intelligent-Tiering Deep Archive Access Tier를 제외한 모든 스토리지 클래스의 S3 객체에 액세스할 수 있습니다.
  • 오픈 소스Mountpoint는 오픈 소스이며 공개 로드맵이 있습니다. 여러분의 기여를 환영합니다. 먼저 Contributing GuidelinesCode of Conduct를 읽어보세요.

지금 사용해 보세요!
보시다시피 Mountpoint는 정말 멋집니다. 이를 애플리케이션에서 잘 활용하는 방법을 찾으실 것입니다. 지금 확인하고 여러분의 생각을 알려주세요.

Jeff