AWSのコスト最適化設計|Cost Explorer・Savings Plans・スポットインスタンスで料金を下げる方法

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)AWS(Amazon Linux) > AWSのコスト最適化設計|Cost Explorer・Savings Plans・スポットインスタンスで料金を下げる方法
「AWSの請求額が先月より急に増えた」「EC2を止めたはずなのにコストが全然下がらない」
AWSはリソースを使えば使うほど料金体系が複雑になり、気づいたら月額が予算を大幅にオーバーしていた、という状況に陥りやすいクラウドです。

この記事では、AWSコスト最適化の3本柱であるCost Explorer(現状把握)Savings Plans(予約割引)スポットインスタンス(スポット価格)を使って料金を削減する実践的な手順を解説します。
「どの割引プランを選べばいいか」「Savings PlansとReserved Instancesの違いは何か」など、実務でよく迷う判断基準も整理します。
動作確認環境: AWS マネジメントコンソール・AWS CLI v2(2026年7月時点)。

この記事のポイント

・Cost Explorerのレコメンデーション機能でSavings Plans購入額の目安がわかる
・Compute Savings Plansは1年・前払いなしで最大66%割引、新規にはこれを選ぶ
・スポットインスタンスは最大90%割引、中断2分前通知をメタデータAPIで検知できる
・Reserved InstancesよりSavings Plansのほうが柔軟で新規購入に向いている


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜAWSのコストは「気づいたら膨らんでいる」のか

AWSで料金が想定を超えて膨らむ主な原因は次の3つです。

オンデマンド価格を使い続けている:EC2・Fargateをオンデマンド価格のままにしていると、Savings Plansで削減できたはずのコストを全額支払い続けます。月数万円のEC2費用も、Savings Plansで最大66%削減できます
停止忘れリソースが放置されている:開発・検証環境のEC2やRDSが週末・深夜も動き続けているケースが多く見られます。稼働時間の30~40%を削減するだけでも大きな効果があります
データ転送コスト(Egress)が見えにくい:EC2からインターネットへのアウトバウンド通信やリージョン間転送料金は、Cost Explorerで確認するまで気づきにくいコストです

コスト削減は「原因を把握する → 削減手段を選ぶ → 適用して確認する」の順番で進めることが重要です。この順番を逆にしてSavings Plansを先に購入してしまうと、コミット過剰・過少のどちらかになり、期待した削減効果が出ません。

Step 1: Cost Explorerで現状のコスト構造を把握する

1. Cost Explorerの有効化とサービス別コストの確認

Cost Explorerは有効化後24時間で過去12か月分のコストデータが閲覧可能になります。有効化はマネジメントコンソールの「Billing and Cost Management」→「Cost Explorer」から1クリックで完了します。

AWS CLIでサービス別の月間コストを取得するには、以下のコマンドを使います。

# サービス別コストをAWS CLI v2で取得する(2024年6月分の例) $ aws ce get-cost-and-usage \ --time-period Start=2024-06-01,End=2024-07-01 \ --granularity MONTHLY \ --metrics "UnblendedCost" \ --group-by Type=DIMENSION,Key=SERVICE \ --query 'ResultsByTime[0].Groups[*].{service:Keys[0], cost:Metrics.UnblendedCost.Amount}' \ --output table ----------------------------------------------------- | GetCostAndUsage | +---------------------+-----------------------------+ | service | cost | +---------------------+-----------------------------+ | Amazon EC2 | 2341.28 | | Amazon RDS Service | 891.56 | | Amazon S3 | 234.12 | | AWS Lambda | 12.34 | +---------------------+-----------------------------+

この例ではEC2が全体コストの約67%を占めています。EC2が上位に来た場合は、Savings Plansの適用が最優先施策になります。

2. コスト配分タグでプロジェクト・環境別に分析する

Cost Explorerのデフォルト表示はサービス別(EC2全体・RDS全体)です。プロジェクト別・環境別(本番/開発/検証)のコストを把握するにはコスト配分タグを使います。

設定手順は以下の通りです。

手順1:EC2やRDSにタグを付ける(例: `Project: my-web-app`、`Environment: Production`)
手順2:マネジメントコンソール「Billing」→「コスト配分タグ」→「ユーザー定義のコスト配分タグ」でタグキーを有効化する
手順3:有効化後24時間でCost Explorerのグループ化条件にタグが使えるようになる

