📋 このステップで学ぶこと
- クラウドコストの基本構造
- AWS編:リザーブドインスタンス、ストレージクラス、Athena最適化
- GCP編:BigQueryクエリ最適化、コミットメント、GCSライフサイクル
- 共通:コスト監視ダッシュボード、アラート設定
- 実践演習:月額コストを50%削減
🎯 このステップのゴール
このステップを終えると、クラウドコストを大幅に削減する具体的な手法を身につけられます。実践演習では、月額$1,000を$500に削減(50%削減)する方法を学びます!
🎯 1. クラウドコストの基本構造
なぜクラウドは高くなるのか?
💡 例え話:電気代と同じ!
【クラウドコスト = 電気代】
電気代が高くなる原因:
❌ エアコンつけっぱなし → 使っていないサーバー起動しっぱなし
❌ 古い家電で電力消費大 → 非効率なクエリでデータ処理
❌ 無駄に大きい冷蔵庫 → 過剰なスペックのインスタンス
❌ 電気代を確認しない → コスト監視をしていない
電気代を節約する方法:
✅ 使わないときは消す → 夜間・週末はサーバー停止
✅ 省エネ家電に買い替え → 効率的なクエリ設計
✅ 適切なサイズを選ぶ → 必要十分なインスタンスサイズ
✅ 毎月電気代をチェック → コスト監視ダッシュボード
【重要】
クラウドは「従量課金制」= 使った分だけ請求
電気と同じで、気をつけないとどんどん増える!
❌ よくあるコスト増加の原因
- 放置されたリソース:使っていないサーバーやストレージ(開発環境の放置など)
- 過剰なスペック:必要以上に大きいインスタンスサイズ
- 非効率なクエリ:SELECT * や全テーブルスキャンなど
- データの重複保存:バックアップが何重にもある
- 監視の欠如:コストが増えていることに気づかない
クラウドコストの内訳
| カテゴリ |
AWS |
GCP |
| コンピュート |
EC2、Lambda、Glue |
Compute Engine、Cloud Functions、Dataflow |
| ストレージ |
S3、EBS |
GCS、Persistent Disk |
| データベース |
RDS、Redshift |
Cloud SQL、BigQuery |
| ネットワーク |
データ転送(特にリージョン間) |
データ転送(特にリージョン間) |
| その他 |
CloudWatch、Athena |
Cloud Logging、BI Engine |
💡 コスト最適化の5つの基本原則
【コスト最適化の5原則】
① 使わないものは削除
・不要なリソースを定期的に棚卸し
・開発環境、テスト環境の放置を防ぐ
② 適切なサイズを選ぶ
・過剰なスペックを避ける
・負荷テストで適正サイズを見極める
③ コミット割引を活用
・長期利用なら割引プランを使う
・RI(リザーブドインスタンス)、コミットメント
④ 効率的な設計
・パーティション、クラスタリング
・必要なカラムだけSELECT
⑤ 継続的な監視
・コストを可視化
・アラート設定で異常を検知
🔶 2. AWS編:コスト最適化テクニック
テクニック1:リザーブドインスタンス(RI)
💡 例え話:定期券 vs 回数券
【RI = 電車の定期券】
毎日通勤する人の選択肢:
🎫 回数券(オンデマンド)
・乗るたびに切符を買う
・1回220円 × 22日 × 2回 = 9,680円/月
・柔軟だけど割高
🎫 定期券(リザーブドインスタンス)
・1ヶ月分をまとめ買い
・1ヶ月 6,000円(38%割引)
・毎日使うなら断然お得!
【ポイント】
・毎日使う(24時間稼働)なら → RI がお得
・たまにしか使わないなら → オンデマンドが無難
・使用パターンを分析してから決める!
| プラン |
割引率 |
特徴 |
| オンデマンド |
0%(通常価格) |
いつでも起動・停止可能。柔軟だが高い |
| RI(1年) |
約40%割引 |
1年間の利用を約束。まずはここから |
| RI(3年) |
約60〜75%割引 |
3年間の利用を約束。最大割引 |
| Savings Plans |
約40〜70%割引 |
柔軟性が高い新プラン(インスタンスタイプ変更可) |
📝 RIの支払いオプション詳細解説
【RIの3つの支払いオプション】
┌─────────────────────────────────────────────────────────┐
│ ① 全額前払い(All Upfront) │
├─────────────────────────────────────────────────────────┤
│ ・契約時に全額を一括払い │
│ ・割引率が最大(例:75%割引) │
│ ・キャッシュに余裕がある場合に最適 │
│ │
│ 例:3年契約の場合 │
│ オンデマンド: $180/月 × 36ヶ月 = $6,480 │
│ 全額前払い: $1,620(一括)= 75%割引 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ ② 一部前払い(Partial Upfront) │
├─────────────────────────────────────────────────────────┤
│ ・契約時に半額程度を前払い + 月額払い │
│ ・割引率は中程度(例:65%割引) │
│ ・バランスの取れた選択 │
│ │
│ 例:3年契約の場合 │
│ 前払い: $1,000 + 月額$17 × 36ヶ月 = $1,612 │
│ 合計約$2,612 = 約60%割引 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ ③ 前払いなし(No Upfront) │
├─────────────────────────────────────────────────────────┤
│ ・前払いなし、毎月払い │
│ ・割引率は最小(例:40%割引) │
│ ・初期投資を抑えたい場合に │
│ │
│ 例:1年契約の場合 │
│ 月額$108 × 12ヶ月 = $1,296 │
│ オンデマンド$180 × 12 = $2,160 → 約40%割引 │
└─────────────────────────────────────────────────────────┘
【選び方の判断基準】
・キャッシュに余裕あり → 全額前払い
・バランス重視 → 一部前払い
・初期投資を抑えたい → 前払いなし(または Savings Plans)
【計算例:Redshiftクラスタ】
オンデマンド価格(dc2.large):
・$0.25/時間 × 24時間 × 30日 = $180/月
・年間: $2,160
リザーブドインスタンス(1年契約・前払いなし):
・約40%割引 → $108/月
・年間: $1,296
・節約: $864/年
リザーブドインスタンス(3年契約・全額前払い):
・約75%割引 → $45/月相当
・3年間: $1,620(一括)
・節約: $4,860/3年
🎉 3年で約$4,860の節約!
💡 RIを使うべき場面
- 24時間常時稼働のリソース(本番DB、Redshiftなど)
- 1年以上継続利用が確実
- 予測可能な負荷(急激な変動がない)
⚠️ 注意:開発環境や負荷が変動するリソースには向きません。まずは1年契約から始めて、使い勝手を確認しましょう。
テクニック2:S3ストレージクラスの最適化
💡 例え話:倉庫の使い分け
【S3ストレージクラス = 倉庫の種類】
📦 Standard(駅前の貸し倉庫)
・家賃高いけど、すぐ取り出せる
・毎日使うものを保管
→ 頻繁にアクセスするデータ
📦 Standard-IA(郊外の倉庫)
・家賃安め、取り出しに少し時間かかる
・月1回くらい使うものを保管
→ たまにアクセスするデータ
📦 Glacier(地方のトランクルーム)
・家賃激安、取り出しに数時間〜1日
・年1回見るかどうかのものを保管
→ バックアップ、監査ログ
📦 Deep Archive(山奥の洞窟)
・家賃超激安、取り出しに12時間〜
・7年保存義務があるけど見ないもの
→ 法令対応の長期保存データ
【ポイント】
使用頻度に応じて倉庫を使い分ける = コスト削減!
| クラス |
保存料金 |
使い所 |
| Standard |
$0.023/GB/月 |
頻繁にアクセスするデータ(毎日〜週数回) |
| Intelligent-Tiering |
$0.023/GB/月〜 |
アクセスパターンが不明(自動で最適化) |
| Standard-IA |
$0.0125/GB/月 |
月1回程度のアクセス |
| Glacier Instant |
$0.004/GB/月 |
年数回のアクセス(即時取得可) |
| Glacier Deep Archive |
$0.00099/GB/月 |
ほぼアクセスしない(7年保存など) |
📝 ストレージクラス選択フローチャート
【どのストレージクラスを選ぶ?】
Q1: このデータに毎日アクセスする?
├─ YES → Standard
└─ NO ↓
Q2: 月に1回以上アクセスする?
├─ YES → Standard-IA
└─ NO ↓
Q3: 年に数回アクセスする?
├─ YES → Glacier Instant Retrieval
└─ NO ↓
Q4: ほぼアクセスしないが保存義務がある?
├─ YES → Glacier Deep Archive
└─ NO → 削除を検討!
【迷ったら…】
・アクセス頻度が予測できない → Intelligent-Tiering
(自動で最適なクラスに移動してくれる)
・最初はStandardで、30日後に自動移行
(ライフサイクルポリシーで設定)
【計算例:1TBのデータ保存】
Standard:
・1000GB × $0.023 = $23/月
・年間: $276
Standard-IA(月1回アクセス):
・1000GB × $0.0125 = $12.5/月
・年間: $150
・節約: $126/年(46%削減)
Glacier Deep Archive(年1回アクセス):
・1000GB × $0.00099 = $0.99/月
・年間: $11.88
・節約: $264/年(96%削減)
🎉 年間 $264 の節約!
✅ ライフサイクルポリシーで自動移行
【ライフサイクルルールの設定例】
┌─────────────────────────────────────────────────────────┐
│ 作成直後 │ Standard(頻繁にアクセス) │
├─────────────┼─────────────────────────────────────────┤
│ 30日後 │ Standard-IA に自動移行 │
├─────────────┼─────────────────────────────────────────┤
│ 90日後 │ Glacier Instant に自動移行 │
├─────────────┼─────────────────────────────────────────┤
│ 365日後 │ Glacier Deep Archive に自動移行 │
├─────────────┼─────────────────────────────────────────┤
│ 7年後 │ 自動削除 │
└─────────────┴─────────────────────────────────────────┘
これで手間なく自動的にコスト削減!
設定は S3コンソール → バケット → 管理 → ライフサイクル
テクニック3:Redshiftの一時停止
【計算例】
24時間稼働:
・$0.25/時間 × 24時間 × 30日 = $180/月
業務時間のみ稼働(9時〜18時、平日のみ):
・9時間/日 × 22日 = 198時間
・$0.25 × 198時間 = $49.5/月
🎉 月額 $130.5 の節約(73%削減)!
📝 自動停止の設定方法
CloudWatch Events(EventBridge)とLambdaで自動化できます。
# Lambda関数の例(Redshiftクラスタの停止)
import boto3
def lambda_handler(event, context):
redshift = boto3.client(‘redshift’)
# クラスタを一時停止
redshift.pause_cluster(
ClusterIdentifier=’my-redshift-cluster’
)
return {‘statusCode’: 200, ‘body’: ‘Cluster paused’}
# EventBridgeルール
# 毎日18時に停止: cron(0 9 ? * MON-FRI *) # UTC
# 毎日9時に再開: cron(0 0 ? * MON-FRI *) # UTC
📝 Lambda関数のコードを詳細解説
【Lambda関数の各部分を理解しよう】
def lambda_handler(event, context):
│ │ │
│ │ └── context: Lambda実行環境の情報
│ │ ・残り実行時間
│ │ ・メモリ制限
│ │ ・リクエストID など
│ │
│ └── event: トリガーからの入力データ
│ ・EventBridgeの場合: スケジュール情報
│ ・API Gatewayの場合: HTTPリクエスト
│ ・S3の場合: アップロードされたファイル情報
│
└── lambda_handler: AWSが呼び出す関数名(固定)
┌─────────────────────────────────────────────────────────┐
│ redshift = boto3.client(‘redshift’) │
├─────────────────────────────────────────────────────────┤
│ Redshiftサービスのクライアントを作成 │
│ ・boto3 = AWSのPython SDK │
│ ・client(‘サービス名’) でそのサービスを操作できる │
│ ・Lambdaの実行ロールに権限が必要 │
│ (redshift:PauseCluster, redshift:ResumeCluster) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ redshift.pause_cluster(ClusterIdentifier=’…’) │
├─────────────────────────────────────────────────────────┤
│ Redshiftクラスタを一時停止 │
│ ・ClusterIdentifier: 停止するクラスタの名前 │
│ ・AWSコンソールのRedshiftで確認できる │
│ ・停止中は課金されない(ストレージ料金のみ) │
│ ・再開には数分かかる │
│ │
│ 対になる関数: │
│ redshift.resume_cluster(ClusterIdentifier=’…’) │
│ → クラスタを再開 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ return {‘statusCode’: 200, ‘body’: ‘Cluster paused’} │
├─────────────────────────────────────────────────────────┤
│ Lambda関数の戻り値 │
│ ・statusCode: HTTPステータスコード(200=成功) │
│ ・body: 処理結果のメッセージ │
│ ・API Gateway経由の場合はHTTPレスポンスになる │
│ ・EventBridgeの場合は記録用(CloudWatch Logsに出力) │
└─────────────────────────────────────────────────────────┘
📝 EventBridgeのCron式を解説
【Cron式の読み方】
cron(0 9 ? * MON-FRI *)
│ │ │ │ │ │
│ │ │ │ │ └── 年(* = 毎年)
│ │ │ │ └── 曜日(MON-FRI = 月〜金)
│ │ │ └── 月(* = 毎月)
│ │ └── 日(? = 指定なし、曜日を使う場合)
│ └── 時(9 = 9時 UTC)
└── 分(0 = 0分)
【日本時間に変換】
⚠️ EventBridgeはUTC(協定世界時)で動作!
日本時間 = UTC + 9時間
したがって:
・cron(0 9 ? * MON-FRI *) = UTC 9:00 = 日本時間 18:00
・cron(0 0 ? * MON-FRI *) = UTC 0:00 = 日本時間 9:00
【設定例】
┌─────────────────────────────────────────────────────────┐
│ 毎日18:00(日本時間)に停止 │
│ cron(0 9 ? * MON-FRI *) │
├─────────────────────────────────────────────────────────┤
│ 毎日9:00(日本時間)に再開 │
│ cron(0 0 ? * MON-FRI *) │
└─────────────────────────────────────────────────────────┘
💡 日本の業務時間(9:00-18:00)に合わせた設定
テクニック4:Athenaクエリの最適化
Athenaはスキャンしたデータ量で課金されます($5/TB)。パーティションが重要です。
❌ NG例:パーティションなし
— 1年分全部スキャン(100GB)
SELECT *
FROM logs
WHERE date = ‘2024-01-15’;
💰 100GB × $5/TB = $0.50
毎日10回実行すると: $0.50 × 10 × 30日 = $150/月
✅ OK例:パーティション活用
— パーティション分割テーブル
CREATE EXTERNAL TABLE logs (
user_id STRING,
action STRING,
timestamp STRING
)
PARTITIONED BY (year INT, month INT, day INT)
STORED AS PARQUET
LOCATION ‘s3://my-bucket/logs/’;
— 1日分だけスキャン(0.3GB)
SELECT *
FROM logs
WHERE year = 2024 AND month = 1 AND day = 15;
💰 0.3GB × $5/TB = $0.0015
毎日10回実行しても: $0.0015 × 10 × 30日 = $0.45/月
🎉 99.7%削減!($150 → $0.45)
🔵 3. GCP編:コスト最適化テクニック
テクニック1:BigQueryクエリコスト削減
BigQueryは処理したデータ量で課金されます($5/TB)。STEP 19で学んだ内容の復習です。
📊 コスト削減の5つのポイント(復習)
【BigQueryコスト削減チェックリスト】
① SELECT * を避ける
❌ SELECT * FROM sales
✅ SELECT order_id, amount FROM sales
→ 必要なカラムだけ指定で90%削減も
② パーティションプルーニング
❌ WHERE order_date > ‘2024-01-01’(曖昧)
✅ WHERE DATE(order_date) = ‘2024-01-15’(日付指定)
→ パーティションで絞り込み
③ クラスタリング活用
よく WHERE や GROUP BY で使うカラムでクラスタリング
→ 類似データがまとまり、スキャン量削減
④ マテリアライズドビュー
頻繁な集計クエリを事前計算して保存
→ 毎回計算せず、保存結果を参照
⑤ BI Engine
ダッシュボードをメモリキャッシュ
→ 同じクエリの繰り返しを削減
テクニック2:コミットメント(確約利用割引)
💡 例え話:年間契約のジム会員
【GCPコミットメント = ジム会員】
🏃 都度払い(オンデマンド)
・1回500円で使い放題
・週5回 × 4週 = 20回 × 500円 = 10,000円/月
🏃 月額会員(1年契約)
・月額7,500円(25%割引)
・毎月使うなら断然お得
🏃 年間会員(3年契約)
・月額4,800円相当(52%割引)
・長期利用が確実なら最安
【ポイント】
AWSの「RI」とGCPの「コミットメント」は同じ考え方!
長期契約で割引を受ける仕組みです。
| プラン |
割引率 |
特徴 |
| オンデマンド |
0% |
通常価格。柔軟だが割高 |
| 1年契約 |
約25%割引 |
1年間の利用を約束。まずはここから |
| 3年契約 |
約52〜57%割引 |
3年間の利用を約束。最大割引 |
【計算例:Compute Engine】
オンデマンド(n1-standard-4):
・$0.19/時間 × 730時間 = $138.70/月
・年間: $1,664
1年コミットメント:
・約25%割引 → $104/月
・年間: $1,248
・節約: $416/年
3年コミットメント:
・約52%割引 → $66.6/月
・年間: $799
・節約: $865/年
🎉 年間 $865 の節約!
テクニック3:GCSライフサイクル管理
GCSも、S3と同様にストレージクラスを使い分けできます。
| クラス |
料金 |
使い所 |
| Standard |
$0.020/GB/月 |
頻繁にアクセス |
| Nearline |
$0.010/GB/月 |
月1回程度 |
| Coldline |
$0.004/GB/月 |
年数回 |
| Archive |
$0.0012/GB/月 |
ほぼアクセスしない |
✅ ライフサイクルポリシーの設定(JSON)
{
“lifecycle”: {
“rule”: [
{
“action”: {“type”: “SetStorageClass”, “storageClass”: “NEARLINE”},
“condition”: {“age”: 30}
},
{
“action”: {“type”: “SetStorageClass”, “storageClass”: “COLDLINE”},
“condition”: {“age”: 90}
},
{
“action”: {“type”: “SetStorageClass”, “storageClass”: “ARCHIVE”},
“condition”: {“age”: 365}
},
{
“action”: {“type”: “Delete”},
“condition”: {“age”: 2555}
}
]
}
}
# 設定コマンド
gsutil lifecycle set lifecycle.json gs://my-bucket/
テクニック4:BigQueryのフラット料金
📊 オンデマンド vs フラット料金
【どちらを選ぶべき?】
┌─────────────────────────────────────────────────────────┐
│ オンデマンド │
├─────────────────────────────────────────────────────────┤
│ 料金: $5/TB │
│ 向いている: クエリ量が少ない(月10TB未満) │
│ メリット: 使わなければ0円 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ フラット料金(スロット予約) │
├─────────────────────────────────────────────────────────┤
│ 料金: $2,000/月〜(100スロット) │
│ 向いている: クエリ量が多い(月400TB以上) │
│ メリット: どれだけクエリしても定額 │
└─────────────────────────────────────────────────────────┘
【損益分岐点の計算】
フラット料金: $2,000/月(100スロット)
オンデマンド: $5/TB
損益分岐点 = $2,000 ÷ $5 = 400TB/月
💡 月400TB以上処理するなら、フラット料金が有利!
それ以下ならオンデマンドで十分。
📊 4. 共通:コスト監視とアラート
AWS:Cost Explorer
📝 Cost Explorerの設定手順
- AWSコンソール → 右上のアカウント名 → 「請求とコスト管理」
- 左メニューから「Cost Explorer」を選択
- 「Cost Explorerを起動」(初回のみ有効化が必要、24時間後にデータ表示)
- グラフで月別、サービス別のコストを確認
【Cost Explorerでできること】
📊 サービス別コスト
・S3: $230、Redshift: $400、EC2: $150…
・どのサービスが高いか一目瞭然
📈 月別推移
・先月より20%増えている!など傾向を把握
🏷️ タグ別分析
・プロジェクト別、環境別(本番/開発)の集計
・事前にリソースにタグ付けが必要
🔮 予測
・今月末の予想コストを自動計算
・「このままだと$1,200になりそう」など
AWS:予算アラートの設定
📝 AWS Budgetsの設定手順
- 「請求とコスト管理」 → 「予算」
- 「予算を作成」をクリック
- 「コスト予算」を選択 → 「次へ」
- 予算名を入力(例:monthly-budget)
- 予算額を設定(例:$500/月)
- 「アラートしきい値を追加」で通知設定
- メールアドレスを入力
- 「予算を作成」
【おすすめのアラート設定】
予算: $500/月
┌─────────────────────────────────────────────────────────┐
│ 50% ($250) に達したら → 情報として確認 │
├─────────────────────────────────────────────────────────┤
│ 80% ($400) に達したら → 注意喚起メール │
├─────────────────────────────────────────────────────────┤
│ 90% ($450) に達したら → 警告メール │
├─────────────────────────────────────────────────────────┤
│ 100% ($500) を超えたら → 緊急通知 │
└─────────────────────────────────────────────────────────┘
💡 複数のしきい値を設定して、段階的に気づける仕組みに!
GCP:Cloud Billing Reports
📝 Billing Reportsの確認手順
- GCPコンソール → 左メニュー「お支払い」
- 「レポート」を選択
- グラフでサービス別、プロジェクト別のコストを確認
- フィルタで特定のサービスだけ表示可能
GCP:予算アラートの設定
📝 予算アラートの設定手順
- 「お支払い」 → 「予算とアラート」
- 「予算を作成」をクリック
- 予算名を入力(例:monthly-budget)
- 対象プロジェクトを選択(全体 or 特定プロジェクト)
- 予算タイプを選択(「指定した金額」推奨)
- 予算額を入力(例:$500)
- アラートのしきい値を設定(50%, 90%, 100%など)
- 通知先を設定(メール、Pub/Sub)
- 「保存」
💡 アラート設定のベストプラクティス
- 複数のしきい値:50%、80%、100%など段階的に設定
- チーム全員に通知:担当者だけでなく、チーム全体で把握
- Slackと連携:メールは見逃しがち、Slackなら即座に気づける
- 月次レビュー:毎月コストを振り返る習慣をつける
🛠️ 5. 実践演習:月額コストを50%削減
シナリオ
スタートアップのデータ基盤で、月額$1,000かかっています。これを$500以下に削減します。
STEP 1: 現状のコスト分析
【現状のコスト内訳(月額)】
┌─────────────────────────────────────────────────────────┐
│ サービス │ 月額 │ 問題点 │
├───────────────────┼─────────┼───────────────────────────┤
│ AWS Redshift │ $400 │ 24時間稼働、オンデマンド │
│ AWS S3 │ $230 │ 10TB全てStandard │
│ AWS Glue │ $150 │ DPU数が多い、毎日実行 │
│ AWS CloudWatch │ $50 │ ログ保持期間が長い │
│ データ転送 │ $100 │ リージョン間転送あり │
│ その他 │ $70 │ │
├───────────────────┼─────────┼───────────────────────────┤
│ 合計 │ $1,000 │ │
└─────────────────────────────────────────────────────────┘
STEP 2: 最適化プランの策定
| 項目 |
現状 |
最適化後 |
削減額 |
削減率 |
| Redshift |
$400 |
$120 |
-$280 |
70% |
| S3 |
$230 |
$100 |
-$130 |
57% |
| Glue |
$150 |
$100 |
-$50 |
33% |
| CloudWatch |
$50 |
$30 |
-$20 |
40% |
| データ転送 |
$100 |
$80 |
-$20 |
20% |
| その他 |
$70 |
$70 |
$0 |
0% |
| 合計 |
$1,000 |
$500 |
-$500 |
50% |
STEP 3: 具体的な実施内容
1️⃣ Redshiftの最適化(-$280)
【実施内容】
① RI 3年契約(全額前払い)を購入
・$400 → $120(70%割引)
・常時稼働が必要な本番環境に適用
② 夜間・週末の自動停止(開発環境)
・CloudWatch Events + Lambda で自動化
・平日9時〜18時のみ稼働
③ クラスタサイズの見直し
・CPU/メモリ使用率を確認
・過剰なら小さいノードタイプに変更
【結果】
$400 → $120(70%削減)
2️⃣ S3ストレージクラスの最適化(-$130)
【実施内容】
① ライフサイクルポリシーの設定
・30日後 → Standard-IA(50%削減)
・90日後 → Glacier Instant(80%削減)
・1年後 → Glacier Deep Archive(95%削減)
② 不要なデータの削除
・開発テスト用の古いデータ
・重複しているバックアップ
③ データ保持ポリシーの見直し
・7年後に自動削除(法令要件に合わせて)
【結果】
$230 → $100(57%削減)
3️⃣ Glueジョブの最適化(-$50)
【実施内容】
① DPU数を削減
・10 DPU → 5 DPU
・処理時間が少し増えるが許容範囲
② 実行頻度の見直し
・週1回で十分なものを日次から変更
・リアルタイム性が不要なジョブを整理
③ ジョブブックマークの活用
・増分処理で実行時間を短縮
・毎回全件処理 → 差分のみ処理
【結果】
$150 → $100(33%削減)
4️⃣ CloudWatchログの削減(-$20)
【実施内容】
① 保持期間を短縮
・90日 → 30日(本番環境)
・7日 → 3日(開発環境)
② 不要なログストリームを削除
・古い開発環境のログ
・使っていないサービスのログ
③ ログレベルを調整
・DEBUG → INFO以上のみ出力
・詳細ログは必要な時だけ有効化
【結果】
$50 → $30(40%削減)
5️⃣ データ転送の削減(-$20)
【実施内容】
① リージョン統一
・すべてのリソースを同一リージョン(東京)に
・リージョン間転送料金を削減
② VPCエンドポイント
・S3へのアクセスを内部通信に変更
・インターネット経由の転送料金を削減
③ データ圧縮
・転送前にgzip圧縮
・Parquet形式でカラム圧縮
【結果】
$100 → $80(20%削減)
【最適化後のコスト】
┌─────────────────────────────────────────────────────────┐
│ Before: $1,000/月 │
│ After: $500/月 │
├─────────────────────────────────────────────────────────┤
│ 🎉 月額 $500 削減(50%削減)! │
│ 🎉 年間 $6,000 の節約! │
└─────────────────────────────────────────────────────────┘
📈 6. 継続的なコスト管理
月次コストレビューの実施
📅 月次レビューのチェックリスト
【毎月1日にチェックすること】
□ コスト推移の確認
・前月比で増減をチェック
・予算との差異を確認
□ 大きな支出の特定
・どのサービスが高いか
・急に増えたサービスはないか
□ 未使用リソースの削除
・放置されたEC2、S3
・使っていないスナップショット
□ RI/コミットメントの見直し
・利用率をチェック(80%以上が目安)
・更新時期の確認
□ 新しい最適化手法
・AWSやGCPの新機能をキャッチアップ
・より安いオプションがないか
✅ 自動化できるコスト削減
- 夜間・週末の自動停止:Lambda/Cloud Functionsでスケジュール実行
- 古いスナップショットの削除:90日以上前のものを自動削除
- 未使用のEBSボリューム検出:アタッチされていないものをアラート
- ストレージクラスの自動移行:ライフサイクルポリシーで設定
📝 7. STEP 22 のまとめ
✅ このステップで学んだこと
- AWS編:RI、S3ストレージクラス、Redshift一時停止、Athena最適化
- GCP編:BigQueryクエリ最適化、コミットメント、GCSライフサイクル
- 共通:コスト監視ダッシュボード、予算アラート、月次レビュー
- 実践演習で月額コストを50%削減($1,000 → $500)
💡 次のステップへ
コスト最適化は継続的な取り組みです。
一度設定したら終わりではなく、定期的にレビューして改善していきましょう。
次のSTEP 23では、セキュリティとコンプライアンスを学びます。
データを守る重要な知識を身につけましょう!
❓ よくある質問
Q1: RIやコミットメントを購入したのに、あまり使っていません。どうすればいいですか?
RIマーケットプレイス(AWS)や予約の譲渡(GCP)で、使わない分を売却できます。ただし、3年契約などは途中解約できないので、購入前に慎重に検討しましょう。まずは1年契約から始めるのがおすすめです。
Q2: コスト削減と性能、どちらを優先すべきですか?
まずは性能を確保し、その上でコスト削減を図りましょう。性能が出ないと本末転倒です。ただし、過剰なスペックは無駄なので、「必要十分な性能」を見極めることが重要です。負荷テストで適切なスペックを確認しましょう。
Q3: ストレージクラスの移行に、データ取り出し料金はかかりますか?
Glacier/Archive系からの取り出しには料金がかかります。例えば、Glacier Deep Archiveからの取り出しは$0.02/GBです。また、取り出しに時間もかかります(Standard: 数分、Bulk: 12時間など)。頻繁にアクセスするデータは、安易にGlacierに移行しないよう注意しましょう。
Q4: コスト削減の優先順位は、どう決めればいいですか?
「削減効果が大きく、実装が簡単」なものから着手しましょう。例えば、未使用リソースの削除やストレージクラスの変更は、比較的簡単で効果も大きいです。一方、アーキテクチャの大幅な変更は時間がかかるので、長期的な取り組みとして計画しましょう。
Q5: 開発環境のコストも削減すべきですか?
はい、開発環境も積極的に削減しましょう。開発環境は夜間・週末に使わないことが多いので、自動停止の効果が大きいです。また、本番環境より小さいインスタンスサイズでも十分な場合が多いです。ただし、開発効率が下がらないよう、バランスを取ることが重要です。
Q6: 予算アラートが来たら、何をすればいいですか?
まず原因を特定し、対策を講じましょう。Cost Explorer/Billing Reportsで、どのサービスが増えているかを確認します。意図した増加(新機能追加など)か、意図しない増加(設定ミス、リソース放置など)かを判断し、必要に応じて対策を取りましょう。