AWS基礎 #3 コスト管理 — 請求アラーム、Cost Explorer、無料利用枠

読了 9分

#1#2 を経てコンソール内で何かを作る準備ができました。ところで 作る前に必ずやっておきたいこと がもう 1 つあります。

コストアラーム。 もっともありがちな事故は次のいずれかです。

  • 学習用に作った NAT Gateway が 1 ヶ月回り続けて請求書 $45
  • 一時的に立てた RDS 単一 AZ が 1 週間で $30
  • 別リージョンに立てた EC2 が請求書の最後まで気付かれず 1 ヶ月 $80
  • ログが 1 ヶ月垂れ流されて CloudWatch $120

すべて 防げました。 請求アラームと Budgets が ON になっていれば。この記事は登録直後に必ず ON にすべき設定と、運用段階のコスト分析ツールを一気に整理します。

無料利用枠 (Free Tier) — 何がどこまで #

新規アカウントには 1 年 / 永続の無料枠があります。よく使うものだけ:

サービス上限期間
EC2t2.micro / t3.micro 750 時間 / 月1 年
RDSdb.t3.micro 750 時間 / 月、20 GB SSD1 年
S35 GB ストレージ + 20K GET + 2K PUT1 年
Lambda100 万呼び出し / 月永続
DynamoDB25 GB + 25 RCU / WCU永続
CloudFront1 TB 送信 + 10M リクエスト永続
CloudWatch10 メトリクス + 10 アラーム + 5 GB ログ永続
データ転送インターネットへ 100 GB / 月永続

ポイント:

  • 750 時間 / 月 — 1 ヶ月は 720~744 時間なので、インスタンス 1 台を 24 時間 回せる量。2 台同時に立てると 1 台分が追加課金。
  • 無料利用枠は新規アカウントのみ — 登録後 12 ヶ月または永続 (サービスごと)
  • 無料利用枠にないサービスも多い — NAT Gateway、EKS、Aurora など高価なものは最初から課金

無料利用枠の上限アラーム ON #

コンソール → Billing → Free Tier → 「Free Tier usage alerts」にメール登録。

セットアップ
Billing Console → Billing preferences
[✓] Receive Free Tier Usage Alerts → メール入力
[✓] Receive Billing Alerts (CloudWatch アラーム用)
[✓] Receive PDF invoices via email

保存すると 無料利用枠の 85% 使用 で通知が来ます。これが第一防衛線です。

Budgets — 請求アラームの本丸 #

CloudWatch Billing Alarm もありますが、AWS Budgets が請求アラームの標準ツールです。より柔軟で多次元に切り分けられます。

最初の予算 — $10 アラーム #

学習 / 個人アカウントの定番:

最初の予算を作る
コンソール → Billing → Budgets → Create budget
- Budget type: Cost budget
- Period: Monthly
- Amount: $10 (自分のリスク許容上限)
- Alert threshold: 50%、80%、100% の 3 段階
- Email: 自分のメール

3 段階にすると:

閾値意味
50% (例: $5)「あ、半分行ったな — 何が動いている?」
80% (例: $8)「本気で点検しないと」
100% (例: $10)「超過。即リソース整理」

予算の他の種類 #

種類何か
Cost budget総コスト — もっとも一般的
Usage budget「EC2 100 時間」のような使用量
RI / SP coverage budgetリザーブドインスタンス / Savings Plan のカバー率
RI / SP utilization budget予約済みリソースの使用率 (遊んでいないか)

最初は Cost budget 1 つ + 50/80/100 アラームで十分。

予算を多次元に切る #

運用段階で役立つツールです。

フィルタで絞る
- サービス別: Amazon EC2 / RDS / Lambda のみ
- タグ別: env=prod のみ
- リージョン別: ap-northeast-1 のみ
- アカウント別 (Organizations 上で): prod アカウントのみ

タグベースは タグが一貫していないと 通用しません — 後ろのタグ戦略の節を併せて見てください。

CloudWatch Billing Alarm — 補助の手段 #

Budgets 以前の古いツールですが今でも有効です。違いは:

BudgetsCloudWatch Alarm
場所請求コンソールCloudWatch (#7)
通知メール / SNS / LambdaSNS / Auto Scaling / EC2 アクション
評価1 日 ~ 8 時間遅延1 日 1 回 (us-east-1 のみ)
多次元可能単純

運用では Budgets が標準です。CloudWatch Billing Alarm は 自動アクション (例: 通知 → Lambda → 一部リソース停止) が必要な場面でだけ使います。

CloudWatch Billing メトリクスは us-east-1 にしかありません。 別リージョンで作ろうとすると見えません。

Cost Explorer — 請求書を切り分けて見る #

Cost Explorer はコストを 時間 / サービス / タグ / リージョン などで切り分けてグラフで見せるツールです。運用段階でもっとも使うツールです。

最初の有効化に 24 時間ほどかかります (履歴データの収集)。

基本の有効化
Billing Console → Cost Explorer → 「Launch Cost Explorer」

有効化後は次のような答えを 30 秒で得られるようになります。

答え 1) 「今月どこに一番使ったんだ?」 #