タグが整備されていないと「EC2費用が高い」とわかっても「どのプロジェクトが高いか」が分からず、削減施策を打ちにくくなります。リソース作成時にタグ付けを標準化するのが、長期的なコスト管理の基盤になります。

3. AWS Budgetsで予算超過アラートを設定する

Cost Explorerはあくまでプル型(自分から確認する)です。予算超過にプッシュ型で気づくにはAWS Budgetsを組み合わせます。

# 設定済みのBudgetを確認する(account-idは実際の値に置換) $ aws budgets describe-budgets --account-id 123456789012 \ --query 'Budgets[*].{name:BudgetName, limit:BudgetLimit.Amount, unit:BudgetLimit.Unit}' ----------------------------------------- | DescribeBudgets | +-------+--------------+----------------+ | limit | name | unit | +-------+--------------+----------------+ | 500 | monthly-cost | USD | +-------+--------------+----------------+

予算の80%到達時点でメール通知を飛ばす設定にしておくと、月末に請求額が跳ね上がる前に気づけます。通知設定はマネジメントコンソールのBudgets画面から設定するのが手軽です。SNSトピック経由でSlackに飛ばすことも可能です。

Step 2: Savings Plansで計算可能なコストを削減する

1. Savings Plansの3種類と選び方

Savings Plansは「1年または3年のコミット(毎時の使用額)を約束する代わりに割引を受ける」プランです。3種類あります。

Compute Savings Plans:EC2・Lambda・Fargateに適用。インスタンスファミリー・リージョン・OS問わず割引が適用され、最大66%割引。新規購入には通常これを選ぶ
EC2 Instance Savings Plans:特定のインスタンスファミリー・リージョン固定。最大72%割引だが、インスタンスタイプを変更した場合は別途購入が必要
SageMaker Savings Plans:Amazon SageMaker専用(機械学習ワークロード向け)

新規でSavings Plansを購入するなら、Compute Savings Plansを選んでください。将来インスタンスタイプを変更しても、同じSavings Plansが適用され続けます。EC2 Instance Savings Plansは、特定のインスタンスファミリーを長期固定することが決まっている場合のみ検討します。

2. レコメンデーションAPIで購入額の目安を確認する

Savings Plansの購入額(コミット額)を感覚で決めると、コミット過剰(購入しすぎ)または割引ロス(少なすぎ)のどちらかになります。まずAWS CLIでAWSのレコメンデーションを確認しましょう。

# 過去60日の使用実績から1年・前払いなしのCompute Savings Plansを見積もる $ aws ce get-savings-plans-purchase-recommendation \ --savings-plans-type COMPUTE_SP \ --term-in-years ONE_YEAR \ --payment-option NO_UPFRONT \ --lookback-period-in-days SIXTY_DAYS \ --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary' { "EstimatedROI": "25.30", "CurrentOnDemandSpend": "3891.20", "EstimatedSavingsAmount": "1234.56", "EstimatedMonthlySavingsAmount": "308.64", "EstimatedOnDemandCostWithCurrentCommitment": "2856.64" }

`EstimatedMonthlySavingsAmount`(この例では308.64ドル)が月当たりの節約見込みです。`CurrentOnDemandSpend`(3891.20ドル)に対して約8%の削減率になります。Savings Plansで最大66%削減と紹介されていますが、実際の削減率は常時稼働するオンデマンドEC2が全体コストに占める割合によって変わります。

3. 購入後の適用確認コマンド

Savings Plansを購入してから適用開始まで最長60分かかります。適用後は以下のコマンドで確認できます。

# アクティブなSavings Plansを確認する $ aws savingsplans describe-savings-plans \ --states ACTIVE \ --query 'savingsPlans[*].{id:savingsPlanId, type:savingsPlanType, commitment:commitment, end:end}' [ { "id": "sp-0a1b2c3d4e5f67890", "type": "Compute", "commitment": "1.50", "end": "2025-07-01T00:00:00.000Z" } ]

