STEP 7:AWS S3の基礎

🪣 STEP 7: AWS S3の基礎

Amazon S3の基本操作をマスターし、実際にファイルをアップロード・ダウンロードします

📋 このステップで学ぶこと

  • S3とは何か(オブジェクトストレージ)
  • バケットの作成と管理
  • ファイルのアップロード・ダウンロード
  • アクセス制御(パブリック vs プライベート)
  • バージョニングとライフサイクル管理
  • 実践演習:CSVファイルをS3に保存

🎯 このステップのゴール

このステップを終えると、S3でバケットを作成し、ファイルをアップロード・ダウンロードできるようになります。また、バージョニングとライフサイクル管理を設定して、実務で使えるレベルのS3操作スキルが身につきます。

🪣 1. S3とは何か

S3の基本

Amazon S3(Simple Storage Service)は、AWSが提供するオブジェクトストレージサービスです。2006年のサービス開始以来、クラウドストレージのデファクトスタンダードとなっています。

💡 S3を一言で表すと

S3は「インターネット上の無限の倉庫」です。

イメージ: あなたのPC ↓ アップロード S3(クラウド上の倉庫) ├─ どんなファイルでも保存できる ├─ 容量は無制限 ├─ 世界中どこからでもアクセス可能 ├─ データはほぼ100%消えない(99.999999999%) └─ 使った分だけ課金(従量課金) 使い方: ・データをアップロード → URLが発行される ・そのURLでいつでもダウンロードできる

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の構造を理解しよう

バケット: my-data-bucket(世界で一意の名前) │ ├─ data/2024/01/log.csv ← オブジェクト1(キー = data/2024/01/log.csv) ├─ data/2024/01/log2.csv ← オブジェクト2 ├─ images/photo.jpg ← オブジェクト3 └─ backup/database.sql ← オブジェクト4 各オブジェクトのURL(アクセス先):
https://my-data-bucket.s3.ap-northeast-1.amazonaws.com/data/2024/01/log.csv
↑バケット名 ↑リージョン ↑キー

⚠️ 重要:フォルダは実は存在しない!

S3には実際にはフォルダという概念はありません

data/2024/01/log.csvというキーは、見た目はフォルダ構造に見えますが、実際は1つの長い文字列です。

ただし、AWSコンソールやツールは、/を区切りとして、フォルダのように表示してくれます。これは「プレフィックス」と呼ばれる概念です。

🏗️ 2. バケットの作成

実際にバケットを作ってみよう

ここからは、実際にAWSコンソールを操作してバケットを作成します。

ステップ1: S3コンソールにアクセス

  1. AWSマネジメントコンソールにログイン
  2. 上部の検索ボックスで「S3」と入力
  3. 「S3」サービスをクリック
  4. 右上でリージョンが「アジアパシフィック(東京)」になっているか確認

ステップ2: バケットを作成

  1. バケットを作成」ボタン(オレンジ色)をクリック
  2. バケット名:一意の名前を入力
    • 例:my-learning-bucket-20240115-abc
    • 小文字のみ、数字、ハイフン(-)が使える
    • 日付や乱数を入れると重複しにくい
  3. AWSリージョン:「アジアパシフィック(東京)ap-northeast-1」を選択
  4. オブジェクト所有者:「ACL無効(推奨)」のまま
  5. パブリックアクセス設定:
    • ✅ 「パブリックアクセスをすべてブロック」にチェック(重要!)
  6. バケットのバージョニング:「無効にする」のまま(後で有効化します)
  7. デフォルトの暗号化:そのまま(SSE-S3が有効)
  8. バケットを作成」をクリック

🎉 バケット作成完了!

バケット一覧に、作成したバケットが表示されれば成功です。これがあなたの「クラウド上の倉庫」になります。

⚠️ バケット名の注意点

  • 作成後に変更できない:名前を間違えたら削除して作り直し
  • 世界で一意:他人が使っている名前は使えない
  • DNS準拠:小文字、数字、ハイフンのみ(アンダースコア不可)
  • 3〜63文字:長すぎても短すぎてもダメ

💡 バケット名のベストプラクティス