Group by → Service — サービス別合計。

ありがちな運用請求書の形
EC2-Other (NAT、EBS)   38%
EC2 インスタンス        22%
RDS                    15%
CloudFront              8%
S3                      6%
CloudWatch              4%
Other                   7%

意外な 1 位: EC2-Other がしばしば EC2 本体より大きいです。中には NAT Gateway のトラフィック、EBS ボリューム、データ転送がすべて入っています。

答え 2) 「なぜ昨日から急にコストが増えた?」 #

Group by → Service + 日別棒グラフ。どのサービスが増えたか一目で。だいたい次のいずれかです。

  • 新規リソース (デプロイ直後)
  • 詰まった NAT Gateway のトラフィック
  • 誰かが作って忘れた RDS / EC2
  • 別リージョンのリソース (リージョンフィルタで確認)

答え 3) 「この prod 環境のコストは月いくら?」 #

Group by → Tag (env) — タグがあって初めて通用します。タグ戦略がコスト分析の前提 である理由です。

答え 4) 「このペースで行くと来月いくら?」 #

Cost Explorer → Forecast — AWS がトレンドベースで予測を見せます。±数 % の信頼区間付き。

タグ戦略 — コスト分析の前提 #

タグはすべてのリソースに付ける Key=Value ラベル。コスト分析 / ポリシー / 自動化すべてに影響します。

標準タグ 5 つ #

この 5 つだけ一貫して付けるだけで運用のコスト分析がきちんと回ります。

キー値の例用途
envprod / staging / dev環境分離、コスト
serviceapi / worker / webサービス別コスト
teambackend / data / mobileチーム別コスト / 責任
ownercurtis@example.com誰が作ったリソースか
cost-centerR&D / Marketing経理 / 請求按分

コスト配分タグの有効化 #

タグを単に付けるだけでは終わりません。「コスト配分タグ (Cost Allocation Tag)」 として有効化しないと Cost Explorer / Budgets でフィルタ / グループに使えません。

有効化
Billing Console → Cost allocation tags
- 標準タグ 5 つすべてを Active に
- 有効後 24 時間 ~ 数日でデータに反映

タグの強制 #

リソース作成時に標準タグがなければ拒否する IAM ポリシーで強制可能。

env / service タグなしで EC2 作成を拒否
{
  "Effect": "Deny",
  "Action": "ec2:RunInstances",
  "Resource": "arn:aws:ec2:*:*:instance/*",
  "Condition": {
    "Null": {
      "aws:RequestTag/env": "true",
      "aws:RequestTag/service": "true"
    }
  }
}

これが効けば誰もタグなしでリソースを作れません。

よく高くつく項目 (チェックリスト) #

学習段階で落とし穴になるリソース。一度作ったら 必ず意識しましょう

NAT Gateway — 時間あたり $0.045 #

  • 1 ヶ月放置すると約 $32 + トラフィック
  • VPC の private subnet がインターネットへ出るのに必要
  • サイドプロジェクトには普通やり過ぎです — VPC endpoint または public subnet で迂回します
  • 学習が終わったら 必ず削除

Elastic IP — 時間あたり $0.005 (インスタンス未関連付け時) #

  • インスタンスに付いていれば無料
  • 外して忘れると 1 ヶ月 $3.6
  • 使っていない EIP はすぐ release

RDS #

  • 一番小さい db.t3.micro でも 1 ヶ月 $15 程度 (ストレージ / IOPS は別)
  • Multi-AZ オプションはコスト 2 倍
  • 学習が終わったら スナップショット後に削除

EBS ボリューム #

  • EC2 を停止してもボリュームが残れば課金が続く
  • 「Delete on termination」チェック推奨 (学習用)
  • 使っていないスナップショットも累積

EKS / OpenSearch / Aurora #

  • 時間あたり高いリソース — 学習用に立てておかないこと
  • EKS はクラスタあたり $0.10/時間 (1 ヶ月 $72) — ノードコスト別

