Amazon S3(Simple Storage Service)は、AWSが提供するスケーラブルなオブジェクトストレージサービスです。高い耐久性と可用性を備え、静的Webサイトのホスティングからデータレイク、バックアップまで幅広い用途で活用されています。この記事では、S3の基本概念からバケット作成、オブジェクト操作、バージョニング設定まで、S3を使い始めるための基礎知識を解説します。
S3の基本概念を理解する
S3を効果的に使うためには、バケット、オブジェクト、キーという3つの基本概念を正確に理解する必要があります。
オブジェクトストレージとは
S3は「オブジェクトストレージ」と呼ばれる種類のストレージです。EBSのようなブロックストレージとは異なり、ファイルを「オブジェクト」という単位で管理します。各オブジェクトはデータ本体、メタデータ、一意の識別子で構成されます。
graph TB
subgraph "オブジェクトストレージ(S3)"
direction TB
O1[オブジェクト1<br/>データ + メタデータ]
O2[オブジェクト2<br/>データ + メタデータ]
O3[オブジェクト3<br/>データ + メタデータ]
end
subgraph "ブロックストレージ(EBS)"
direction TB
B1[ブロック1]
B2[ブロック2]
B3[ブロック3]
B1 --- B2 --- B3
end
subgraph "ファイルストレージ(EFS)"
direction TB
F[ファイルシステム]
F --> D1[ディレクトリ1]
F --> D2[ディレクトリ2]
D1 --> File1[ファイル1]
D2 --> File2[ファイル2]
endオブジェクトストレージには以下の特徴があります。
| 特徴 | 説明 |
|---|---|
| フラットな構造 | 階層構造を持たず、バケット内でオブジェクトを一意のキーで管理 |
| HTTP/HTTPSアクセス | REST APIを通じてアクセス可能 |
| メタデータ | 各オブジェクトに任意のメタデータを付与可能 |
| スケーラビリティ | 事実上無制限の容量を提供 |
バケット(Bucket)
バケットはオブジェクトを格納するコンテナです。S3にデータを保存するには、まずバケットを作成する必要があります。
バケットには以下の重要な特徴があります。
- グローバルに一意な名前: バケット名はAWS全体で一意である必要があります
- リージョン固有: バケットは特定のリージョンに作成されます
- フラットな名前空間: バケット内にサブバケットは作成できません
オブジェクト(Object)
オブジェクトはS3に保存されるデータの基本単位です。画像、動画、ドキュメント、バックアップファイルなど、あらゆる種類のデータを保存できます。
graph LR
subgraph "オブジェクトの構成要素"
direction TB
Key[キー<br/>reports/2026/january.pdf]
Data[データ本体<br/>最大5TB]
Meta[メタデータ<br/>Content-Type<br/>Last-Modified<br/>カスタムメタデータ]
Version[バージョンID<br/>任意]
endオブジェクトの主な特性は以下の通りです。
| 項目 | 制限・仕様 |
|---|---|
| 最大サイズ | 5TB |
| 単一PUTの上限 | 5GB(5GB超はマルチパートアップロード必須) |
| メタデータ上限 | 2KB |
キー(Key)
キーはバケット内でオブジェクトを一意に識別する文字列です。ファイルパスのような形式で記述できますが、実際にはディレクトリ構造は存在しません。
|
|
S3コンソールでは/(スラッシュ)を区切り文字として認識し、フォルダのように表示しますが、これは論理的な表現であり、実際のディレクトリ構造ではありません。このため「プレフィックス」と呼ばれます。
バケットを作成する
バケット作成時には、命名規則とリージョン選択を適切に行う必要があります。
バケットの命名規則
バケット名には厳格な規則が適用されます。以下の条件を満たす必要があります。
| ルール | 説明 |
|---|---|
| 文字数 | 3〜63文字 |
| 使用可能文字 | 小文字、数字、ハイフン(-) |
| 開始文字 | 小文字または数字で開始 |
| 禁止形式 | IPアドレス形式(192.168.1.1など)は不可 |
| 禁止プレフィックス | xn--、sthree-、sthree-configuratorで始まる名前は不可 |
| 禁止サフィックス | -s3alias、--ol-s3で終わる名前は不可 |
良い例と悪い例を示します。
|
|
AWS CLIでバケットを作成する
AWS CLIを使用してバケットを作成する方法を説明します。まず、AWS CLIが設定されていることを確認してください。
|
|
mbは「make bucket」の略です。リージョンを指定しない場合、デフォルトリージョンが使用されます。
AWSマネジメントコンソールでバケットを作成する
コンソールからバケットを作成する手順は以下の通りです。
- S3コンソールを開く
- 「バケットを作成」をクリック
- バケット名を入力(グローバルに一意な名前)
- リージョンを選択
- オブジェクト所有者の設定(通常は「ACL無効」を推奨)
- パブリックアクセスのブロック設定(デフォルトで有効)
- バージョニングの設定(任意)
- 暗号化の設定(デフォルトでSSE-S3が有効)
- 「バケットを作成」をクリック
flowchart TB
A[S3コンソールを開く] --> B[バケットを作成]
B --> C[バケット名を入力]
C --> D[リージョンを選択]
D --> E[オブジェクト所有者設定]
E --> F[パブリックアクセスブロック設定]
F --> G[バージョニング設定]
G --> H[暗号化設定]
H --> I[バケット作成完了]オブジェクトをアップロード・ダウンロードする
バケットを作成したら、オブジェクトの操作を行います。
AWS CLIでオブジェクトを操作する
AWS CLIを使った基本的なオブジェクト操作を示します。
|
|
syncコマンドは、ローカルとS3間の差分を検出して必要なファイルのみを転送するため、大量のファイルを扱う場合に効率的です。
マルチパートアップロード
5GBを超えるファイルをアップロードする場合、マルチパートアップロードが必須です。AWS CLIのcpコマンドは、大きなファイルに対して自動的にマルチパートアップロードを使用します。
|
|
マルチパートアップロードの仕組みは以下の通りです。
sequenceDiagram
participant Client as クライアント
participant S3 as Amazon S3
Client->>S3: 1. マルチパートアップロード開始
S3-->>Client: アップロードID返却
par 並列アップロード
Client->>S3: 2. パート1をアップロード
Client->>S3: 2. パート2をアップロード
Client->>S3: 2. パート3をアップロード
end
S3-->>Client: 各パートのETag返却
Client->>S3: 3. マルチパートアップロード完了
S3-->>Client: オブジェクト作成完了オブジェクトのメタデータを設定する
オブジェクトにはシステムメタデータとユーザー定義メタデータを設定できます。
|
|
主要なシステムメタデータは以下の通りです。
| メタデータ | 説明 | 例 |
|---|---|---|
| Content-Type | MIMEタイプ | text/html, application/json |
| Content-Encoding | エンコーディング | gzip |
| Cache-Control | キャッシュ制御 | max-age=3600 |
| Content-Disposition | ダウンロード時の動作 | attachment; filename=“report.pdf” |
バージョニングを設定する
バージョニングは、オブジェクトの変更履歴を保持し、誤削除や上書きからデータを保護する機能です。
バージョニングの仕組み
バージョニングを有効にすると、同じキーに対する更新や削除でも以前のバージョンが保持されます。
graph TB
subgraph "バージョニング有効時の動作"
direction TB
subgraph "初回アップロード"
V1[report.pdf<br/>Version: abc123]
end
subgraph "2回目アップロード"
V1a[report.pdf<br/>Version: abc123]
V2[report.pdf<br/>Version: def456<br/>最新]
end
subgraph "削除操作後"
V1b[report.pdf<br/>Version: abc123]
V2b[report.pdf<br/>Version: def456]
DM[削除マーカー<br/>Version: ghi789<br/>最新]
end
endバージョニングには3つの状態があります。
| 状態 | 説明 |
|---|---|
| 未有効化 | デフォルトの状態。バージョン管理なし |
| 有効 | すべての変更履歴を保持 |
| 一時停止 | 新しいバージョンは作成されないが、既存のバージョンは保持 |
バージョニングを有効にする
|
|
バージョン管理されたオブジェクトを操作する
|
|
削除マーカーとオブジェクトの復元
バージョニングが有効なバケットでオブジェクトを削除すると、実際のデータは削除されず「削除マーカー」が追加されます。オブジェクトを復元するには、削除マーカーを削除します。
|
|
S3の料金体系を理解する
S3の料金は複数の要素で構成されています。コストを最適化するために、料金体系を把握しておきましょう。
料金の構成要素
graph LR
subgraph "S3料金の構成要素"
A[ストレージ料金<br/>保存データ量/月]
B[リクエスト料金<br/>PUT/GET/LIST等]
C[データ転送料金<br/>アウトバウンド転送]
D[管理機能料金<br/>インベントリ等]
end東京リージョン(ap-northeast-1)でのS3 Standardの主な料金は以下の通りです(2026年1月時点)。
| 項目 | 料金 |
|---|---|
| ストレージ(最初の50TB/月) | $0.025/GB |
| PUTリクエスト | $0.0047/1,000リクエスト |
| GETリクエスト | $0.00037/1,000リクエスト |
| インターネットへの転送(最初の10TB/月) | $0.114/GB |
無料利用枠
AWSの新規アカウントでは、S3の無料利用枠が提供されています。
- ストレージ:5GB(S3 Standard)
- リクエスト:20,000件のGETリクエスト、2,000件のPUTリクエスト
- データ転送:100GBのデータ転送(アウトバウンド)
S3利用時のベストプラクティス
S3を安全かつ効率的に利用するためのベストプラクティスをまとめます。
命名とキー設計
- 一貫した命名規則: プロジェクト名、環境名、用途を含めた命名(例:
myapp-prod-logs) - キープレフィックスの活用: 論理的なグループ化(例:
logs/2026/01/25/) - ランダムプレフィックスの回避: 以前は推奨されていましたが、現在のS3は自動的に最適化されるため不要
セキュリティ
- パブリックアクセスブロックの有効化: デフォルトで有効。必要な場合のみ解除
- バケットポリシーの最小権限: 必要最小限のアクセス権限を付与
- 暗号化の有効化: SSE-S3(デフォルト)またはSSE-KMSを使用
- アクセスログの有効化: セキュリティ監査のためにアクセスログを記録
コスト最適化
- 適切なストレージクラスの選択: アクセス頻度に応じたストレージクラスを使用
- ライフサイクルルールの設定: 古いデータの自動アーカイブまたは削除
- 不完全なマルチパートアップロードの削除: 放置するとストレージ料金が発生
|
|
まとめ
この記事では、Amazon S3の基本概念と操作方法について解説しました。
- S3の基本概念: バケット、オブジェクト、キーの関係性とオブジェクトストレージの特徴
- バケット作成: 命名規則を遵守した適切なバケット設計
- オブジェクト操作: AWS CLIを使ったアップロード、ダウンロード、削除
- バージョニング: 変更履歴の保持と誤削除からのデータ保護
- 料金体系: ストレージ、リクエスト、データ転送の料金構成
S3は単なるファイル保存サービスではなく、アクセス制御、暗号化、ライフサイクル管理など多くの機能を備えています。次回の記事では、バケットポリシーや署名付きURLを使ったS3のアクセス制御とセキュリティについて詳しく解説します。