Search code examples
terraformterraform-provider-aws

Terraform: How can I reference Terraform cloud environmental variables?


I'm using Terraform cloud. I would like to take advantage of using AWS Tags with my resources. I want to tag each resource defined in Terraform with the current GIT Branch Name. That way I can separate dev from production.

Terraform has a list of Environmental Variables that do reference the GIT Branch Name with their service in the cloud as:

TFC_CONFIGURATION_VERSION_GIT_BRANCH - This is the name of the branch that the associated Terraform configuration version was ingressed from (e.g. master).

How can I reference the TFC_CONFIGURATION_VERSION_GIT_BRANCH environmental variable in the following resource for an example VPC?

resource "aws_vpc" "example_vpc" {
  cidr_block = "10.0.0.0/16"

  tags = {
    product = var.product
    stage = var.TFC_CONFIGURATION_VERSION_GIT_BRANCH
  }
}

reference: https://www.terraform.io/docs/language/values/variables.html#environment-variables


Solution

  • I figured it out! Wish the documentation was clearer on this with the cloud.

    You will have to set a empty variable. I defined mine in variables.tf as:

    variable "TFC_CONFIGURATION_VERSION_GIT_BRANCH" {
      type = string
      default = ""
    }
    

    Per the documentation I linked in question. TFC_CONFIGURATION_VERSION_GIT_BRANCH is injected automatically into the environmental variables with each cloud run. Defining the full name of the environmental variable as the variable worked.

    resource "aws_vpc" "example_vpc" {
      cidr_block = "10.0.0.0/16"
    
      tags = {
        product = var.product
        stage = var.TFC_CONFIGURATION_VERSION_GIT_BRANCH
      }
    }
    

    Then the plan output was successful in the cloud:

    Terraform will perform the following actions:
    
      # aws_vpc.example_vpc will be updated in-place
      ~ resource "aws_vpc" "example_vpc" {
            id                               = "vpc-0b19679e6464b8481"
          ~ tags                             = {
              ~ "stage"   = "None" -> "develop"
                # (1 unchanged element hidden)
            }
            # (14 unchanged attributes hidden)
        }