CloudWatch Logs #

  • 取り込みは GB あたり ~$0.50、保存は GB-月 ~$0.03
  • ログの暴走がもっともありがちな事故 — デバッグモードで 1 ヶ月放置すると数十 GB
  • ロググループごとに retention 設定必須 (#7)

データ転送 (Egress) #

  • インターネットへ出るトラフィック — GB あたり ~$0.09 (リージョン差あり)
  • CloudFront 経由ならより安い
  • リージョン間 GB あたり ~$0.02

別リージョンの眠っているリソース #

#1 落とし穴 #3 — すべてのリージョン点検。自動点検ツールおすすめ:

全リージョンの EC2 / RDS を一気に見る
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
  echo "=== $region ==="
  aws ec2 describe-instances --region $region --query 'Reservations[].Instances[].[InstanceId,State.Name]' --output text
done

請求書 / インボイスを受け取る #

毎月の請求書を PDF で受け取る。

メールで受け取る
Billing Console → Billing preferences
[✓] Receive PDF invoices via email

CFO / 経理メールは別オプション (Account → Alternate Contacts → Billing)。

運用段階の追加ツール #

少し大きな運用で出会う項目です。

ツール何か
Cost Categoriesコストを任意のグループにまとめる (例: 「決済フローのコスト」)
Compute Optimizer過大 / 過小サイズの EC2 / Lambda を推奨
Trusted Advisor (Cost)コスト削減点検 (Business / Enterprise サポート)
Savings Plans / RI1~3 年契約で 30~70% 割引
Spot InstanceEC2 価格 ~70% 割引 — 中断可能なワークロード
S3 Lifecycle / Intelligent-Tiering古いオブジェクトを自動で安いクラスへ

小さな環境では Spot / Lifecycle だけ意識すれば十分です。

よく出会う落とし穴 #

1) 登録直後に請求アラーム ON 忘れ #

もっともありがちな事故です。1 ヶ月後の請求書を見て発見 — もう遅いです。この記事の最初のステップ として、登録直後に $10 / $20 / $50 のような単純な閾値でも即 ON にします。

2) NAT Gateway の眠るコスト #

学習用 VPC に NAT Gateway を入れて 1 ヶ月置くと $32+。学習が終わったら VPC 自体を削除 (依存関係の整理)。

3) 別リージョンに眠るリソース #

コンソールのリージョンセレクタ 1 つだけ見ているとすべてのリージョンは見えません。定期点検 + 別リージョンでのリソース作成を IAM ポリシーで遮断:

ap-northeast-1 以外を遮断
{
  "Effect": "Deny",
  "Action": "*",
  "Resource": "*",
  "Condition": {
    "StringNotEquals": { "aws:RequestedRegion": "ap-northeast-1" }
  }
}

4) コスト配分タグを有効化していない #

タグは一貫して付けたのに Cost Explorer のフィルタに出てこない — 99% はタグの有効化を忘れているか、有効化後 24 時間経っていない場合です。

5) 無料利用枠の終了に気付かない #

登録 12 ヶ月後に突然請求書が増えます。無料利用枠が終了したからです。カレンダーに 12 ヶ月マーク + Budgets が拾ってくれます。

6) 「使った」ではなく「プロビジョニングされた」が課金 #

EC2 を stop しただけだとコンピュート料金は止まりますが EBS の料金は続きます。RDS も stop 後 7 日で自動起動します。本当に使わないなら terminate するか、スナップショット後に削除します。

まとめ #

今回つかんだもの:

  • 無料利用枠 — 1 年 / 永続、750 時間 / 月 = 1 インスタンス 24 時間分
  • 登録直後に必ず: Free Tier alert + Billing alert + $10 / $20 / $50 Budget
  • AWS Budgets — Cost / Usage / RI など。50/80/100% の 3 段階アラームパターン
  • CloudWatch Billing Alarmus-east-1 のみ、自動アクション用
  • Cost Explorer — サービス / タグ / リージョン別に切って分析。有効化後 24 時間
  • タグ戦略env / service / team / owner / cost-center の 5 つ。コスト配分タグの有効化必須
  • よく高くつくもの — NAT Gateway、Elastic IP (未関連付け)、RDS Multi-AZ、EBS、EKS、CloudWatch Logs 暴走、Egress、別リージョンの眠るリソース
  • 運用段階 — Compute Optimizer、Savings Plans / Spot、S3 Lifecycle
  • 落とし穴 — 請求アラーム未設定、NAT 眠り、別リージョンリソース、タグ未活性化、無料利用枠終了、stop ≠ 停止

次回 — CLI と SDK #

コンソールだけで作業しているとすぐに限界が来ます。次は ターミナルから 同じ作業をより速く、自動化できる形に変える番です。

#4 AWS CLI と SDK のセットアップ では aws cli v2 のインストール、aws configure、プロファイル管理、そして boto3 のような SDK の使い方を整理します。#2 で作った IAM ユーザーのアクセスキーがここで初登場します。

X