I ran into an issue working with Terraform to setup an AWS Budget for a project and didn’t find the fix in the documentation or online. Thought I’d share here.
The docs for Terraform’s aws_budgets_budget
resource don’t go into any
detail on how the value of the TagKeyValue
property for the cost_filters
parameter should be formatted. Terraform expects a string but doesn’t indicate
how to encode the tag name and value into it. I found an example JSON file in
the docs for the AWS CLI command here that clued me in to the key$value
syntax. So, I tried this:
resource "aws_budgets_budget" "budget" {
...
cost_filters = {
TagKeyValue = "user:Environment$$${var.app_name}-${var.app_env}"
}
}
Terrform liked it but when I tried to apply, AWS balked. Turns out the variable
interpolation didn’t work as I expected. I ended up getting only part of the
variables replaced; user:Environment$${var.app_name}-prod
. The $$
and
${var.app_env}
were replaced as expected but it left the ${var.app_name}
!?
I ended up with this:
resource "aws_budgets_budget" "budget" {
...
cost_filters = {
TagKeyValue = format("user:Environment$%s-%s", var.app_name, var.app_env)
}
}
Working now.