S3

#S3
> Amazon Simple Storage Service（Amazon S3）はインターネット用のストレージです。Amazon S3 を使用すると、データの大きさにかかわらず、ウェブ上のどんな場所からでもいつでも保存、取得することができます。シンプルかつ直感的なウェブインターフェイスの AWS マネジメントコンソール を用いて、これらのタスクを実行することができます。

> Amazon S3 を最大限に活用するには、いくつかの簡単なコンセプトを理解する必要があります。Amazon S3 は、データをオブジェクトとしてバケットに保存します。オブジェクトは、ファイルと、オプションとしてそのファイルを記述する任意のメタデータで構成されています。Amazon S3 にオブジェクトを保管するには、バケットに保管するファイルをアップロードします。ファイルをアップロードする際に、オブジェクトと任意のメタデータにアクセス許可を設定することができます。

##Amazon S3 の高度な機能
> このガイドの例では、バケットの作成、バケットへのデータのアップロードとバケットからのダウンロード、データの移動と削除といった、基本的なタスクを実行する方法を示しています。次の表では、よく使用される Amazon S3 の高度な機能をまとめています。一部、AWS マネジメントコンソール で利用できないもの、Amazon S3 API の使用が必要なものがありますのでご注意ください。

| リンク | 機能 |
|:--|:--|
| リクエスタ支払いバケット | 顧客がダウンロードしたものに支払いができるように、バケットを環境設定する方法について学びます。 |
| Amazon S3 での BitTorrent の使用 | BitTorrent (ファイル配布のためのオープンなピアツーピアプロトコル) を使用します。 |
| バージョニング | Amazon S3 のバージョニング機能について学びます。 |
| 静的ウェブサイトのホスティング | Amazon S3 で静的ウェブサイトをホストする方法を学びます。 |
| オブジェクトのライフサイクル管理 |バケットのオブジェクトのライフサイクルを管理する方法を学びます。ライフサイクルの管理には、オブジェクトの失効やアーカイブ (オブジェクトの S3 S3 Glacier ストレージクラスへの移行) が含まれます。

###リクエスタ支払いバケット
> 一般に、Amazon S3 のバケットのストレージおよびデータ転送にかかるコストはすべて、そのバケット所有者が負担します。ただしバケット所有者は、バケットをリクエスタ支払いバケットとして設定することができます。リクエスタ支払いバケットの場合、リクエストおよびバケットからのデータのダウンロードにかかるコストは、所有者でなくリクエストを実行したリクエスタが支払います。データの保管にかかるコストは常にバケット所有者が支払います。

通常は、データを共有したいが、他者がデータにアクセスする際に発生する費用を負担したくない場合に、リクエスタ支払いバケットを設定します。たとえば、郵便番号リスト、参照データ、地理空間情報、ウェブクロールデータといった、大規模なデータセットを利用できるようにする際にリクエスタ支払いバケットを設定します。

> リクエスタ支払いバケットに関するリクエストはすべて認証する必要があります。リクエストの認証により、Amazon S3 はリクエスタを特定し、リクエスタ支払いバケットの使用に対して課金できるようになります。

リクエスタがリクエストを送る前に AWS Identity and Access Management (IAM) ロールを引き受ける際に、ロールが属するアカウントにリクエストの料金が発生します。IAM ロールの詳細については、IAM ユーザーガイドの「IAM ロール」を参照してください。

バケットをリクエスタ支払いバケットとして設定すると、リクエスタは、リクエストに x-amz-request-payer を (POST、GET、HEAD リクエストの場合はヘッダーに、REST リクエストの場合はパラメータとして) 含めることで、リクエストとデータのダウンロードに課金されることを了解している旨を示す必要があります。

###Amazon S3 Transfer Acceleration
> Amazon S3 Transfer Acceleration を使用すると、クライアントと S3 バケットの間で、長距離にわたるファイル転送を高速、簡単、安全に行えるようになります。Transfer Acceleration では、Amazon CloudFront の世界中に分散したエッジロケーションを利用しています。エッジロケーションに到着したデータは、最適化されたネットワークパスで Amazon S3 にルーティングされます。

####Amazon S3 Transfer Acceleration を使用する理由
> 次のような場合は、バケットに対する Transfer Acceleration の使用が推奨されます。

* 中央のバケットに対して世界中のお客様からアップロードが行われる。

