はじめに
「今月のAWSの請求、なんか多くない?」
個人のAWSアカウントで学習していたとき、月末に請求を見て冷や汗をかいた経験があります。EC2を停止したつもりで終了していなかった、Elastic IPをインスタンスに紐付けないまま放置していた、NAT Gatewayを消し忘れていた——原因を調べると、いくつかのリソースが無駄に動き続けていました。
これは個人の話だけではありません。現場でも「先月のコストが予算を超えた。原因を調べてください」というケースを経験しました。
この記事では、「気づいたら高かった」を防ぐためのコスト監視の設定方法を整理します。
この記事を読むと、以下のことができるようになります。
- AWSのコストを可視化するCost Explorerの使い方が分かる
- 予算アラートをAWS Budgetsで設定できるようになる
- コストが上がりやすいサービス・設定のパターンが分かる
コストが「気づいたら高い」になる理由
AWSのコストが予想外に増える主な原因を整理します。
①停止・削除し忘れのリソース
学習・検証で使ったリソースを消し忘れることが多いです。
| リソース | 課金の条件 | 注意点 |
|---|---|---|
| EC2インスタンス | 起動中に課金 | 停止(Stop)しても一部は課金される。削除(Terminate)が必要 |
| Elastic IP | インスタンスと未紐付けの場合に課金 | インスタンス停止中に紐付けたままは課金される |
| NAT Gateway | 稼働時間+データ転送量 | 使わなくなっても削除しないと課金され続ける |
| RDSインスタンス | 起動中に課金 | EC2より高い。停止は7日後に自動再起動する仕様あり |
| EBSボリューム | 存在するだけで課金 | EC2を削除してもEBSを削除しないと残る |
②データ転送料金の見落とし
AWSでは、特定のデータ転送に料金がかかります。
- インターネットへのデータ転送(アウトバウンド):課金あり
- AZ間のデータ転送:課金あり
- リージョン間のデータ転送:課金あり
- 同一AZ内・CloudFront経由:無料または安い
「転送量は少ないはず」と思っていても、ログが大量に生成されてCloudWatch Logsに送り続けている、というケースで意外とコストがかかることがあります。
③サービスのスペックが過剰
「念のため大きめに」という判断で設定したインスタンスタイプやストレージが、実際の使用量に対して過剰になっているケースです。
Cost Explorerでコストを可視化する
まず「今、何にいくらかかっているか」を把握することが第一歩です。
AWSコンソール → Billing and Cost Management → Cost Explorer
Cost Explorerでできること:
- 日・月・年単位のコスト推移グラフ
- サービス別のコスト内訳(EC2が高い、S3が高いなど)
- リージョン別・アカウント別のコスト
- 前月比較
# CLIでコストを確認する(直近1ヶ月)
aws ce get-cost-and-usage \
--time-period Start=$(date -d '1 month ago' +%Y-%m-01),End=$(date +%Y-%m-01) \
--granularity MONTHLY \
--metrics "UnblendedCost" \
--group-by Type=DIMENSION,Key=SERVICE \
--query 'ResultsByTime[*].Groups[*].[Keys[0],Metrics.UnblendedCost.Amount]' \
--output table
Cost Explorerを月1回確認するだけでも、「先月と比べてどのサービスのコストが上がったか」が分かります。
AWS Budgetsで予算アラートを設定する
Cost Explorerは確認するツールですが、「超えたら通知する」仕組みにはAWS Budgetsを使います。
コンソールでの設定手順
- Billing and Cost Management → Budgets → 「予算を作成」
- 予算タイプ:コスト予算
- 予算名:任意(例:monthly-budget)
- 予算額:設定したい上限金額(例:$50)
- アラートのしきい値:予算の80%に達したら通知、など
- 通知先メールアドレスを設定
CLIでの設定
aws budgets create-budget \
--account-id 123456789012 \
--budget '{
"BudgetName": "monthly-cost-budget",
"BudgetLimit": {
"Amount": "50",
"Unit": "USD"
},
"TimeUnit": "MONTHLY",
"BudgetType": "COST"
}' \
--notifications-with-subscribers '[
{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{
"SubscriptionType": "EMAIL",
"Address": "your-email@example.com"
}
]
}
]'
「月$50を超えたら通知」という設定だけで、請求の意外な増加に気づける可能性が大きく上がります。
コスト削減のための実践的なチェック
定期的に行うとコスト削減に効果的なチェックリストです。
使っていないリソースの確認
# 停止中のEC2インスタンスを確認
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=stopped" \
--query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value|[0],LaunchTime]' \
--output table
# 未使用のEBSボリュームを確認(アタッチされていない)
aws ec2 describe-volumes \
--filters "Name=status,Values=available" \
--query 'Volumes[*].[VolumeId,Size,CreateTime]' \
--output table
# 未使用のElastic IPを確認
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' \
--output table
Savings Plansとリザーブドインスタンス
常時稼働するEC2・RDSは、Savings Plansやリザーブドインスタンスを使うとコストを削減できます。
| 購入方法 | 割引率 | コミット |
|---|---|---|
| オンデマンド(通常) | 基準 | なし |
| リザーブドインスタンス(1年) | 最大40%削減 | 1年間の使用 |
| リザーブドインスタンス(3年) | 最大60%削減 | 3年間の使用 |
| Savings Plans | 最大66%削減 | 1〜3年の使用量コミット |
「どのみち使い続けるリソース」は購入方法を見直すだけでコストが大きく変わります。
Cost Anomaly Detection(コスト異常検知)
AWS Budgetsと合わせて使いたいのがCost Anomaly Detectionです。
機械学習で「通常とは違うコストの増加パターン」を検知して通知します。予算の絶対値ではなく「急に増えた」という変化を検知するため、予期しないコスト増加に気づきやすいです。
設定はコンソールの Billing → Cost Anomaly Detection から数クリックで完了します。
まとめ
この記事では以下のことを解説しました。
- コストが「気づいたら高い」になる主な原因は「リソースの消し忘れ」「データ転送料の見落とし」「スペックの過剰設定」の3つ
- Cost Explorerでサービス別・月別のコスト推移を可視化する
- AWS Budgetsで予算上限のアラートを設定して、超過前に通知を受ける
- CLIで停止中EC2・未アタッチEBS・未使用Elastic IPを定期的に棚卸しする
- 常時稼働リソースはSavings PlansやリザーブドインスタンスでコストTo削減できる
「コストは月末に請求を見て分かる」から「増え始めた段階で気づける」に変えるだけで、クラウドの使い方は大きく変わります。まずAWS Budgetsのアラート設定だけでも、今日やっておきましょう。
ハンズオンラボでは、未経験からでも「作って覚える」をモットーにしたITハンズオンイベントを定期開催しています。
面白かったら
「👇いいね」で応援