良い例: ・my-company-data-lake-2024 ・tanaka-learning-bucket-001 ・project-alpha-raw-data 悪い例: ・MyBucket ← 大文字はダメ ・my_bucket ← アンダースコアはダメ ・data ← シンプルすぎて既に使われている ・ab ← 3文字未満はダメ

📤 3. ファイルのアップロード

サンプルファイルを準備しよう

まず、アップロードするためのサンプルファイルを作成します。

ステップ1: サンプルCSVファイルを作成

メモ帳(または任意のテキストエディタ)を開き、以下の内容をコピーして保存してください。

name,age,city Taro,25,Tokyo Hanako,30,Osaka Jiro,28,Nagoya Yuki,22,Fukuoka

ファイル名: sample.csv として保存

ステップ2: ファイルをアップロード

  1. 作成したバケット名をクリックして、バケットの中に入る
  2. アップロード」ボタン(オレンジ色)をクリック
  3. ファイルを追加」をクリック
  4. 先ほど作成したsample.csvを選択
  5. アップロード」ボタンをクリック
  6. アップロードが成功しました」と表示されたら成功
  7. 閉じる」をクリック

フォルダを作成してファイルを整理しよう

ステップ3: フォルダを作成

  1. バケットのトップページに戻る
  2. フォルダを作成」をクリック
  3. フォルダ名に「data」と入力
  4. フォルダを作成」をクリック
  5. 作成した「data」フォルダをクリックして中に入る
  6. 同様に「2024」フォルダを作成
  7. 「2024」の中に「01」フォルダを作成

📁 アップロード後の構造

my-learning-bucket-20240115-abc/ ├─ sample.csv ← ルートに配置 └─ data/ └─ 2024/ └─ 01/ └─ sample.csv ← フォルダ内に配置(後でアップロード) ※ フォルダは実際には存在せず、キーの一部として扱われる

💡 複数ファイルの一括アップロード

  • 複数ファイル選択:Ctrl+クリックまたはShift+クリックで複数選択可能
  • フォルダごとアップロード:「フォルダを追加」で、フォルダ構造ごとアップロード可能
  • ドラッグ&ドロップ:ファイルを直接ドラッグ&ドロップでもアップロード可能

📥 4. ファイルのダウンロード

アップロードしたファイルをダウンロードしてみよう

ステップ1: ファイルをダウンロード

  1. バケット内で、ダウンロードしたいファイル名(例:sample.csv)をクリック
  2. ファイルの詳細画面が表示される
  3. 右上の「ダウンロード」ボタンをクリック
  4. ブラウザのダウンロードフォルダに保存される

