Amazon S3
容量無制限のオブジェクトストレージサービスで、99.999999999% の耐久性を標準提供し、Web サイトホスティングからデータレイクまで幅広い用途に対応する
概要
Amazon Simple Storage Service (S3) は、AWS で最も広く利用されているストレージサービスです。インターネット経由でどこからでもデータを保存・取得でき、保存容量に上限はありません。1 ファイルあたり最大 5 TB まで対応し、データは自動的に 3 つ以上のアベイラビリティゾーンに複製されるため、99.999999999% (イレブンナイン) という極めて高い耐久性を実現しています。S3 Standard、S3 Standard-IA、S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive など、アクセス頻度に応じた複数のストレージクラスが用意されており、ライフサイクルポリシーで自動的にコスト最適化できます。静的 Web サイトのホスティング、データレイクの構築、バックアップ・アーカイブ、ログの蓄積など、データを保存するあらゆる場面で利用されています。
ストレージクラスとライフサイクルポリシー
S3 には 6 つのストレージクラスがあり、データのアクセス頻度に応じた使い分けがコスト最適化の鍵になります。S3 Standard は頻繁にアクセスするデータ向けで、東京リージョンでは 1 GB あたり月額約 0.025 ドルです。Standard-IA は月 1 回程度のアクセス頻度のデータに適し、保存料金が約 40% 安い代わりに取り出し時のリクエスト料金が発生します。S3 Intelligent-Tiering はアクセスパターンを自動分析して最適なクラスに移行する仕組みで、アクセス頻度が予測困難なデータに向いています。Glacier 系は長期アーカイブ用で、Deep Archive なら 1 GB あたり月額約 0.002 ドルまで下がりますが、取り出しに最大 12 時間かかります。ライフサイクルポリシーを設定すれば、作成から 30 日後に Standard-IA、90 日後に Glacier へ自動移行するルールを定義でき、手動管理なしにコストを削減できます。Azure Blob Storage も Hot/Cool/Cold/Archive の 4 層構成を持ちますが、S3 の Intelligent-Tiering のようにオブジェクト単位で自動最適化する機能はなく、ライフサイクル管理ポリシーでの手動設定が必要です。
バケット設計とアクセス制御
S3 のバケット名はグローバルで一意である必要があり、命名時にはプロジェクト名やアカウント ID を含めて衝突を避けるのが実務上の定石です。アクセス制御はバケットポリシー (リソースベース) と IAM ポリシー (アイデンティティベース) の 2 層で構成されます。まず S3 Block Public Access をアカウントレベルで有効にして意図しない公開を防止し、その上で必要な範囲だけバケットポリシーで許可する設計が推奨されます。サーバーサイド暗号化は SSE-S3 (S3 管理キー) がデフォルトで有効になっており、コンプライアンス要件で鍵の管理が必要な場合は SSE-KMS を選択します。バージョニングを有効にすれば誤削除からの復旧が可能になり、MFA Delete と組み合わせることで悪意ある削除も防止できます。オブジェクトストレージの関連書籍 (Amazon) では、こうした設計パターンが体系的に解説されています。
パフォーマンスチューニングとコスト可視化
S3 は単一プレフィックスあたり毎秒 5,500 回の GET と 3,500 回の PUT をサポートしており、プレフィックスを分散させることで事実上無制限のスループットを実現できます。大容量ファイルのアップロードにはマルチパートアップロードが有効で、100 MB 以上のファイルでは並列転送により速度が大幅に向上します。地理的に離れたクライアントからのアップロードには S3 Transfer Acceleration が効果的で、CloudFront のエッジネットワークを経由して転送速度を改善します。コスト管理の面では、S3 Storage Lens がバケット全体の使用状況をダッシュボードで可視化し、不要なオブジェクトの特定やストレージクラスの最適化を支援します。S3 Inventory を使えばオブジェクトの一覧をCSV や Parquet 形式で定期出力でき、暗号化状態やストレージクラスの棚卸しに活用できます。