TerraformでAWS Budgetsを設定した
AWSのコスト管理を自動化するために、AWS Budgetsを設定しました。
主な目的は、予算を超えた場合にアラートを受け取ることで、不要なコストを抑えることです。
Terraformを使ってAWS Budgetsを設定したので、行ったことをまとめます。
1. 環境の準備
まず最初に、TerraformとAWS CLIがインストールされているかを確認しました。私はAWS SSOを使っているので、以下のコマンドでSSOの設定を行い、AWSにログインしました。
aws configure sso
このコマンドでAWS SSOにログインし、プロファイルを設定しました。
2. Terraformプロジェクトのセットアップ
次に、Terraformのプロジェクトをセットアップしました。以下のようなディレクトリ構成にしました。
├── README.md
├── main.tf
├── backend.tf
├── provider.tf
├── terraform.tfvars
└── variables.tf
`.gitignore`ファイルも作成し、Terraformの作業に不要なファイルがGitに含まれないように設定しました。
`.gitignore`の設定例
# Terraform State files
*.tfstate
*.tfstate.*
# Crash log files
crash.log
# Terraform variable files
*.tfvars
*.tfvars.json
# .terraform directory
.terraform/
# Terraform plan files
*.tfplan
3. Terraformコードの詳細
次に、AWS Budgetsを設定するためのコードを書きました。内容としては、`main.tf`で月ごとの予算を設定し、コストが閾値を超えた場合にメールで通知が来るようにしています。
# main.tf
resource "aws_budgets_budget" "monthly_budget" {
name = "monthly-cost-budget"
budget_type = "COST"
limit_amount = "0.01" # 月の予算をUSDで設定(アラート通知が飛ぶことを確認したいので低く設定)
limit_unit = "USD" # JPYにしたかったがエラーになった
time_unit = "MONTHLY" # 月ごとにコストを追跡
notification {
comparison_operator = "GREATER_THAN"
notification_type = "ACTUAL" # 実際のコストに基づいて通知
threshold = 80.0 # 80%を超えた場合にアラート
threshold_type = "PERCENTAGE"
subscriber {
address = var.alert_email # 通知を受け取るメールアドレス
subscription_type = "EMAIL"
}
}
}
まずはアラートのメールが飛ぶことを確認したいので、0.01USDを閾値に設定しました。
通過の単位であるlimit_unitはJPY(日本円)にしたかったのですが、私の設定の方法が間違っているのかUSDしか設定できない仕様なのかわかりませんがエラーになったので、まずはUSDで設定しました。
変数の設定
通知先のメールアドレスは、`variables.tf`に定義しました。
# variables.tf
variable "alert_email" {
description = "通知を受け取る自分のメールアドレス"
type = string
}
メールアドレスの実際の値は`terraform.tfvars`に記入しています。
# terraform.tfvars
alert_email = "email@email.com" # 通知を受け取るメールアドレス
4. Terraformコマンドの実行
これらのファイルを設定した後、Terraformコマンドを実行しました。以下のコマンドをプロジェクトのルートディレクトリで実行しました。
terraform init
terraform plan
terraform apply
無事にTerraformコマンドが成功し、AWS Budgetsが正常に設定されました。
5. 設定の確認
次に、AWS Management ConsoleでAWS Budgetsの設定が正しく反映されているかマネジメントコンソールからも確認しました。
また、設定した予算の閾値を超えた場合、指定したメールアドレスに通知が届くことも確認できました。
6. 設定の変更
次に、予算の閾値を$3に変更してみます。
# main.tf
resource "aws_budgets_budget" "monthly_budget" {
name = "monthly-cost-budget"
budget_type = "COST"
limit_amount = "3" # 月の予算をUSDで設定
limit_unit = "USD" # JPYにしたかったがエラーになった
time_unit = "MONTHLY" # 月ごとにコストを追跡
notification {
comparison_operator = "GREATER_THAN"
notification_type = "ACTUAL" # 実際のコストに基づいて通知
threshold = 80.0 # 80%を超えた場合にアラート
threshold_type = "PERCENTAGE"
subscriber {
address = var.alert_email # 通知を受け取るメールアドレス
subscription_type = "EMAIL"
}
}
}
再度planコマンドで変更内容に問題ないか確認した後にapplyコマンドを実行しました。
terraform plan
terraform apply
コマンドが成功した後にマネジメントコンソールから確認すると閾値が$3に上がったことで画面の表示も変わっていました。
まとめ
今回は、Terraformを使ってAWS Budgetsを設定することで、コストの管理を自動化しました。
この方法により、予算を超えた場合にすぐに気づくことができるようになりました。
今後は、さらに細かなコスト分析や他のAWSサービスとの連携も試していきたいと思います。