Terraformでのコスト管理は「請求が来てから気づく」を「マージ前に気づく」に変えることが本質です。Infracostをプルリクエストに組み込めばコスト差分が自動でコメントされ、AWS providerのdefault_tagsを使えばタグ付け漏れが構造的に起きなくなります。この2つだけで事故はかなり減ります。
「先月のAWS請求が想定の3倍だった」という事故は、たいてい構成をマージした時点では誰も気づいていません。コードとして書かれている以上、コードの段階でコストも見えるようにできます。この記事ではその実装を扱います。
まずタグ設計を固める
コスト配分の全ての土台がタグです。すべてのリソースに一貫したタグが付いていなければ、チーム別・プロジェクト別・環境別のコストは正確に出せません。逆に言えば、タグさえ揃っていれば請求は自動的に分解できます。
何のタグを必須にするかを先に決めます。最低限、環境(Environment)・所有チーム(Owner)・プロジェクト(Project)・コストセンターあたりです。「あとで決める」と永久に揃いません。
default_tags で自動付与する★これが最も効きます。provider ブロックに書けば、以降そのproviderで作る全リソースに自動でタグが付きます。リソースごとに書く必要がないので、付け忘れが構造的に起きなくなります。
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = {
Environment = "production"
Owner = "platform-team"
ManagedBy = "terraform"
}
}
}
必須タグが無い構成をCIで弾きます。default_tagsで大半は自動化できますが、手動で作られたリソースや別経路の作成を捕捉するために必要です。
★見落としがちです。タグを付けただけでは請求データに反映されません。AWSの請求コンソールで「コスト配分タグ」として有効化して初めて、Cost Explorerで分解できるようになります。
有効化は遡らない
コスト配分タグを有効にしても、過去の請求データには適用されません。有効化した時点以降のデータからです。タグ設計は早いほど得なので、プロジェクト初期に済ませてください。
そして定期的にタグなしリソースを監査すること。ここを回さないと、例外がじわじわ増えて分解できない部分が広がります。
Infracostでマージ前にコストを見る
Infracostはオープンソースのツールで、Terraform構成をスキャンして月次コストを推定します。リソースをクラウドプロバイダーの価格表にマッピングし、詳細な内訳を出します。AWS・Azure・GCPに対応しています。
真価はCI/CD統合です。プルリクエストにコストの差分がコメントされるため、レビュー時点で「この変更、月いくら増えるのか」が見えます。
| できること | 効果 |
|---|---|
| PRにコスト差分を表示 | レビューでコストを議論できる |
| 閾値を超えたらデプロイをブロック | 高額な事故を未然に止める |
| 構成変更前後の比較 | インスタンスタイプ変更の影響が事前に分かる |
推定であることは理解しておく
Infracostが出すのは価格表に基づく推定です。使用量ベースの課金(データ転送、リクエスト数、S3の保存量など)は実際の使い方次第なので、推定と実請求はズレます。「構成を変えたときの差分」を見る道具として使うのが正しい期待値です。
AWS Budgetsで実請求側も見張る
Infracostが「マージ前」なら、AWS Budgetsは「稼働後」の見張りです。予算を設定して閾値超過時に通知させます。両方あって初めて片側の穴が埋まります。
- 実績だけでなく予測にもアラートを設定する——月末に超えそうな段階で気づけます。
- タグ単位で予算を切る——「どのチームが超えたか」が即分かります。ここでもタグ設計が効いてきます。
- 通知先を人が見る場所にする——誰も見ないメールアドレスに送っても意味がありません。
AWSの請求で事故りやすい箇所そのものはAWSの料金トラップと対策にまとめました。Terraform側の運用設計はモジュール設計とState管理が土台になります。
まとめ
やることは3層です。①default_tagsでタグを自動付与し、請求コンソールでコスト配分タグを有効化する ②InfracostをPRに組み込んでマージ前に差分を見る ③AWS Budgetsで稼働後を見張る。
特に効果が大きいのは①です。タグが揃っていないと、そもそも「誰の何が高いのか」が分かりません。分解できない請求はどれだけ眺めても改善できないので、ここから着手してください。

コメント