メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

Amazon S3 のご紹介

この「Amazon Simple Storage Service のご紹介」では、このウェブサービスの要点について詳しく説明します。このセクションを読むことで、本サービスの内容と、ビジネスへの利用方法についてご理解いただけます。

Amazon S3 と本ガイドの概要

Amazon S3 のウェブサービスインターフェイスはシンプルで、いつでも、ウェブのどこからでも容量に関係なくデータを格納および取得できます。

本ガイドでは、リクエストを送信してバケットを作成する方法、オブジェクトを保存および取得する方法、リソースへのアクセス許可を管理する方法について説明します。さらに、アクセスコントロールと認証プロセスについても説明します。アクセスコントロールでは、Amazon S3 内のオブジェクトおよびバケットにアクセスできるユーザーとアクセスの種類(READ、WRITE など)を定義します。認証プロセスは、アマゾン ウェブ サービス(AWS)にアクセスを試みるユーザーの身元を確認します。

Amazon S3 のメリット

Amazon S3 は、シンプルさと堅牢性を重視し、必要な機能に絞って提供しています。Amazon S3 サービスには次のようなメリットがあります。

  • バケットの作成 – データを格納するバケットを作成し、名前を付けます。バケットとは、Amazon S3 におけるデータストレージ用の基本的なコンテナです。

  • バケットへのデータの格納 – 膨大な量のデータをバケットに格納します。 必要な数のオブジェクトを Amazon S3 バケットにアップロードします。各オブジェクトに最大 5 TB のデータを格納できます。各オブジェクトの格納と取得には、開発者が設定した独自のキーを使用します。

  • データのダウンロード – データをダウンロードするか、他のユーザーがダウンロードできるようにします。 データはいつでもダウンロードできます。他のユーザーにデータのダウンロードを許可することもできます。

  • アクセス許可 – Amazon S3 バケットにおけるデータのアップロードまたはダウンロードを、他のユーザーに対して許可または拒否します。アップロードおよびダウンロードのアクセス許可を 3 タイプのユーザーに付与します。認証メカニズムによって、データソースを不正アクセスから保護することができます。

  • 標準的なインターフェイス – 標準ベースの REST および SOAP インターフェイスを使用し、あらゆるインターネット開発ツールキットが使えるように設計されています。

    注記

    SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。SOAP 用に Amazon S3 の新機能をサポートする予定はありません。REST API か AWS SDK を使用することをお勧めします。

Amazon S3 の概念

このセクションでは、Amazon S3 を効果的に使用するために理解しておく必要のある重要な概念と用語について説明します。目にする頻度が高いものから説明します。

バケット

バケットとは、 Amazon S3 に格納されるオブジェクトのコンテナです。すべてのオブジェクトはバケット内に格納されます。例えば、photos/puppy.jpg という名前のオブジェクトが johnsmith バケットに格納される場合、URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg を使ってアドレスを解決できます。

バケットの用途には、Amazon S3 の最上位の名前空間を形成する、ストレージとデータ転送の課金アカウントを特定する、アクセスコントロールに使用する、使用状況レポートの集計単位として使用するなど、さまざまなものがあります。

特定のリージョンに作成されるようにバケットを設定できます。詳細については、「Buckets and Regions」を参照してください。また、オブジェクトが追加されるたびに Amazon S3 で一意なバージョン ID を生成してオブジェクトに割り当てるようにすることもできます。詳細については、Versioning を参照してください。

バケットの詳細については、「Amazon S3 バケットの使用 」を参照してください。

オブジェクト

オブジェクトは、Amazon S3 に格納される基本エンティティです。オブジェクトは、オブジェクトデータとメタデータで構成されます。データ部分を Amazon S3 から見ることはできません。メタデータは、オブジェクトを表現する名前と値のペアのセットです。これには最終更新日などのデフォルトメタデータや、Content-Type などの標準 HTTP メタデータが含まれます。開発者が、オブジェクトの格納時にカスタムメタデータを指定することもできます。

オブジェクトは、キー(名前)とバージョン ID によってバケット内で一意に識別されます。詳細については、KeysVersioning を参照してください。

キー