* 大陸間で定期的にギガバイトからテラバイト単位のデータを転送する。

* Amazon S3 へのアップロード時にインターネット経由で利用可能な帯域幅を十分に活用できていない。

####S3 バケットの請求および使用状況レポート
* 請求レポート
* 使用状況レポート

####Amazon S3 アクセスポイントを使用したデータアクセスの管理
> Amazon S3 アクセスポイントは、S3 の共有データセットへの大規模なデータアクセスの管理を簡素化します。アクセスポイントは、バケットにアタッチされた名前付きのネットワークエンドポイントで、S3 オブジェクトのオペレーション (GetObject や PutObject など) を実行するために使用できます。各アクセスポイントには、そのアクセスポイントを介したすべてのリクエストに S3 が適用する個別のアクセス許可とネットワークコントロールがあります。各アクセスポイントは、基になるバケットにアタッチされたバケットポリシーと連動して機能するカスタマイズされたアクセスポイントポリシーを適用します。Virtual Private Cloud (VPC) からのリクエストのみを受け付けるようにアクセスポイントを設定することで、プライベートネットワークへの Amazon S3 データアクセスを制限できます。また、アクセスポイントごとにカスタムのブロックパブリックアクセスを設定することもできます。

CORS(Cross-Origin Resource Sharing)によるクロスドメイン通信の傾向と対策
https://dev.classmethod.jp/articles/cors-cross-origin-resource-sharing-cross-domain/

##S3 バッチオペレーション の実行
> S3 バッチオペレーション を使用して Amazon S3 オブジェクトで大規模なバッチオペレーションを実行できます。S3 バッチオペレーション は、指定する Amazon S3 オブジェクトのリスト上で単一のオペレーションを実行できます。単一のジョブは、エクサバイトのデータがある何十億というオブジェクトで指定したオペレーションを実行できます。Amazon S3 は、進捗状況の追跡、通知の送信、全アクションの詳細な完了レポートの保存を行い、完全マネージド型で監査可能なサーバーレスのサービスを提供します。AWS マネジメントコンソール、AWS CLI、AWS SDK、または REST API から、S3 バッチオペレーション を使用できるようになりました。

##レプリケーション
> レプリケーションでは、異なる Amazon S3 バケット間でオブジェクトを自動的に非同期コピーできます。オブジェクトのレプリケーション用に設定されたバケットは、同じ AWS アカウントが所有することも、異なるアカウントが所有することもできます。オブジェクトを異なる AWS リージョン間でコピーすることも、同じリージョン内でコピーすることもできます。

オブジェクトのレプリケーションを有効にするには、レプリケーション設定をレプリケート元バケットに追加します。最小設定では、以下を指定する必要があります。

* Amazon S3 がオブジェクトをレプリケートするレプリケート先バケット。
* Amazon S3 がユーザーのためにオブジェクトをレプリケートできる AWS Identity and Access Management (IAM) ロール

###オブジェクトレプリケーションの種類
* 異なる AWS リージョン内の Amazon S3 バケット間でオブジェクトをコピーするには、クロスリージョンレプリケーション (CRR) を使用します。

* 同一の AWS リージョン内の Amazon S3 バケット間でオブジェクトをコピーするには、同一リージョンレプリケーション (SRR) を使用します。

###レプリケーションを使用する理由
* メタデータを保持しながらオブジェクトをレプリケートする
* オブジェクトを異なるストレージクラスにレプリケートする
* オブジェクトのコピーを別の所有権で保持する
* オブジェクトを 15 分以内にレプリケートする

###SRR を使用する場合
* ログを 1 つのバケットに集約する
    * 複数のバケットまたは複数のアカウントにログを保存している場合、ログを 1 つのリージョン内バケットに簡単にレプリケートできます。これにより、ログを一箇所でよりシンプルに処理できます。
* 本番稼働用アカウントとテストアカウント間のライブレプリケーションを設定する


###レプリケーションの要件
* レプリケート元とレプリケート先の両方のバケットで、バージョニングを有効にする必要があります。
* Amazon S3 には、ユーザーに代わってレプリケート元バケットのオブジェクトをレプリケート先バケットにレプリケートするアクセス許可が必要です。
* ソースバケットで S3 オブジェクトロック が有効になっている場合、レプリケート先バケットでも S3 オブジェクトロック が有効になっている必要があります。