Skip to content

geekcell/terraform-aws-budgets

Repository files navigation

Geek Cell GmbH

Code Quality

License GitHub release (latest tag) Release Validate Lint

Terraform AWS Budgets

This Terraform module provides a preconfigured solution for setting up AWS Budgets for your AWS account. Our team has years of experience working with AWS Budgets, and we are sharing our knowledge with you through this module. With this module, you can quickly and easily set up budgets that align with your organization's goals and get alerts when your usage exceeds your specified limits. By using this module, you can save time and avoid common mistakes when setting up AWS Budgets.

Not only is this module easy to configure, but it also encapsulates everything you need in one place. You can simply use the module and be confident that everything has been set up correctly and efficiently.

This makes it an excellent choice for organizations of any size looking to effectively manage their AWS costs.

Inputs

Name Description Type Default Required
budgets The list of budget.
list(object({
name = string
budget_type = string
limit_amount = string
limit_unit = string
time_period_start = string
time_period_end = string
time_unit = string

cost_filter = optional(map(list(string)))

notification = object({
comparison_operator = string
threshold = string
threshold_type = string
notification_type = string
})
}))
[
{
"budget_type": "COST",
"limit_amount": "200",
"limit_unit": "USD",
"name": "budget-account-monthly",
"notification": {
"comparison_operator": "GREATER_THAN",
"notification_type": "FORECASTED",
"threshold": "100",
"threshold_type": "PERCENTAGE"
},
"time_period_end": "2087-06-15_00:00",
"time_period_start": "2023-01-01_00:00",
"time_unit": "MONTHLY"
}
]
no
name The name of the budget. string n/a yes
recipients The email addresses to send notifications to. list(string) n/a yes

Outputs

No outputs.

Providers

Name Version
aws >= 4.4

Resources

  • resource.aws_budgets_budget.main (main.tf#19)
  • data source.aws_caller_identity.current (data.tf#1)

Examples

Basic Example

module "basic-example" {
  source = "../../"
  name   = var.name

  recipients = var.recipients

  budgets = [
    {
      name = var.name

      budget_type  = "COST"
      limit_amount = var.amount
      limit_unit   = var.amount_unit

      time_period_start = "2023-01-01_00:00"
      time_period_end   = "2087-06-15_00:00"
      time_unit         = "MONTHLY"

      notification = {
        comparison_operator = "GREATER_THAN"
        threshold           = "80"
        threshold_type      = "PERCENTAGE"
        notification_type   = "FORECASTED"
      }
    }
  ]
}

Advanced Example

module "advanced-example" {
  source = "../../"
  name   = "my-budget"

  budgets = [
    {
      name              = "ec2-rds-monthly-in-eu-central-1"
      budget_type       = "COST"
      limit_amount      = "200"
      limit_unit        = "USD"
      time_period_start = "2023-01-01_00:00"
      time_period_end   = "2087-06-15_00:00"
      time_unit         = "MONTHLY"

      cost_filter = {
        "Service" = [
          "Amazon Elastic Compute Cloud - Compute",
          "Amazon Relational Database Service"
        ]
        "Region" = [
          "eu-central-1"
        ]
      }

      notification = {
        comparison_operator = "GREATER_THAN"
        threshold           = "80"
        threshold_type      = "PERCENTAGE"
        notification_type   = "FORECASTED"
      }
    }
  ]

  recipients = ["no-reply@example.org"]
}