キーとは、バケット内のオブジェクトの固有の識別子です。バケット内のすべてのオブジェクトは、厳密に 1 個のキーを持ちます。バケット、キー、バージョン ID の組み合わせによって各オブジェクトが一意に識別されるため、 Amazon S3 は「バケット + キー + バージョン」とオブジェクト自体の基本的なデータマップであると考えることができます。Amazon S3 内の各オブジェクトは、ウェブサービスエンドポイント、バケット名、キー、およびオプションでバージョンを組み合わせることで一意にアクセスすることができます。例えば、http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl という URL では、「doc」がバケットの名前で、「2006-03-01/AmazonS3.wsdl」がキーです。

リージョン

作成したバケットを Amazon S3 でどこに格納するか、地理的なリージョンを選択できます。レイテンシーを最適化し、コストを最小限に抑えて規制用件に対応できるリージョンを選ぶとよいでしょう。Amazon S3 は、現在次のリージョンをサポートしています。

  • 米国東部 (バージニア北部) リージョン は、バージニア州北部にある Amazon S3 サーバーを使用します。

  • 米国東部 (オハイオ) リージョン は、オハイオ州コロンバスにある Amazon S3 サーバーを使用します。

  • 米国西部 (北カリフォルニア) リージョン は、北カリフォルニアにある Amazon S3 サーバーを使用します。

  • 米国西部 (オレゴン) リージョン は、オレゴン州にある Amazon S3 サーバーを使用します。

  • カナダ (中部) リージョン は、カナダにある Amazon S3 サーバーを使用します。

  • アジアパシフィック (ムンバイ) リージョン は、ムンバイにある Amazon S3 サーバーを使用します。

  • アジアパシフィック (ソウル) リージョン は、ソウルにある Amazon S3 サーバーを使用します。

  • アジアパシフィック (シンガポール) リージョン は、シンガポールにある Amazon S3 サーバーを使用します。

  • アジアパシフィック (シドニー) リージョン は、シドニーにある Amazon S3 サーバーを使用します。

  • アジアパシフィック (東京) リージョン は、東京にある Amazon S3 サーバーを使用します。

  • 欧州 (フランクフルト) リージョン: フランクフルトにある Amazon S3 サーバーを使用しています

  • 欧州 (アイルランド) リージョン は、アイルランドにある Amazon S3 サーバーを使用します。

  • 欧州 (ロンドン) リージョン は、ロンドンにある Amazon S3 サーバーを使用します。

  • 南米 (サンパウロ) リージョン は、サンパウロにある Amazon S3 サーバーを使用します。

明示的に別のリージョンに移動する場合を除き、特定のリージョンに保存されたオブジェクトは、そのリージョンから移動されることはありません。たとえば、欧州 (アイルランド) リージョンに保存されたオブジェクトは、ずっとそのリージョンに置かれたままです。 Amazon S3 のリージョンとエンドポイントの詳細については、『AWS 全般のリファレンス』の「リージョンとエンドポイント」を参照してください。

Amazon S3 のデータ整合性モデル

Amazon S3 では、すべてのリージョンで S3 バケットの新しいオブジェクトの PUTS については "書き込み後の読み込み" 整合性を提供しますが、注意点があります。注意点は、オブジェクトを作成する前に (オブジェクトが存在するかどうかを調べるために) キー名への HEAD または GET リクエストを実行する場合、Amazon S3 は、読み込み後の書き込みに対して結果整合性を提供する、という事です。

Amazon S3 は、すべてのリージョンで PUT および DELETE の上書きについて結果整合性を提供しています。

単一のキーに対する更新はアトミックです。例えば、既存のキーに PUT を実行すると、後続の読み込みで古いデータが返されたり更新されたデータが返されたりする可能性がありますが、壊れたデータや部分的なデータが書き込まれることはありません。

