🪣 STEP 7: AWS S3の基礎
Amazon S3の基本操作をマスターし、実際にファイルをアップロード・ダウンロードします
📋 このステップで学ぶこと
- S3とは何か(オブジェクトストレージ)
- バケットの作成と管理
- ファイルのアップロード・ダウンロード
- アクセス制御(パブリック vs プライベート)
- バージョニングとライフサイクル管理
- 実践演習:CSVファイルをS3に保存
🎯 このステップのゴール
このステップを終えると、S3でバケットを作成し、ファイルをアップロード・ダウンロードできるようになります。また、バージョニングとライフサイクル管理を設定して、実務で使えるレベルのS3操作スキルが身につきます。
🪣 1. S3とは何か
S3の基本
Amazon S3(Simple Storage Service)は、AWSが提供するオブジェクトストレージサービスです。2006年のサービス開始以来、クラウドストレージのデファクトスタンダードとなっています。
💡 S3を一言で表すと
S3は「インターネット上の無限の倉庫」です。
S3の特徴
✅ 実質無制限
容量制限なし、いくらでも保存可能。1ファイルの上限は5TBですが、ファイル数は無制限です。
✅ 高い耐久性
99.999999999%(イレブンナイン)。10億ファイルを100年保存しても1ファイルも失われない計算です。
✅ 低コスト
1GB/月 約$0.023(約3.5円)から。ストレージクラスを使い分ければさらに安くなります。
✅ 高いセキュリティ
暗号化、アクセス制御、監査ログなど、企業レベルのセキュリティ機能を標準装備。
S3の主要な概念
S3を使う上で、3つの重要な概念を理解しましょう。
1. バケット(Bucket)
オブジェクトを入れる容器です。
- 名前は世界で一意(他の人と被ってはダメ)
- リージョンごとに作成
- 例:
my-company-data-lake
2. オブジェクト(Object)
保存されるファイルです。
- 最大5TB/ファイル
- データ本体 + メタデータ
- 例:
sales_2024.csv
3. キー(Key)
オブジェクトの識別子(パス)です。
- パス形式で表現
- 実際にはフォルダはない
- 例:
data/2024/01/sales.csv
📝 S3の構造を理解しよう
⚠️ 重要:フォルダは実は存在しない!
S3には実際にはフォルダという概念はありません。
data/2024/01/log.csvというキーは、見た目はフォルダ構造に見えますが、実際は1つの長い文字列です。
ただし、AWSコンソールやツールは、/を区切りとして、フォルダのように表示してくれます。これは「プレフィックス」と呼ばれる概念です。
🏗️ 2. バケットの作成
実際にバケットを作ってみよう
ここからは、実際にAWSコンソールを操作してバケットを作成します。
ステップ1: S3コンソールにアクセス
- AWSマネジメントコンソールにログイン
- 上部の検索ボックスで「S3」と入力
- 「S3」サービスをクリック
- 右上でリージョンが「アジアパシフィック(東京)」になっているか確認
ステップ2: バケットを作成
- 「バケットを作成」ボタン(オレンジ色)をクリック
- バケット名:一意の名前を入力
- 例:
my-learning-bucket-20240115-abc - 小文字のみ、数字、ハイフン(-)が使える
- 日付や乱数を入れると重複しにくい
- 例:
- AWSリージョン:「アジアパシフィック(東京)ap-northeast-1」を選択
- オブジェクト所有者:「ACL無効(推奨)」のまま
- パブリックアクセス設定:
- ✅ 「パブリックアクセスをすべてブロック」にチェック(重要!)
- バケットのバージョニング:「無効にする」のまま(後で有効化します)
- デフォルトの暗号化:そのまま(SSE-S3が有効)
- 「バケットを作成」をクリック
🎉 バケット作成完了!
バケット一覧に、作成したバケットが表示されれば成功です。これがあなたの「クラウド上の倉庫」になります。
⚠️ バケット名の注意点
- 作成後に変更できない:名前を間違えたら削除して作り直し
- 世界で一意:他人が使っている名前は使えない
- DNS準拠:小文字、数字、ハイフンのみ(アンダースコア不可)
- 3〜63文字:長すぎても短すぎてもダメ
💡 バケット名のベストプラクティス
📤 3. ファイルのアップロード
サンプルファイルを準備しよう
まず、アップロードするためのサンプルファイルを作成します。
ステップ1: サンプルCSVファイルを作成
メモ帳(または任意のテキストエディタ)を開き、以下の内容をコピーして保存してください。
ファイル名: sample.csv として保存
ステップ2: ファイルをアップロード
- 作成したバケット名をクリックして、バケットの中に入る
- 「アップロード」ボタン(オレンジ色)をクリック
- 「ファイルを追加」をクリック
- 先ほど作成した
sample.csvを選択 - 「アップロード」ボタンをクリック
- 「アップロードが成功しました」と表示されたら成功
- 「閉じる」をクリック
フォルダを作成してファイルを整理しよう
ステップ3: フォルダを作成
- バケットのトップページに戻る
- 「フォルダを作成」をクリック
- フォルダ名に「data」と入力
- 「フォルダを作成」をクリック
- 作成した「data」フォルダをクリックして中に入る
- 同様に「2024」フォルダを作成
- 「2024」の中に「01」フォルダを作成
📁 アップロード後の構造
💡 複数ファイルの一括アップロード
- 複数ファイル選択:Ctrl+クリックまたはShift+クリックで複数選択可能
- フォルダごとアップロード:「フォルダを追加」で、フォルダ構造ごとアップロード可能
- ドラッグ&ドロップ:ファイルを直接ドラッグ&ドロップでもアップロード可能
📥 4. ファイルのダウンロード
アップロードしたファイルをダウンロードしてみよう
ステップ1: ファイルをダウンロード
- バケット内で、ダウンロードしたいファイル名(例:
sample.csv)をクリック - ファイルの詳細画面が表示される
- 右上の「ダウンロード」ボタンをクリック
- ブラウザのダウンロードフォルダに保存される
ステップ2: ファイルの内容をブラウザで確認
- ファイル名をクリックして詳細画面を開く
- 「オープン」ボタンをクリック
- 新しいタブでファイルの内容が表示される(一時的なURLが発行される)
※「オブジェクトURL」を直接開くと「AccessDenied」エラーになります。これはプライベートバケットなので正常な動作です。
オブジェクトの詳細情報を確認しよう
📊 確認できる情報
- タイプ:ファイルの種類(text/csv、image/jpeg など)
- サイズ:ファイルサイズ
- 最終更新日時:アップロードまたは更新された日時
- ストレージクラス:Standard、Standard-IA など
- 暗号化:サーバー側の暗号化(SSE-S3)
- オブジェクトURL:S3上のアドレス
- S3 URI:s3://bucket-name/key 形式のURI(プログラムからアクセス時に使用)
🔒 5. アクセス制御
パブリック vs プライベート
S3のアクセス制御は、データセキュリティの要です。基本的にはプライベートを維持することが重要です。
🔒 プライベート(推奨)
- 認証が必要(IAMユーザーのみ)
- URLを知っていてもアクセス不可
- データが守られる
- デフォルト設定
用途:機密データ、社内データ、データレイク
🌐 パブリック(注意が必要)
- 誰でもアクセス可能
- URLを知っていれば読める
- データが公開される
- 設定変更が必要
用途:静的Webサイト、公開画像
⚠️ 実際にあった事故
S3バケットをパブリックに設定してしまい、機密データが流出した事故が多数報告されています。
- 顧客の個人情報が公開されてしまった
- 社内ドキュメントがGoogleに索引されてしまった
- パスワードファイルが流出してしまった
対策:「パブリックアクセスをすべてブロック」を常に有効にしておく
アクセス制御の仕組み
| 制御方法 | 説明 | 用途 |
|---|---|---|
| ブロックパブリックアクセス | バケット全体をプライベートに強制 | 基本設定(常にON推奨) |
| バケットポリシー | JSONで詳細なアクセス制御を定義 | 特定IPのみ許可、クロスアカウントアクセス |
| IAMポリシー | ユーザー/ロール側で権限を定義 | ユーザーごとの権限管理 |
| 署名付きURL | 一時的なアクセス権を持つURLを発行 | ファイルの一時共有 |
💡 学習段階での推奨設定
最初はプライベート設定のまま学習しましょう。パブリックアクセスが必要な場合(静的Webサイトなど)は、次のSTEP 8で詳しく学びます。
🔄 6. バージョニング
バージョニングとは?
バージョニングとは、ファイルの変更履歴を自動的に保存する機能です。誤って削除・上書きしても、以前のバージョンに戻せます。
💡 バージョニングの仕組み
バージョニングを有効化してみよう
ステップ1: バージョニングを有効化
- バケット名をクリックしてバケットに入る
- 「プロパティ」タブをクリック
- 「バケットのバージョニング」セクションを探す
- 「編集」をクリック
- 「有効にする」を選択
- 「変更の保存」をクリック
ステップ2: バージョニングをテスト
- sample.csvの内容を変更して、再度アップロード
- バケットの「オブジェクト」タブに戻る
- 「バージョンの表示」トグルをONにする
- 同じファイル名で複数のバージョンが表示される
- 古いバージョンをクリックして、内容を確認できる
✅ メリット
- 誤削除から保護される
- 以前のバージョンに復元可能
- 変更履歴を追跡できる
- ランサムウェア対策になる
⚠️ デメリット
- ストレージコストが増加
- 全バージョンが保存される
- 古いバージョンの削除が必要
💡 バージョニングのベストプラクティス
重要なデータには必ず有効化し、ライフサイクルポリシーで古いバージョンを自動削除する設定を組み合わせるのがベストです。
例:「現行バージョン以外は90日後に削除」というルールを設定
⏰ 7. ライフサイクル管理
ライフサイクルポリシーとは?
ライフサイクルポリシーとは、オブジェクトを自動的に移行・削除するルールです。コスト最適化に必須の機能です。
💡 ライフサイクルのイメージ
ライフサイクルポリシーを設定してみよう
ステップ1: ライフサイクルルールを作成
- バケットの「管理」タブをクリック
- 「ライフサイクルルールを作成」をクリック
- ライフサイクルルール名:「auto-archive-rule」など
- ルールのスコープ:「バケット内のすべてのオブジェクトに適用」を選択
- 確認のチェックボックスにチェック
ステップ2: 移行アクションを設定
- 「ライフサイクルルールアクション」で以下を選択:
- ✅ ストレージクラス間でオブジェクトの現行バージョンを移行
- Standard-IA への移行:
- ストレージクラス:「Standard-IA」を選択
- オブジェクト作成後の日数:「30」と入力
- 「移行を追加」をクリック
- Glacier への移行:
- ストレージクラス:「Glacier Flexible Retrieval」を選択
- オブジェクト作成後の日数:「90」と入力
- 「ルールを作成」をクリック
💰 ライフサイクルポリシーの効果
⚠️ ライフサイクルポリシーの注意点
- 反映に時間がかかる:設定後、実際の移行は24〜48時間後
- 最小保存期間:Standard-IAは30日、Glacierは90日の最小保存期間がある
- 取り出し料金:Glacierからのデータ取り出しには時間と料金がかかる
🧪 8. 実践演習:データレイク風のS3構造を作る
演習の目標
実際のデータ分析を想定して、データレイク風のフォルダ構造を作成し、CSVファイルを配置します。
演習1: データレイク風のフォルダ構造を作成
バケット内に以下のフォルダ構造を作成してください:
- 「フォルダを作成」で「raw」フォルダを作成
- 同様に「processed」「curated」フォルダを作成
- 「raw」フォルダの中に「sales」フォルダを作成
- 「raw/sales」の中に「2024」フォルダを作成
- 「raw/sales/2024」の中に「01」フォルダを作成
演習2: サンプルデータをアップロード
以下の内容でsales_20240115.csvを作成:
- このCSVを
raw/sales/2024/01/にアップロード - アップロード後、正しく配置されているか確認
演習3: バージョニングとライフサイクルを設定
- バケットのバージョニングを有効化
- CSVファイルの内容を1行追加して、再度アップロード
- 「バージョンの表示」で、2つのバージョンがあることを確認
- ライフサイクルポリシーを設定:
- 30日後にStandard-IAに移行
- 90日後にGlacierに移行
🎉 演習完了!
これで、実際のデータレイクで使われる基本的なS3の操作ができるようになりました。
次のSTEP 8では、boto3(Python SDK)を使って、プログラムからS3を操作する方法を学びます。
📝 STEP 7 のまとめ
✅ このステップで学んだこと
1. S3の基本
- S3は実質無制限のオブジェクトストレージ
- バケット、オブジェクト、キーの3つの概念
- フォルダは実際には存在しない(プレフィックス)
2. 基本操作
- バケットの作成(名前は世界で一意)
- ファイルのアップロード・ダウンロード
- フォルダの作成と管理
3. セキュリティ
- プライベート設定を基本にする
- パブリックアクセスは慎重に
4. 高度な機能
- バージョニングで誤削除を防止
- ライフサイクルポリシーでコスト最適化
💡 次のステップへ
S3は、データ基盤の土台となる重要なサービスです。
次のSTEP 8では、Pythonから自動的にS3を操作する方法を学び、実用的なスキルを身につけます。データエンジニアには必須のスキルなので、しっかりマスターしましょう!
📝 理解度チェック
S3のバケット名を決める際の注意点を3つ挙げてください。
【解答】
- 世界で一意:バケット名は世界中で一意である必要がある。他人が使っている名前は使えない。
- 小文字のみ:大文字は使えない。小文字、数字、ハイフン(-)のみ使用可能。
- 変更不可:一度作成したバケット名は変更できない。削除して作り直す必要がある。
バージョニングのメリットとデメリットを説明してください。
【解答】
メリット:
- 誤って削除・上書きしても、以前のバージョンに復元できる
- 変更履歴を追跡できる
- データの保護(安全性向上)
デメリット:
- ストレージコストが増加(全バージョンが保存されるため)
- 古いバージョンを手動で削除する必要がある
ライフサイクルポリシーを使って、以下の要件を満たす設定を考えてください。
「ログファイルは、最初の7日間は頻繁にアクセスするが、それ以降は月1回程度しかアクセスしない。90日経過したら削除したい。」
【解答】
ライフサイクルポリシー設定:
- 0〜7日間:S3 Standard(頻繁にアクセスするため)
- 7日後:S3 Standard-IA に移行(月1回程度のアクセスに適している)
- 90日後:オブジェクトを削除
注意:Standard-IAには30日の最小保存期間があるため、7日での移行は早期削除料金が発生する可能性があります。実務では30日での移行が推奨されます。
S3で「フォルダ」という概念は実際には存在しないと学びました。では、なぜフォルダのように見えるのでしょうか?
【解答】
S3では、オブジェクトのキー(名前)に/を含めることで、フォルダのように見せています。
例えば、data/2024/01/log.csvというキーは、実際には1つの長い文字列です。
ただし、AWSコンソールやツールは、/を区切りとして解釈し、フォルダ構造のように表示してくれます。
この仕組みは「プレフィックス」と呼ばれ、実際にはフラット構造(全てのオブジェクトが同じ階層)ですが、見た目上は階層構造に見えるように工夫されています。
❓ よくある質問
日付や乱数を追加してください。
バケット名は世界中で一意である必要があるため、シンプルな名前はすでに使われている可能性が高いです。例えば、my-bucketではなく、my-bucket-20240115-xyz123のように、日付やランダムな文字列を追加しましょう。
デフォルトはプライベートなので、見られません。
「パブリックアクセスをすべてブロック」が有効になっていれば、IAMユーザーやロールを持つ人だけがアクセスできます。ただし、誤ってパブリック設定にしてしまうと、誰でもアクセスできるようになるので注意してください。
全バージョンが保存されるため、更新頻度に応じて増えます。
例えば、1GBのファイルを10回更新すると、10GBのストレージを使います。ライフサイクルポリシーで古いバージョンを自動削除する設定を組み合わせることで、コストを抑えられます。
いいえ、反映には時間がかかります。
ライフサイクルポリシーは、通常24〜48時間以内に適用されます。すぐには移行や削除されないので、焦らず待ちましょう。
非常に安全です。
S3の耐久性は99.999999999%(イレブンナイン)で、複数のデータセンターに自動的にレプリケーションされます。また、サーバー側の暗号化も有効になっているため、データは暗号化されて保存されます。
ただし、誤削除には注意が必要です。バージョニングを有効にすることをおすすめします。
学習メモ
クラウドデータ基盤(AWS・GCP) - Step 7