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 アベイラビリティゾーン(Availability Zone 以下 AZ)にデータを格納しつつ、これまでの S3 ストレージクラスと同様に、99.999999999% の耐久性が提供されるよう設計されています。他のクラスとは違い、地震や洪水などにより一つの AZ を物理的に失う場合に耐えうるようには設計されていません。そのため、滅多に起こることではないものの、一つの AZ が破壊されるような災害時には、データは失われる可能性があるということです。S3 One Zone-IA ストレージは、オンプレミスデータのセカンダリバックアップとして利用したり、簡単に再作成できるようなデータ格納といった用途のための低価格オプションとなります。また、異なる AWS リージョンからの S3 クロスリージョンレプリケーション のターゲットとしてご利用いただくことも可能です。

S3 One Zone-IA ストレージは、新しいオブジェクトを S3 へアップロードする際に指定することができます:

S3 ライフサイクルルールの一部としてもご利用いただけます:

30日以上経過した後に、以前のバージョンのオブジェクトを S3 One Zone-IA クラスへ移動するライフサイクルルールを定義することが可能です:

また、すでに存在するオブジェクトのストレージクラスを変更することも可能です:

S3 API , S3 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 は、全ての公開リージョンで 2018年4月4日よりご利用いただけます。料金は、スキャンされたデータ量と、返されたデータ量にもとづきます。
— Jeff; (翻訳は焼尾が担当しました。原文はこちら)