S3 Express One 사용하기

S3 Express One 사용하기

AWS S3에는 일반 버킷보다 빠른 고속 변형인 S3 Express One Zone이 있어요. 이번 페이지에서는 DuckDB로 S3 Express One 버킷을 읽는 방법을 정리합니다.

출처: 공식문서

2023년 말, AWS는 전통적인 S3 버킷의 고속 변형인 S3 Express One Zone발표했어요. DuckDB는 httpfs 확장을 이용해 S3 Express One 버킷을 읽을 수 있습니다.

자격 증명 및 설정 (Credentials and Configuration)

S3 Express One 버킷의 설정은 일반 S3 버킷과 거의 동일한데, 한 가지 예외가 있어요. 엔드포인트(endpoint) 를 다음 패턴으로 지정해야 합니다.

s3express-⟨availability_zone⟩.⟨region⟩.amazonaws.com

여기서 ⟨availability_zone⟩(예: use-az5)은 S3 Express One 버킷의 설정 페이지에서 얻을 수 있고, ⟨region⟩은 AWS 리전(예: us-east-1)입니다.

예를 들어 DuckDB가 S3 Express One 버킷을 쓰게 하려면, Secrets manager를 다음과 같이 구성하면 돼요.

CREATE SECRET (
    TYPE s3,
    KEY_ID '⟨AKIAIO...MPLE⟩',
    SECRET '⟨wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY⟩',
    REGION '⟨us-east-1⟩',
    ENDPOINT 's3express-⟨use1-az5⟩.⟨us-east-1⟩.amazonaws.com'
);

인스턴스 위치 (Instance Location)

최고 성능을 원한다면 EC2 인스턴스가 쿼리 대상 S3 Express One 버킷과 같은 가용 영역(availability zone) 에 있어야 해요. 존 이름과 존 ID 사이의 매핑을 확인하려면 aws ec2 describe-availability-zones 명령을 사용합니다.

  • 존 이름 → 존 ID 매핑:

    aws ec2 describe-availability-zones --output json \
        | jq -r '.AvailabilityZones[] | select(.ZoneName == "us-east-1f") | .ZoneId'
    
    use1-az5
    
  • 존 ID → 존 이름 매핑:

    aws ec2 describe-availability-zones --output json \
        | jq -r '.AvailabilityZones[] | select(.ZoneId == "use1-az5") | .ZoneName'
    
    us-east-1f
    

쿼리 (Querying)

S3 Express One 버킷은 다른 S3 버킷과 똑같이 조회할 수 있어요.

SELECT *
FROM 's3://express-bucket-name--use1-az5--x-s3/my-file.parquet';

성능 (Performance)

다음 실험은 c7gd.12xlarge 인스턴스에서 LDBC SF300 Comments creationDate Parquet 파일(성능 가이드의 마이크로벤치마크에서도 쓰는 데이터셋)로 진행됐어요.

실험 파일 크기 실행 시간
Parquet에서 로드만 하기 4.1 GB 3.5 s
Parquet에서 로컬 테이블 만들기 4.1 GB 5.1 s

“로드만” 변형은 EXPLAIN ANALYZE 문의 일부로 로드를 실행해서 실제 로컬 테이블을 만들지 않고 실행 시간만 재는 방식이에요. 반면 “로컬 테이블 만들기” 변형은 CREATE TABLE ... AS SELECT를 써서 로컬 디스크에 영구 테이블을 만듭니다.

더 알아보기 (Learn more)

  • S3 일반 버킷 읽기는 S3 가져오기 문서를 참고하세요.
  • Secret 설정 문법 전체는 CREATE SECRET 문서에서 다룹니다.