Amazon S3 は、Amazon のデータセンターに配置された複数のサーバー間でデータを複製することにより、高い可用性を実現します。PUT リクエストが成功した場合は、データが安全に格納されています。ただし、変更に関する情報は Amazon S3 内でレプリケーションされる必要があり、これにはしばらくかかります。レプリケーションでは、次の動作を確認することができます。

  • 新しいオブジェクトを Amazon S3 に書き込み、すぐにバケット内のキーを一覧表示すると、変更が完全に反映されるまで、オブジェクトがリストに表示されないことがあります。

  • 既存のオブジェクトを置換し、すぐにそのオブジェクトの読み取りを試みます。変更が完全に反映されるまで、古いデータが返されることがあります。

  • 既存のオブジェクトを削除し、すぐにそのオブジェクトの読み取りを試みます。削除が完全に反映されるまで、削除済みのデータが返されることがあります。

  • 既存のオブジェクトを削除し、すぐにバケット内のキーのリストを表示します。削除が完全に反映されるまで、削除済みのオブジェクトが一覧に表示されることがあります。

注記

現在のところ、Amazon S3 はオブジェクトのロックをサポートしていません。同じキーに対して 2 つの PUT リクエストが同時に行われた場合、最新のタイムスタンプを持つリクエストが優先されます。これが問題になる場合は、アプリケーション内にオブジェクトロックメカニズムを構築する必要があります。

更新はキーベースであり、複数キーにまたがるアトミックな更新を行う方法はありません。例えば、ご自分で機能をアプリケーション設計に組み込まない限り、別のキーの更新に依存してキーを更新することはできません。

結果的に整合性のある読み込みと整合性のある読み込みの特徴について、以下の表で説明します。

結果的に整合性のある読み込み 整合性のある読み込み
古いデータを読み込むことがある 古いデータを読み込まない
読み込みの待ち時間は最小 読み込みの待ち時間が大きくなることがある
読み込みスループットは最大 読み込みスループットが小さくなることがある

アプリケーションの同時実行

このセクションでは、複数のクライアントが同じアイテムに書き込む場合の、結果的に整合性のある読み込みと、整合性のある読み込みリクエストの例を示します。

次の例では、R1 (読み取り 1) と R2 (読み取り 2) の開始前に W1 (書き込み 1) と W2 (書き込み 2) が完了しています。整合性のある読み込みの場合、R1 と R2 の両方が color = ruby を返します。結果的に整合性のある読み込みの場合、経過時間により、R1 と R2 は color = red または color = ruby を返すか、結果を返さないこともあります。

次の例では、R1 の開始前に、W2 は完了していません。このため、整合性のある読み込みと結果的に整合性のある読み込みのどちらの場合にも、R1 は color = ruby または color = garnet を返す可能性があります。また、経過時間によっては、結果的に整合性のある読み込みが結果を返さないこともあります。

整合性のある読み込みの場合、R2 は color = garnet を返します。結果的に整合性のある読み込みの場合、経過時間により、R2 は color = ruby または color = garnet を返すか、結果を返さないこともあります。

最後の例では、クライアント 2 は Amazon S3 が W1 の成功を返す前に W2 を実行するため、最終的な値の結果は不明です(color = garnet または color = brick)。それ以降の読み込み(整合性のある読み込みまたは結果的に整合性のある読み込み)ではどちらかの値を返す可能性があります。また、経過時間によっては、結果的に整合性のある読み込みが結果を返さないこともあります。

特徴

このセクションでは、Amazon S3 の重要な特徴について説明します。

低冗長化ストレージ

データの格納に Amazon S3 の低冗長化ストレージ(RRS)オプションを使用できます。RRS は、それほど重要でない再生可能なデータを、Amazon S3 の標準ストレージの冗長性よりも低レベルの冗長性で保存することで、お客様がコストを削減できるようにします。どこか他の場所で堅牢に格納されているコンテンツを配信または共有するため、またはサムネイル、コード変換されたメディアもしくは簡単に再生可能なその他の加工データを格納するために、費用対効果および可用性の高いソリューションを提供します。RRS オプションは、複数の施設の複数のデバイス上にオブジェクトを保存し、通常のディスクドライブの 400 倍の堅牢性を提供しますが、標準的な Amazon S3 ストレージほど何度もオブジェクトをレプリケーションするわけではないため、費用対効果が高くなっています。

RRS は、年間 99.99% のオブジェクト耐久性を提供します。この耐久性レベルは、年間平均予測オブジェクト喪失率 0.01% に該当します。

RRS の利用料金は標準的な Amazon S3 ストレージよりも割安です。料金の詳細については、Amazon S3 料金表を参照してください。

詳細については、「ストレージクラス」を参照してください。

バケットポリシー

