Amazon Web Services 한국 블로그

Amazon S3 업데이트 – 신규 스토리지 클래스 및 S3 Select 정식 출시

Amazon Simple Storage Service(S3)에서 데이터를 저장하고 검색하는 사용자를 위한 두 가지 뉴스가 있습니다.

  • S3 One Zone-IA 스토리지 클래스 – 기존 Standard-IA 스토리지 클래스보다 20% 저렴한 새로운 스토리지 클래스로, 지리적 이중화를 통한 높은 수준의 보호 기능이 필요 없는 데이터를 저장하는 데 사용하도록 설계되었습니다.
  • S3 Select 정식 출시 – 이 고유한 검색 옵션은 간단한 SQL 표현식을 사용하여 S3 객체에서 일부 데이터를 검색하도록 지원하며 그 과정에서 성능을 최대 400% 향상시킬 수 있습니다.

두 가지 기능을 모두 살펴보겠습니다.

S3 One Zone-IA(Infrequent Access) 스토리지 클래스
이 새로운 스토리지 클래스는 단일 AWS 가용 영역에 데이터를 저장하며 다른 S3 스토리지 클래스와 마찬가지로 99.99999999%의 데이터 내구성을 제공하도록 설계되었습니다. 반면 다른 클래스와 달리, 지진이나 홍수 같은 대규모 재해로 인한 물리적 AZ 손실로부터 데이터를 복구하도록 설계되지 않았으며, AZ가 파괴되는 드문 경우에 데이터가 손실될 수 있습니다. S3 One Zone-IA 스토리지는 온프레미스 데이터와 손쉽게 재생성할 수 있는 데이터의 저렴한 보조 백업 옵션을 제공합니다. 또한 다른 AWS 리전으로부터의 S3 리전 간 복제를 수행할 때 이 스토리지를 타겟으로 사용할 수도 있습니다.

S3에 새 객체를 업로드할 때 S3 One Zone-IA 스토리지를 사용하도록 지정할 수 있습니다.

S3 수명 주기 규칙의 일부로 사용할 수도 있습니다.

30일 이상이 지나면 객체의 이전 버전을 S3 One Zone-IA로 이동하는 수명 주기 규칙을 설정할 수 있습니다.

기존 객체의 스토리지 클래스를 수정할 수 있습니다.

S3 API, CLI 및 CloudFormation 템플릿을 사용하여 스토리지 클래스를 관리할 수 있습니다.

S3 One Zone-IA 스토리지 클래스는 모든 퍼블릭 AWS 리전에서 사용할 수 있습니다. 앞서 언급했듯이 S3 Standard-IA 스토리지 클래스보다 요금이 20% 저렴합니다(자세한 정보는 S3 요금 페이지 참조). 최소 보존 기간은 30일이며 최소 객체 크기는 128KB입니다.

S3 Select 정식 출시
작년에 Randall은 S3 Select를 자세히 소개하는 글을 통해 이 솔루션을 활용하여 S3 객체에서 선택한 데이터를 검색하는 방법을 설명했습니다. 프리뷰 과정에서 서버측 암호화에 대한 지원과 S3 콘솔에서 쿼리를 실행하는 기능을 추가했습니다.

당시 공항 코드의 CSV 파일을 이용하여 새로운 콘솔 기능을 사용해 보았습니다.

이 파일에는 9100여 개 공항의 목록이 포함되어 있어 테스트 데이터로 유용하지만 S3 Select를 한계까지 테스트하기에는 부족합니다. 파일을 선택하고 More 메뉴를 연 다음 Select from을 선택합니다.

이 콘솔은 파일 이름과 암호화 상태에 따라 파일 형식과 압축을 설정합니다. 구분자를 설정하고 Show file preview를 클릭하여 설정이 올바른지 확인합니다. 그런 다음 Next를 클릭하여 계속 진행합니다.

SQL 편집기에 SQL 표현식을 입력하고 Run SQL을 클릭하여 쿼리를 실행합니다.

또는:

AWS SDK에서 쿼리를 실행할 수도 있습니다. select 작업을 시작합니다.

s3 = boto3.client('s3', region_name='us-west-2')

r = s3.select_object_content(
        Bucket='jbarr-us-west-2',
        Key='sample-data/airportCodes.csv',
        ExpressionType='SQL',
        Expression="select * from s3object s where s.\"Country (Name)\" like '%United States%'",
        InputSerialization = {'CSV': {"FileHeaderInfo": "Use"}},
        OutputSerialization = {'CSV': {}},
)

그런 다음 결과 스트림을 처리합니다.

for event in r['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        print(records)
    elif 'Stats' in event:
        statsDetails = event['Stats']['Details']
        print("Stats details bytesScanned: ")
        print(statsDetails['BytesScanned'])
        print("Stats details bytesProcessed: ")
        print(statsDetails['BytesProcessed'])

S3 Select는 모든 퍼블릭 리전에서 사용할 수 있으며 지금 바로 사용을 시작할 수 있습니다. 요금은 스캔하는 데이터의 양과 반환되는 데이터의 양을 기준으로 합니다.

Jeff;