前回、仮想マシンのAmazon EC2を利用することで、サーバー1台の構成の環境でも物理サーバーより柔軟で可用性、耐障害性を高められることを解説しました。

 今回は、AWSで最も利用されるストレージといえる「Amazon S3(Simple Storage Service)」と、その派生サービス「Amazon Glacier」を取り上げます。

 S3の解説に入る前に、「ブロックストレージ」と「オブジェクトストレージ」というストレージのタイプについて説明します。前回解説したAmazon EBS(Elastic Block Store)とインスタンスストアはブロックストレージ、今回紹介するS3とGlacierはオブジェクトストレージに分類されます。

 ブロックストレージとオブジェクトストレージはどう違うのでしょうか。メガバイト級の巨大なテキストファイルの中の1文字だけを変更するケースで、その違いが象徴的に表れます。

 ブロックストレージでは、文字が含まれる1ブロック(ファイルの一部)を変更します。そのためデータの更新が高速で、使用する帯域幅が少なくて済みます。逆に、ブロックストレージの作成時に容量を決める必要があり、あとで拡張しにくいという特性があります。

 そのため、データの更新頻度が高く、低遅延が求められるEC2インスタンス(仮想マシン)のブートボリュームやデータベースのデータ領域などに適しています。

 一方のオブジェクトストレージでは、テキストファイルの中の1文字を変更するだけでも、ファイル全体の更新が必要になります。一般にブロックストレージよりも低速です。ただし、ファイル、識別キー、メタデータで構成される「オブジェクト」をフラットに並べて管理する方式なので、柔軟に容量を増やしやすい、という利点があります。

 そのため、画像・動画のファイルやアプリケーションのログファイルといった、更新頻度が低く、増え続けるファイルの保存に適しています。

ストレージの容量が自動拡張

 それでは、S3について解説していきます。S3の特徴を説明し、そのうえで「アクセス管理」の機能、性能や料金体系の異なる「ストレージクラス」、「応用的な機能」について解説します。

 S3は、AWSにおける汎用のオブジェクトストレージです。シンプルなhttp(s)ベースのWeb APIを持っており、インターネット経由でアクセスできるのに加え、AWS上の仮想ネットワークVPC(Virtual Private Network)内のリソースからはVPCエンドポイント経由でダイレクトにアクセスすることも可能です。

 最初に、S3の使用方法を紹介しましょう。利用を始めるには、データを保存するリージョンを選択し、「S3バケット」を作成します。S3バケットは、S3というサービスでユーザーに提供される実体的なリソースのことで、バケツの意味です。前回取り上げたEBSとインスタンスストアでいうボリューム、仮想マシンEC2でいうEC2インスタンスに該当します。

 S3バケットには、グローバルで一意の名前をつける必要があります。既に存在する名前にすることはできません。一つのAWSアカウントで複数のS3バケットを配置できます。

 S3ではファイルを、識別キー、メタデータとセットにしたオブジェクトとして保存します。ユーザーがS3バケットにファイルをアップロードする際、データへのアクセス許可およびメタデータを設定できます。

 さらにこのとき、オブジェクトにURLが付与されます。オブジェクトのURLは、「リージョンコード」「amazonaws.com」「バケット名」「オブジェクト名」で構成されます。例えば東京リージョン(ap-northeast-1)に「mybucket」という名称のバケットを作成し、「photo.jpg」という画像ファイルバケットに保存した場合のURLは下記のようになります。

https://s3-ap-northeast-1.amazonaws.com/mybucket/photo.jpg

 S3の基本的な特徴を四つ挙げます(図1)。

図1 Amazon S3の特徴
図1 Amazon S3の特徴
[画像のクリックで拡大表示]

 一つめは、容量の制限なくファイルを保存できることです。個々のファイルは5TB以下に制限されますが、容量は自動拡張するのであらかじめ確保しておく必要はなく、無制限にファイルを保存できます。容量の見積もり(キャパシティープランニング)は不要です。

 料金は、主に使用サイズに応じた従量課金で、比較的安価に利用できます。これが二つめの特徴です。

 東京リージョンの場合、1GBを1カ月利用した場合で0.025ドル(税別、2017年6月時点)です。

 使用サイズ以外にも、他リージョンやインターネットへのデータ送信量(OUT)、APIへのリクエスト数(PUT、COPY、POST、LIST、GET)についても従量課金されます。例を挙げると、他リージョンへのデータ送信の料金は0.09ドル/GBです(税別、2017年6月時点)。

 S3でのデータ受信(IN)、S3から同一リージョン内のCloudFrontのエッジロケーションとEC2へのデータ送信(OUT)については料金が発生しません。

 三つめの特徴は、S3に保存したファイルが消失する心配がほとんどないことです。自動的に複製して保持するためです。具体的には、S3にファイルをアップロードすると、自動的に合計3カ所以上の物理的に離れたデータセンターに冗長化されます。データ耐久性(1年間にわたりデータが保持される確率)は99.999999999%(イレブンナイン)以上になるように設計されています。

 S3では、冗長化と性能のバランスを取るため、「結果整合性モデル」を採用しています。データセンター間で同期を取ってオブジェクトを複製するわけではなく、1カ所でオブジェクトが更新・削除されてから他のデータセンターに反映されるまでにタイムラグが生じます。ファイルの更新・削除の直後は、更新前・削除前のファイルが参照される可能性があることに注意が必要です。