`commitment: 1.50`(1.50 USD/時間)は月換算で約1,080ドルのコミットです。Cost ExplorerのSavings Plansカバレッジレポートで実際に何%のコストに適用されているか確認し、カバレッジが80%を下回っているなら追加購入を検討します。

AWSのコスト最適化設計を体系的に学びたい方には、以下のコースも参考にしてください。
>> AWSコスト設計・上級コースの詳細はこちら

Step 3: スポットインスタンスで変動ワークロードを安くする

1. スポットインスタンスが向いているワークロード・向いていないワークロード

スポットインスタンスはAWSの余剰EC2キャパシティをオンデマンド比最大90%割引で利用できます。ただし需要増加時にAWSから2分前通知で中断されることがあります。

向いているワークロード:
・バッチ処理・ETLパイプライン(途中で止まっても再実行できる)
・機械学習の学習ジョブ(チェックポイントがあれば途中から再開できる)
・CI/CDのビルド・テスト環境(1ジョブの実行時間が短い)
・ECS/EKSのワーカーノード(Graceful shutdownを実装済みの場合)

向いていないワークロード:
・本番Webサーバーの全台(中断されるとサービス停止につながる。オンデマンドとのMix構成が安全)
・セッション情報をローカルに持つステートフルアプリ(ElastiCache等の外部ストアを使うこと)
・RDS等のDBサーバー(マネージドサービスを使うこと)

2. スポット中断の2分前通知をメタデータAPIで検知する

スポットインスタンスが中断される2分前にEC2メタデータサービス(IMDS)に通知が届きます。この通知をポーリングして正常終了処理(Graceful shutdown)を実行するのが実務上の標準パターンです。

# IMDSv2でスポット中断通知を確認する(検証サーバー上で実行) TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -s -o /dev/null -w "%{http_code}" \ -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/spot/termination-time # 通常時(中断予告なし)→ HTTPステータス 404 が返る 404 # 中断2分前に通知が来た場合 → HTTPステータス 200 が返る 200

HTTPステータスが200になったら中断2分前です。この確認ループを30秒間隔で実行するスクリプトをサービスとして起動しておくのが定石です。Amazon CloudWatch Agentにもスポット中断検知機能があるため、エージェントを導入している環境ではそちらを活用できます。

3. Mixed Instances PolicyでスポットとオンデマンドをMixする

スポットインスタンスだけで構成すると、AZ全体の供給不足時に全台が中断されるリスクがあります。EC2 Auto ScalingのMixed Instances Policyを使って、オンデマンド2台ベース+それ以上はスポット80%という比率を設定するのが実務の標準パターンです。

# Auto ScalingグループのMixed Instances Policy設定を確認する $ aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-names my-batch-asg \ --query 'AutoScalingGroups[0].MixedInstancesPolicy.InstancesDistribution' { "OnDemandAllocationStrategy": "prioritized", "OnDemandBaseCapacity": 2, "OnDemandPercentageAboveBaseCapacity": 20, "SpotAllocationStrategy": "capacity-optimized", "SpotMaxPrice": "" }

`OnDemandBaseCapacity: 2`(常時2台はオンデマンド)、`OnDemandPercentageAboveBaseCapacity: 20`(その上はオンデマンド20%・スポット80%)という設定例です。`SpotAllocationStrategy: capacity-optimized` にしておくと、供給が最も豊富なインスタンスタイプ・AZを自動で選ぶため、中断リスクが下がります。

コスト最適化の実務Tips

Reserved InstancesとSavings Plansはどちらを選ぶか

2019年以降、AWSはSavings Plansを主力の割引プランとして位置づけています。それでもReserved Instances(RI)は一定のシェアがあるため、違いを整理します。

Reserved Instances:特定のインスタンスタイプ・AZ・OSを固定。インスタンスタイプを変更したい場合は別途RIを購入または変換する手続きが必要。RDS・ElastiCacheはRIのみ対象
Savings Plans(Computeタイプ):毎時のコミット額(ドル)を約束する代わりに、EC2・Lambda・Fargateのインスタンスタイプ・リージョン・OS問わず割引が適用される

新規EC2購入なら迷わずCompute Savings Plansを選んでください。既存RIが有効期限切れを迎えるタイミングでSavings Plansに切り替えるのが現実的です。RDSのコスト削減はSavings Plans対象外なので、Reserved DBインスタンスを別途活用します。

