Amazon S3 とは - Amazon Simple Storage Service

Amazon S3 とは

Amazon Simple Storage Service(Amazon S3)は、インターネット用のストレージです。ウェブスケールのコンピューティングを簡単に利用できるように設計されています。

Amazon S3 のウェブサービスインターフェイスはシンプルで、いつでも、ウェブのどこからでも容量に関係なくデータを格納および取得できます。これにより、すべての開発者が、スケーラブルで信頼性が高く、かつ高速で安価なデータストレージインフラストラクチャを利用できるようになります。このインフラストラクチャは、Amazon が使用しているウェブサイトのグローバルネットワークと同じものです。このサービスの目的は、規模の拡大や縮小のメリットを最大限に活かし、開発者に提供することです。

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

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

どうすればよいか...?

情報 関連するセクション

製品の全般的な概要と料金体系

Amazon S3

バケットの操作方法?

バケットの概要

アクセスポイントの操作方法 Amazon S3 アクセスポイントを使用したデータアクセスの管理

オブジェクトの操作方法

Amazon S3 オブジェクトの概要

リクエストの実行方法

リクエストの実行

リソースへのアクセスの管理方法

Amazon S3 での Identity and Access Management

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 を効果的に使用するために理解しておく必要のある重要な概念と用語について、目にする頻度が高いものから説明します。

Buckets

バケットとは、Amazon S3 に格納されるオブジェクトのコンテナです。すべてのオブジェクトはバケット内に格納されます。たとえば、photos/puppy.jpg という名前のオブジェクトが米国西部 (オレゴン) リージョンにある awsexamplebucket1 バケットに保存される場合、URL https://awsexamplebucket1.s3.us-west-2.amazonaws.com/photos/puppy.jpg を使用してアドレスを解決できます。

バケットにはいくつかの用途があります。

  • 最も高いレベルで Amazon S3 名前空間を整理します。

  • ストレージおよびデータ転送料金を担当するアカウントを特定します。

  • アクセスコントロールの役割を果たします。

  • 使用状況レポートの集計単位として機能します。

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

バケットの詳細については、「バケットの概要」を参照してください。

Objects

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

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

Keys

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

オブジェクトキーの詳細については、「オブジェクトキー名の作成」を参照してください。

Regions

Amazon S3 で作成したバケットを保存する地理的な AWS リージョン を選択できます。レイテンシーを最適化し、コストを最小限に抑えて規制用件に対応できるリージョンを選ぶとよいでしょう。明示的に別のリージョンに移動する場合を除き、特定のリージョンに保存されたオブジェクトは、そのリージョンから移動されることはありません。たとえば、欧州 (アイルランド) リージョンに格納されたオブジェクトは、ずっとそのリージョンに置かれたままです。

注記

自分のアカウントで有効になっている AWS リージョン では、Amazon S3 とその機能にのみアクセスできます。

Amazon S3 のリージョンとエンドポイントのリストについては、AWS 全般のリファレンスリージョンとエンドポイントを参照してください。

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

Amazon S3 には、すべての AWS リージョン にある Amazon S3 バケットの、オブジェクトの PUT と DELETE に関する、書き込み後読み取りの強力な整合性があります。新しいオブジェクトへの書き込みと、既存のオブジェクトを上書きする PUT、そして DELETE にも適用されます。さらに、Amazon S3 Select、Amazon S3 アクセスコントロールリスト、Amazon S3 オブジェクトタグ、オブジェクトメタデータ (HEAD オブジェクトなど) での読み取り操作には、強固な整合性があります。

単一のキーに対する更新はアトミックです。例えば、あるスレッドから既存のキーに PUT を実行し、同時に同じキーに対して別のスレッドから GET を実行すると、古いデータと新しいデータを取得できますが、データの一部分だけが取得されることも、破損することもありません。

Amazon S3 は、AWS のデータセンターに配置された複数のサーバー間でデータを複製することにより、高可用性を実現します。PUT リクエストが成功した場合は、データが安全に格納されています。成功した PUT 応答の受信後に開始された読み取り (GET または LIST) は、PUT によって書き込まれたデータを返します。この動作の例を示します。

  • 新しいオブジェクトを Amazon S3 に書き込み、すぐにバケット内のキーを一覧表示すると、新しいオブジェクトがリストに表示されます。

  • 既存のオブジェクトを置換し、すぐにそのオブジェクトの読み取りを試みます。Amazon S3 が新しいデータを返します。

  • 既存のオブジェクトを削除し、すぐにそのオブジェクトの読み取りを試みます。オブジェクトが削除されたため、Amazon S3 はデータを返しません。

  • 既存のオブジェクトを削除し、すぐにバケット内のキーのリストを表示します。オブジェクトはリストに表示されません。

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

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

バケット設定には、結果整合性モデルがあります。具体的には次のとおりです。

  • バケットを削除してすぐにすべてのバケットを一覧表示しても、削除されたバケットは引き続きリストに表示されます。

  • バケットで初めてバージョニングを有効にしたときは、変更が完全に反映されるまでに、少し時間がかかることがあります。バケットへのオブジェクトの書き込みオペレーション (PUT または DELETE) は、バージョニングを有効にして 15 分待ってから発行することをお勧めします。

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

