見出し画像

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の設定が正しく反映されているかマネジメントコンソールからも確認しました。


「monthly-budget」の予算を超過していてドキッとする画面

また、設定した予算の閾値を超えた場合、指定したメールアドレスに通知が届くことも確認できました。


通知用に設定したメールアドレスに届いたアラートメール



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サービスとの連携も試していきたいと思います。

いいなと思ったら応援しよう!