未使用リソースの自動停止(Lambda+EventBridge)

開発・検証環境のEC2を夜間・週末に自動停止するだけで、EC2コストを30~50%削減できる事例があります。以下は `Environment: Dev` タグのEC2を自動停止するLambda関数の基本形です。

# "Environment: Dev" タグのEC2を自動停止するLambda(Python / boto3) import boto3 def lambda_handler(event, context): ec2 = boto3.resource('ec2', region_name='ap-northeast-1') filters = [ {'Name': 'tag:Environment', 'Values': ['Dev']}, {'Name': 'instance-state-name', 'Values': ['running']} ] instances = list(ec2.instances.filter(Filters=filters)) if not instances: return {'stopped': 0} ids = [i.id for i in instances] ec2.instances.filter(InstanceIds=ids).stop() return {'stopped': len(ids), 'instance_ids': ids}

このLambdaをEventBridgeのcronルール `cron(0 9 ? * MON-FRI *)` (UTC 9時 = JST 18時)でトリガーすることで、平日18時以降にDevタグのEC2が自動停止します。翌朝の起動も `cron(0 0 ? * MON-FRI *)` (JST 9時)で同様に設定します。

よくある落とし穴と対処法

Savings Plansを購入したのにコストが期待ほど下がらない場合は、以下の原因を確認してください。

コミット額が少なすぎる:実際のオンデマンド使用量に対してコミット額が小さいと、残りのコストはオンデマンド価格のままです。Cost ExplorerのSavings Plans「カバレッジレポート」でカバレッジが80%未満なら追加購入を検討します
RDSやElastiCacheはSavings Plans対象外:Compute Savings PlansはEC2・Lambda・Fargateにのみ適用されます。RDSのコスト削減はReserved DBインスタンスを別途購入する必要があります
スポット中断の原因が不明:CloudTrailで `StopInstances` イベントを確認します。`stateTransitionReason` が `Server.SpotInstanceShutdown` ならスポット中断です。`Server.InsufficientInstanceCapacity` ならキャパシティ不足なので、`SpotAllocationStrategy: capacity-optimized` への切り替えを検討します

# スポット中断インスタンスをCloudTrailで確認する(過去7日間) $ aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=EventName,AttributeValue=StopInstances \ --start-time "$(date -d '7 days ago' --iso-8601=seconds)" \ --query 'Events[?contains(CloudTrailEvent, `SpotInstanceShutdown`)].{time:EventTime, resource:Resources[0].ResourceName}' [ { "time": "2024-06-14T02:15:30+00:00", "resource": "i-0a1b2c3d4e5f67890" } ]

本記事のまとめ

AWSのコスト削減を進める際の3ステップと主要ポイントをまとめます。

ステップ 施策 ポイント
1. 把握 Cost Explorerでサービス別コストを確認 EC2が高い → Savings Plans優先。Egress高い → CloudFront・VPCエンドポイント検討
2. 固定費削減 Compute Savings Plansを購入 レコメンデーションAPIで購入額を算出。1年・前払いなしで最大66%割引
3. 変動費削減 スポットインスタンスを活用 最大90%割引。バッチ・CI/CD・ML学習ジョブが主な対象
追加Tips 未使用リソースの自動停止 Dev環境を夜間停止するだけで30~50%削減できる事例あり
RDS削減 Reserved DBインスタンスを購入 Savings Plans対象外。Reserved DBインスタンスで最大69%割引

Cost Explorerの確認を習慣化し、Savings Plansのカバレッジレポートを月1回見直すだけで、AWSコストの最適化は着実に進みます。スポットインスタンスはGraceful shutdownの実装が必須なので、まずは重要度の低いワークロード(開発・CI/CD)から段階的に適用してください。

AWSのコスト最適化設計をさらに深く学びたい方は、以下もご覧ください。
>> AWSコスト設計・上級コースの詳細はこちら
>> AWSをはじめて学ぶ方はこちら(入門LP)

AWSのコスト削減も「Linuxサーバーの設計・構築の型」を知っている人が最速で動ける

Savings PlansやスポットインスタンスはAWSコンソールから設定できても、「なぜこの設計にするか」を説明できるかどうかで現場での信頼が変わります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。