このセクションでは、同じアイテムに複数のクライアントから書き込むときに、Amazon S3 で予想される動作の例を示します。

次の例では、R1 (読み取り 1) と R2 (読み取り 2) の開始前に W1 (書き込み 1) と W2 (書き込み 2) が完了しています。S3 には強固な整合性があるため、R1 と R2 はどちらも color = ruby を返します。

次の例では、R1 の開始前に、W2 は完了していません。したがって、R1 は color = ruby または color = garnet を返す可能性があります。ただし、R2 が開始する前に W1 と W2 が終了するため、R2 は color = garnet を返します。

最後の例では、W1 が受信確認を受け取る前に、W2 が開始します。したがって、これらは同時の書き込みとみなされます。どの書き込みを優先するのかを決定するにあたり、Amazon S3 は内部的に last-writer-wins セマンティクスを使用します。しかしネットワークレイテンシーなどの要因により、Amazon S3 がリクエストを受信する順序や、アプリケーションが受信確認を受け取る順序を予測することはできません。たとえば、W2 が同じリージョンにある Amazon EC2 インスタンスによって開始される一方で、W1 は遠くにあるホストによって開始されるかもしれません。両方の書き込みの受信確認を受け取った後に、読み込みを実行することが、最終的な値を決定する最善の方法です。

Amazon S3 の特徴

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

ストレージクラス

Amazon S3 では、さまざまなユースケース向けに、幅広いストレージクラスが提供されています。たとえば、アクセスが頻繁なデータの汎用ストレージ用の Amazon S3 STANDARD、存続時間が長くアクセス頻度の少ないデータ用の Amazon S3 STANDARD_IA、長期アーカイブ用の S3 Glacier などがあります。

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

バケットポリシー

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

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

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

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

  • 営業時間内

あるアカウントで制限付きの読み込みアクセスと書き込みアクセスを 1 人のユーザーに与え、他のユーザーにはバケットの作成および削除を許可することもできます。あるアカウントで、複数の営業拠点に、日報を単一のバケットに保存する許可を与えることができます。各拠点が特定の名前のセット (「Nevada/*」や「Utah/*」など) のみに、その拠点の IP アドレス範囲からのみ、書き込むことを許可できます。

アクセス許可を個別のオブジェクトに追加 (付与) できるアクセスコントロールリスト (後述) とは異なり、ポリシーはバケット内のすべて (または一部) のオブジェクトに対してアクセス許可を追加または拒否できます。1 つのリクエストで、バケット内の複数のオブジェクトのアクセス許可を設定できます。アカウントはワイルドカード (正規表現演算子に似たもの) を Amazon リソースネーム (ARN) やその他の値に使用できます。これを使用すると、一般的なプレフィックスで始まるオブジェクトや .html など指定の拡張子で終わるオブジェクトのグループに対するアクセスをコントロールできます。

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

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

  • リクエスタ

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

GetObjectGetObjectVersionDeleteObjectDeleteBucket など、特定の Amazon S3 オペレーションに基づいてアクセスを管理できます。

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

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

AWS Identity and Access Management

AWS Identity and Access Management (IAM) を使用して、Amazon S3 のリソースへのアクセスを管理できます。

例えば、Amazon S3 で IAM を使用して、 AWS アカウント 所有の Amazon S3 バケットの特定の部分に対するユーザーまたはユーザーグループのアクセス権のタイプを制御することができます。

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

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

アクセスコントロールリスト (ACL) を使用して、各バケットおよびオブジェクトへのアクセスをコントロールできます。詳細については、「アクセスコントロールリスト (ACL) の概要」を参照してください。

Versioning

バージョニングを使用して、同じバケット内でオブジェクトの複数のバージョンを保持できます。詳細については、「S3 バケットでのバージョニングの使用」を参照してください。

Operations

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

一般的なオペレーション

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

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

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

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

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

これらのオペレーションおよびその他すべての機能については、このガイドで詳しく説明します。

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

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

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 をダウンロードし (「https://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl」を参照)、Apache Axis や Microsoft .NET などの SOAP ツールキットを使用してバインドを作成した後、そのバインドを使用して Amazon S3 を呼び出すコードを記述する方法です。

Amazon S3 の支払い

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

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

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

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

関連サービス

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

  • Amazon Elastic Compute Cloud(Amazon EC2) – このサービスは、クラウド上の仮想コンピューティングリソースを提供します。詳細については、「Amazon EC2 製品詳細ページ」を参照してください。

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

  • AWS Snowball – このサービスは、物理ストレージデバイスを使用し、インターネットを迂回して AWS との大容量データ転送を高速化するサービスです。AWS Snowball デバイスの各タイプで、インターネット速度より速くデータを転送できます。この転送は、デバイス内のデータをリージョンのキャリアが配送することで行われます。詳細については、AWS Snowball 製品の詳細ページを参照してください。