AWSにおいて、ストレージの中心的な役割を果たしているサービスはS3というサービスです。
S3とは「Simple Storage Service」の略です。
(頭文字Sが3つ揃ってます。これ系が多いですね)
ということで、今回はS3についてやっていきます。
S3の概要
まず、S3ってどんな事ができるか並べていきたいと思います。
S3の特徴
- 特定のリージョンにバケットと呼ばれる格納先を作成
- 1オブジェクトあたり最大5GB
※マルチパートアップロード機能という、大容量のデータを分割して並列アップロードを実行した際は最大5TB。 - バケットに格納できるオブジェクト数・データ総量は無制限
- バケット名はAWSの全アカウントで一意
- 高い耐久性(99.999999999%)
- 安価なストレージ(容量単価:月額1GB/約2.5円)
S3のデータ・オブジェクト構成
S3はバケット単位でオブジェクトを格納していきます。S3はオブジェクトストレージで管理されます。
オブジェクトストレージは、従来のファイルシステムにおける階層構造によるデータ(ファイル)の管理とは異なり、データ(オブジェクト)にキー(ユニークなID)を付与してフラットに格納してます。データをKey-Value形式でフラットに格納することで、大量かつ大容量のデータ保存に適しています。
ストレージサービスのタイプ別
用途に応じてストレージタイプを選択します。
各タイプごとにまとめます。
タイプ | 特徴 | 性能 |
---|---|---|
STANDARD (標準) | ✅ リージョン内の3箇所のデータセンタに複製され、同時に2箇所でデータロストが発生しても復元できる仕組みになっているため、耐久性が非常に高い 失うことが許されないオリジナルデータなどに使用 | 🟥 耐久性 99.999999999% 🟥 可用性 99.99% |
STANDARD-IA | ✅ スタンダードに比べて安価 ✅ データの読み出し容量に応じた課金 | 🟥 耐久性 99.999999999% 🟥 可用性 99.9% |
One Zone-IA | ✅ アクセス頻度は低いが、必要に応じてすぐに取り出すデータ向け | 🟥 耐久性 99.999999999% 🟥 可用性 99.95% |
RRS | ✅ Reduced Redundacy Storage 低冗長化ストレージ ✅ Glacierから取り出したデータ配置等 オリジナルデータから加工されたデータなど、再作成可能なデータを格納する場合には、そこまでの耐久性は必要ない場合などに使用。 | 🟥 耐久性 99.99% 🟥 可用性 99.99% |
Amazon Glacier | ✅ 最安のアーカイブ用ストレージ ✅ データ抽出にコストと時間を要する(3〜5時間) ✅ ライフサイクルマネジメントで指定 ✅ ボールロック機能でデータを保持 | 🟥 耐久性 99.999999999% 🟥 可用性 N/A |
S3の値段
S3は、保存データ容量、データ取得リクエストおよびデータ転送アウトに応じて課金されます。
データ転送インは無料です。
容量あたりの料金 | ✅ 最初の 50 TB/月 0.025USD/GB ✅ 次の 450 TB/月 0.024USD/GB ✅ 500 TB/月以上 0.023USD/GB | 1ヶ月1GB保管すると2.5円 (1ドル100円換算の場合) |
データ取り出しリクエスト料金 | ✅ PUT、COPY、POST、LIST リクエスト (1,000 リクエストあたり):0.0047USD ✅ GET、SELECT、他のすべてのリクエスト (1,000 リクエストあたり):0.00037USD | 分かりにくい項目ですが、 要は、データ取り出し・閲覧の回数(オブジェクト数 x 取り出し数)になります。 キャッシュとかあれば、リクエストカウントされない場合があります。 CloudFrontと併用するといいようです。 詳細は別途。 |
データ転送料金 | ✅ データ転送 (イン)は無料 ✅ インターネットへのデータ転送(アウト)は以下の通り ✅ 1 GB まで/月 0.00USD/GB ✅ 次の 9.999 TB/月 0.114USD/GB ✅ 次の 40 TB/月 0.089USD/GB ✅ 次の 100 TB/月 0.086USD/GB ✅ 150 TB /月より大きい 0.084USD/GB | データ転送する容量になります。 |
AWSの課金シミュレーションサイトで実際の数値を入れてみた方がわかりやすいと思います。
https://calculator.s3.amazonaws.com/index.html?lng=ja_JPS3の整合性
S3は、格納したデータを複数のデータセンタに複製することで非常に高いデータ耐久性を実現しています。しかし、そのためデータの整合性について注意が必要です。その点について解説します。
新しいオブジェクトの書き込み(PUT)
書き込み後の読み取り整合性
新しいオブジェクトをS3バケットに書き込みしても、すぐにはオブジェクト一覧に反映されないことがあります。
S3から「完了」が返されると、オブジェクト一覧に反映されるようになります。
既存オブジェクトの上書き(PUT)
結果整合性
既存のオブジェクトを上書きし、「完了」が返された後でも、そのデータにアクセスした際に古いデータが返されることがあります。
時間が経てば結果的に正しいデータが返されます。
オブジェクトの削除(DELETE)
結果整合性
オブジェクトを削除し、「完了」が返された後でも、削除したはずのデータがオブジェクトの一覧に表示されたり、データにアクセスできたりすことがあります。
時間が経てば結果的にバケットの一覧から削除され、アクセスできなくなります。
S3の整合性まとめ
以上のことから、S3はオンラインで頻繁に更新されるデータの格納先には向いていないと思います。
格納されているデータを何度も読み取る用途に向いていると言えます。
これら整合性を考慮したS3の利用用途を押さえならが使用してください。
S3のアクセス制限とセキュリティ
S3バケットやオブジェクトはデフォルトではそのリソースを作成したアカウントだけにアクセス権限が与えられています。
S3バケットとオブジェクトには適切なアクセス権限をかける必要があり、アクセス管理には以下の4つがあります。
- アクセスコントロールリスト(ACL)
- バケットポリシー
- IAM(ユーザ)ポリシー
- 署名(期限)付きURL
アクセスコントロールリスト(ACL)
説明 | |
---|---|
できること | 1.バケットとオブジェクトそれぞれについて、読み取り/書き込みの許可を、他のAWSアカウントに与えることができます。 2.オブジェクトに付与されているURLについても、HTTPSアクセスの許可を与えることができます。 |
できないこと | 1.条件付きアクセス許可を与えることや、アクセス許可を設定することはできません。 2.自アカウント内のIAMユーザやグループのアクセス権を制限することもできません。 |
- バケットと個々のオブジェクトへのアクセス権限をXMLで設定する
- 他アカウントへの許可も可能
- 簡易的にアクセス管理向け
バケットポリシー
バケットごとに、自アカウント内のIAMユーザやグループ、他のアカウントのユーザに対してアクセス(様々な操作)許可を与えることができます。
また、条件付きのアクセス許可を与えることや、アクセス拒否を設定することもできます。
- バケットへのアクセス権をJSONで設定
- 他アカウントへの許可も可能
- バケット単位の高度なアクセス管理向け
IAM(ユーザ)ポリシー
S3へのアクセス許可を設定したIAMポリシーを自アカウント内のIAMユーザやグループ、ロールに割り当てます。
バケットポリシーと同様に条件付きのアクセス許可を与えることや、アクセス拒否の設定をすることもできますが、他アカウントを指定したアクセス権の設定はできません。
- IAMユーザに対してS3サービスへのアクセス権を設定することができる
- 一元的にユーザ権限を管理
署名(期限)付きURL
アクセス許可設定をしていない特定のオブジェクトを指定した期間に限定してHTTPSアクセスで公開する方法
- AWS SDKで生成した署名付きURLで3Sのオブジェクトへの一定時間アクセス許可
オブジェクトの暗号化とアクセスログ
S3バケットに格納されているオブジェクトを任意で暗号化して、データを保護することができます。
S3へのデータ保管時に暗号化形式として以下の4つの形式から選択します。
- SSE-S3
- SSE-KMS
- SSE-C
- クライアントサイド暗号化(CSE)
S3バケットへのアクセスログを任意で同じまたは異なるS3バケットに取得することができます。
アクセスログの取得はベストエフォート(*1)で記録されるために、完全性は保証されません。また、アクセスログ格納バケットへのログの格納は、実際のアクセスから時間をおいて行われます。
S3の暗号化やアクセスログの取得はデフォルトではなく、ユーザの責任の元に実施します。
※1 ベストエフォートとは
S3のバージョニング機能
S3にはバージョニング機能があり、S3バケット単位で有効にすることができます。
ユーザによる誤操作でデータ削除などが発生しても特定バージョンから復元できます。
バージョン機能を有効にしたバケットに格納されるオブジェクトには、キーの他にバージョンIDが付与されます。
オブジェクトを上書きアップロードする際に、上書き前のオブジェクトと異なるバージョンIDの付与されたオブジェクトが別に格納されます。
オブジェクトを削除する場合も、異なるバージョンIDと削除マーカーが付与されたオブジェクトが生成され、削除前のオブジェクトが保持されます。
S3のライフサイクル機能とGlacierへのアーカイブ
ライフサイクル機能とは、バケット内のオブジェクト単位でストレージクラスの変更や削除時期などを設定することで実行を自動化する機能のことを言います。
Glacierはバックアップなど中長期保存用のS3よりも安価なストレージです。
90日間保存が必要なことや、S3と異なるデータ保存形態になります。
参照する頻度の少ないデータを長期間保管するのに適しています。
Glacierに格納したままのデータを参照することはできません。
監査などで格納したデータを参照したい場合には、Glacierからそのデータを取り出す必要がります。
Glacierからデータを取得するのに要する時間は、データの大小に関わらず、3〜5時間にもなります。また、データの取り出しはGlacierに保管しているデータ量(月平均)の5%までは無料ですが、それを超える場合は料金が発生します。
次は【Well Architected Framework】について
前回のEC2についてはこちら
コメント