バケットポリシーを使用すると、Amazon S3 オペレーション、リクエスタ、リソース、リクエストの情報(例: IP アドレス)を含めたさまざまな条件に基づいて、バケットとオブジェクトへのアクセスを一元的に制御できます。ポリシーはアクセスポリシー言語で表現され、アクセス許可を一元的に管理できます。バケットにアタッチされたアクセス許可は、そのバケット内のすべてのオブジェクトに適用されます。

会社のみならず個人もバケットポリシーを使用できます。会社は Amazon S3 に登録するときに、アカウントを作成します。それ以降、会社とアカウントは同義になります。アカウントは、会社(およびその従業員)が作成した Amazon のリソースに対して経済面での責任を負います。アカウントは、バケットポリシーにアクセス許可を与えたり、さまざまな条件に基づいて従業員にアクセス許可を割り当てることができます。例えば、ユーザーに書き込みアクセスを与えるポリシーを次のように作成できます。

  • 特定の S3 バケットに対して

  • アカウントの社内ネットワークから

  • 営業時間内

  • アカウントのカスタムアプリケーションから(ユーザーエージェント文字列によって識別)

あるアプリケーションに制限付きの読み込みアクセスと書き込みアクセスを与え、他のアプリケーションにはバケットの作成および削除を許可することもできます。1 つのバケットに複数の営業所がそれぞれの日次レポートを格納することもできます。この場合、各営業所はその営業所の IP アドレス範囲からのみ特定の名前セット (例: 「Nevada/*」、「Utah/*」) にのみ書き込むことができるようにします。

アクセス許可を個別のオブジェクトに追加(付与)できるアクセスコントロールリスト(以下で説明)とは異なり、ポリシーはバケット内のすべて(または一部)のオブジェクトに対してアクセス許可を追加または拒否できます。1 つのリクエストで、バケット内の複数のオブジェクトのアクセス許可を設定できます。Amazon リソース名(ARN)やその他の値に対してワイルドカード(正規表現演算子のようなもの)を使用できるので、よく使用するプレフィックスで始まるオブジェクト群や、html のような拡張子で終了するオブジェクト群へのアクセスを管理できます。

バケット所有者のみが、ポリシーをバケットに関連付けることができます。ポリシーはアクセスポリシー言語で記述され、次の項目に基づいてリクエストを許可または拒否します。

  • Amazon S3 バケットオペレーション(例: PUT ?acl))、およびオブジェクトオペレーション(PUT ObjectGET Object など)

  • リクエスタ

  • ポリシーに指定された条件

アカウントでは、GetObjectGetObjectVersionDeleteObjectDeleteBucket など、特定の Amazon S3 オペレーションに基づいてアクセスをコントロールできます。

条件には、IP アドレス、CIDR 表記での IP アドレス範囲、日付、ユーザーエージェント、HTTP Referrer、トランスポート(HTTP および HTTPS)などがあります。

詳細については、「バケットポリシーとユーザーポリシーの使用」を参照してください。

AWS Identity and Access Management

例えば、IAM を Amazon S3 とともに使用すると、自分の AWS アカウントが所有する Amazon S3 バケットの特定の部分に対して個々のユーザーまたはユーザーグループに付与するアクセス権のタイプをコントロールできるようになります。

IAM の詳細については、以下を参照してください。

アクセスコントロールリスト

詳細については、「ACL によるアクセス管理 」を参照してください。

バージョニング

詳細については、「オブジェクトのバージョニング」を参照してください。

運用

以下は API を使用して実行する一般的なオペレーションです。

一般的なオペレーション

  • バケットの作成 – オブジェクトを格納する独自のバケットを作成し、名前を指定します。

  • オブジェクトへの書き込み – オブジェクトを作成または上書きしてデータを格納します。オブジェクトに書き込むときは、バケットの名前空間内で一意のキーを指定します。このとき、オブジェクトに対するアクセスコントロールも指定することをお勧めします。

  • オブジェクトの読み取り – データを読み戻します。HTTP または BitTorrent 経由でデータをダウンロードできます。

  • オブジェクトの削除 – データの一部を削除します。

  • キーのリスト作成 – いずれかのバケットに含まれているキーのリストを作成します。プレフィックスに基づいてキーのリストをフィルタできます。

この機能およびその他すべての機能については、このガイドの後半で詳しく説明します。

Amazon S3 アプリケーションプログラミングインターフェイス(API)

Amazon S3 は、プログラミング言語に依存しないアーキテクチャーとして設計されており、サポートされているインターフェイスを使用してオブジェクトを格納し、取得します。

Amazon S3 には、REST および SOAP インターフェイスが用意されています。この 2 つは似ていますが、いくつかの相違点があります。例えば、REST インターフェイスでは、メタデータは HTTP ヘッダーで返されます。4 KB(本文を含まない)以下の HTTP リクエストしかサポートされないため、使用できるメタデータの量が制限されます。

注記

SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。SOAP 用に Amazon S3 の新機能をサポートする予定はありません。REST API か AWS SDK を使用することをお勧めします。

REST インターフェイス

REST API は、Amazon S3 に対する HTTP インターフェイスです。REST を使用すると、標準 HTTP リクエストを使用してバケットとオブジェクトを作成、取得、および削除できます。

REST API を使用する場合、HTTP をサポートする任意のツールキットを使用できます。匿名で読み取り可能なオブジェクトであれば、ブラウザを使用して取得することもできます。

REST API は標準の HTTP ヘッダーとステータスコードを使用するため、標準のブラウザとツールキットが予期したとおりに機能します。一部のエリアでは、HTTP に機能が追加されています(例えば、アクセスコントロールをサポートするヘッダーを追加しました)。このように新機能を追加する場合、できるだけ標準 HTTP 書式の使用法に合致するように最善を尽くしました。

SOAP インターフェイス

注記

SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。SOAP 用に Amazon S3 の新機能をサポートする予定はありません。REST API か AWS SDK を使用することをお勧めします。

SOAP API には、ドキュメントリテラルエンコードを使用した SOAP 1.1 インターフェイスが用意されています。SOAP を使用する最も一般的な方法は、WSDL をダウンロードし(http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl にアクセス)、Apache Axis や Microsoft .NET などの SOAP ツールキットを使用してバインドを作成した後、そのバインドを使用して Amazon S3 を呼び出すコードを記述する方法です。

Amazon S3 の料金

Amazon S3 の料金は、アプリケーションのストレージ要件を考慮しなくてすむように設定されています。多くのストレージプロバイダでは、あらかじめ決まった量のストレージとネットワーク転送容量を購入する必要があります。その容量を超えると、サービスが停止されるか、高額な超過料金を支払う必要があります。その容量を超えない場合でも、全量を使用したものとして支払うことになります。

Amazon S3 では、実際に使用した分だけが請求されます。隠れた料金や超過料金はありません。つまり、開発者は、Amazon のインフラストラクチャのコストメリットを享受しながら、ビジネスの成長に合わせたコスト変動サービスを利用できるということです。

Amazon S3 にデータを格納する前に、サービスに登録し、毎月末に行われる請求の支払い方法を指定する必要があります。サービスの使用を始めるためのセットアップ料金はありません。月末に、指定した支払い方法に当月の利用料金が自動的に請求されます。

Amazon S3 ストレージの支払いの詳細については、Amazon S3 料金表を参照してください。

関連サービス

Amazon S3 にロードしたデータは、用意されている他のサービスでも利用できます。よく使用すると思われるサービスは次のとおりです。

  • Amazon Elastic Compute Cloud – このウェブサービスは、クラウド内で仮想計算リソースを提供します。詳細については、Amazon EC2 の製品詳細ページを参照してください。

  • Amazon EMR – このウェブサービスでは、ビジネス、研究者、データアナリスト、および開発者が、簡単に、そして費用対効果の高い方法で、莫大な量のデータを処理できます。これはホストされた Hadoop フレームワークを利用しています。Hadoop フレームワークは、 Amazon EC2 および Amazon S3 の、ウェブスケールのインフラストラクチャ上で稼動します。詳細については、Amazon EMR 製品詳細ページを参照してください。

  • AWS Import/Export – AWS Import/Export では、RAID ドライブなどの記憶装置を Amazon に郵送すると、Amazon S3 へのデータ(テラバイト)のアップロードを代行します。詳細については、『AWS Import/Export Developer Guide』を参照してください。