ステップ2: ファイルの内容をブラウザで確認

  1. ファイル名をクリックして詳細画面を開く
  2. オープン」ボタンをクリック
  3. 新しいタブでファイルの内容が表示される(一時的な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. バージョニング

バージョニングとは?

バージョニングとは、ファイルの変更履歴を自動的に保存する機能です。誤って削除・上書きしても、以前のバージョンに戻せます。

💡 バージョニングの仕組み

【バージョニング無効の場合】 sample.csv をアップロード sample.csv を再度アップロード(内容変更) → 古いファイルは上書きされて消える 😢 【バージョニング有効の場合】 sample.csv をアップロード → バージョン1 sample.csv を再度アップロード → バージョン2 sample.csv を再度アップロード → バージョン3 → すべてのバージョンが保存される 😊 → いつでも過去のバージョンに戻せる

バージョニングを有効化してみよう

ステップ1: バージョニングを有効化

  1. バケット名をクリックしてバケットに入る
  2. プロパティ」タブをクリック
  3. バケットのバージョニング」セクションを探す
  4. 編集」をクリック
  5. 有効にする」を選択
  6. 変更の保存」をクリック

ステップ2: バージョニングをテスト

  1. sample.csvの内容を変更して、再度アップロード
  2. バケットの「オブジェクト」タブに戻る
  3. バージョンの表示」トグルをONにする
  4. 同じファイル名で複数のバージョンが表示される
  5. 古いバージョンをクリックして、内容を確認できる

✅ メリット

  • 誤削除から保護される
  • 以前のバージョンに復元可能
  • 変更履歴を追跡できる
  • ランサムウェア対策になる

⚠️ デメリット

  • ストレージコストが増加
  • 全バージョンが保存される
  • 古いバージョンの削除が必要

💡 バージョニングのベストプラクティス

重要なデータには必ず有効化し、ライフサイクルポリシーで古いバージョンを自動削除する設定を組み合わせるのがベストです。

例:「現行バージョン以外は90日後に削除」というルールを設定

⏰ 7. ライフサイクル管理

ライフサイクルポリシーとは?

ライフサイクルポリシーとは、オブジェクトを自動的に移行・削除するルールです。コスト最適化に必須の機能です。

💡 ライフサイクルのイメージ

データの一生(ライフサイクル) 作成日〜30日: S3 Standard(頻繁にアクセス) ↓ 自動移行 31〜90日: S3 Standard-IA(たまにアクセス) ↓ 自動移行 91〜365日: S3 Glacier(ほぼアクセスしない) ↓ 自動削除 365日以降: 削除(不要になった) → これを手動でやるのは大変! → ライフサイクルポリシーで自動化

ライフサイクルポリシーを設定してみよう

ステップ1: ライフサイクルルールを作成

  1. バケットの「管理」タブをクリック
  2. ライフサイクルルールを作成」をクリック
  3. ライフサイクルルール名:「auto-archive-rule」など
  4. ルールのスコープ:「バケット内のすべてのオブジェクトに適用」を選択
  5. 確認のチェックボックスにチェック

ステップ2: 移行アクションを設定

  1. ライフサイクルルールアクション」で以下を選択:
    • ✅ ストレージクラス間でオブジェクトの現行バージョンを移行
  2. Standard-IA への移行:
    • ストレージクラス:「Standard-IA」を選択
    • オブジェクト作成後の日数:「30」と入力
  3. 移行を追加」をクリック
  4. Glacier への移行:
    • ストレージクラス:「Glacier Flexible Retrieval」を選択
    • オブジェクト作成後の日数:「90」と入力
  5. ルールを作成」をクリック

💰 ライフサイクルポリシーの効果

例:1TBのデータを1年間保存する場合 【全期間Standardの場合】 1TB × $0.023 × 12ヶ月 = 約$276/年(約4万円) 【ライフサイクルありの場合】 0〜30日: Standard 1TB × $0.023 × 1ヶ月 = $23 31〜90日: IA 1TB × $0.0125 × 2ヶ月 = $25 91〜365日: Glacier 1TB × $0.0036 × 9ヶ月 = $32 合計: 約$80/年(約1.2万円) → 年間約70%のコスト削減!

⚠️ ライフサイクルポリシーの注意点

  • 反映に時間がかかる:設定後、実際の移行は24〜48時間後
  • 最小保存期間:Standard-IAは30日、Glacierは90日の最小保存期間がある
  • 取り出し料金:Glacierからのデータ取り出しには時間と料金がかかる

🧪 8. 実践演習:データレイク風のS3構造を作る

演習の目標

実際のデータ分析を想定して、データレイク風のフォルダ構造を作成し、CSVファイルを配置します。

演習1: データレイク風のフォルダ構造を作成

バケット内に以下のフォルダ構造を作成してください:

my-learning-bucket/ ├─ raw/ # 生データ(そのまま保存) ├─ processed/ # 加工済みデータ └─ curated/ # 分析用データ(最終形)
  1. 「フォルダを作成」で「raw」フォルダを作成
  2. 同様に「processed」「curated」フォルダを作成
  3. 「raw」フォルダの中に「sales」フォルダを作成
  4. 「raw/sales」の中に「2024」フォルダを作成
  5. 「raw/sales/2024」の中に「01」フォルダを作成

演習2: サンプルデータをアップロード

以下の内容でsales_20240115.csvを作成:

order_id,product,quantity,price,date 1001,Laptop,1,80000,2024-01-15 1002,Mouse,2,1500,2024-01-15 1003,Keyboard,1,5000,2024-01-15 1004,Monitor,1,30000,2024-01-15 1005,USB Cable,5,500,2024-01-15
  1. このCSVをraw/sales/2024/01/にアップロード
  2. アップロード後、正しく配置されているか確認

演習3: バージョニングとライフサイクルを設定

  1. バケットのバージョニングを有効化
  2. CSVファイルの内容を1行追加して、再度アップロード
  3. 「バージョンの表示」で、2つのバージョンがあることを確認
  4. ライフサイクルポリシーを設定:
    • 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を操作する方法を学び、実用的なスキルを身につけます。データエンジニアには必須のスキルなので、しっかりマスターしましょう!

📝 理解度チェック

問題 1 基礎

S3のバケット名を決める際の注意点を3つ挙げてください。

【解答】

  1. 世界で一意:バケット名は世界中で一意である必要がある。他人が使っている名前は使えない。
  2. 小文字のみ:大文字は使えない。小文字、数字、ハイフン(-)のみ使用可能。
  3. 変更不可:一度作成したバケット名は変更できない。削除して作り直す必要がある。
問題 2 基礎

バージョニングのメリットとデメリットを説明してください。

【解答】

メリット:

  • 誤って削除・上書きしても、以前のバージョンに復元できる
  • 変更履歴を追跡できる
  • データの保護(安全性向上)

デメリット:

  • ストレージコストが増加(全バージョンが保存されるため)
  • 古いバージョンを手動で削除する必要がある
問題 3 応用

ライフサイクルポリシーを使って、以下の要件を満たす設定を考えてください。
「ログファイルは、最初の7日間は頻繁にアクセスするが、それ以降は月1回程度しかアクセスしない。90日経過したら削除したい。」

【解答】

ライフサイクルポリシー設定:

  1. 0〜7日間:S3 Standard(頻繁にアクセスするため)
  2. 7日後:S3 Standard-IA に移行(月1回程度のアクセスに適している)
  3. 90日後:オブジェクトを削除

注意:Standard-IAには30日の最小保存期間があるため、7日での移行は早期削除料金が発生する可能性があります。実務では30日での移行が推奨されます。

問題 4 応用

S3で「フォルダ」という概念は実際には存在しないと学びました。では、なぜフォルダのように見えるのでしょうか?

【解答】

S3では、オブジェクトのキー(名前)/を含めることで、フォルダのように見せています。

例えば、data/2024/01/log.csvというキーは、実際には1つの長い文字列です。

ただし、AWSコンソールやツールは、/を区切りとして解釈し、フォルダ構造のように表示してくれます。

この仕組みは「プレフィックス」と呼ばれ、実際にはフラット構造(全てのオブジェクトが同じ階層)ですが、見た目上は階層構造に見えるように工夫されています。

❓ よくある質問

Q1: バケット名が既に使われていると言われました。どうすればいいですか?

日付や乱数を追加してください。

バケット名は世界中で一意である必要があるため、シンプルな名前はすでに使われている可能性が高いです。例えば、my-bucketではなく、my-bucket-20240115-xyz123のように、日付やランダムな文字列を追加しましょう。

Q2: S3のファイルは、他の人に見られませんか?

デフォルトはプライベートなので、見られません。

「パブリックアクセスをすべてブロック」が有効になっていれば、IAMユーザーやロールを持つ人だけがアクセスできます。ただし、誤ってパブリック設定にしてしまうと、誰でもアクセスできるようになるので注意してください。

Q3: バージョニングを有効にすると、コストはどれくらい増えますか?

全バージョンが保存されるため、更新頻度に応じて増えます。

例えば、1GBのファイルを10回更新すると、10GBのストレージを使います。ライフサイクルポリシーで古いバージョンを自動削除する設定を組み合わせることで、コストを抑えられます。

Q4: ライフサイクルポリシーは、すぐに反映されますか?

いいえ、反映には時間がかかります。

ライフサイクルポリシーは、通常24〜48時間以内に適用されます。すぐには移行や削除されないので、焦らず待ちましょう。

Q5: S3に保存したファイルは、どれくらい安全ですか?

非常に安全です。

S3の耐久性は99.999999999%(イレブンナイン)で、複数のデータセンターに自動的にレプリケーションされます。また、サーバー側の暗号化も有効になっているため、データは暗号化されて保存されます。

ただし、誤削除には注意が必要です。バージョニングを有効にすることをおすすめします。

📝

学習メモ

クラウドデータ基盤(AWS・GCP) - Step 7

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE