amazon-web-servicesamazon-s3terraformterraform-provider-aws

How to use AWS account_id variable in Terraform


I want access to my AWS Account ID in terraform. I am able to get at it with aws_caller_identity per the documentation. How do I then use the variable I created? In the below case I am trying to use it in an S3 bucket name:

data "aws_caller_identity" "current" {}
output "account_id" {
  value = data.aws_caller_identity.current.account_id
}

resource "aws_s3_bucket" "test-bucket" {
  bucket = "test-bucket-${account_id}"
}

Trying to use the account_id variable in this way gives me the error A reference to a resource type must be followed by at least one attribute access, specifying the resource name. I expect I'm not calling it correctly?


Solution

  • If you have a

    data "aws_caller_identity" "current" {}
    

    then you need to define a local for that value:

    locals {
        account_id = data.aws_caller_identity.current.account_id
    }
    

    and then use it like

    output "account_id" {
      value = local.account_id
    }
    
    resource "aws_s3_bucket" "test-bucket" {
      bucket = "test-bucket-${local.account_id}"
    }
    

    Terraform resolves the locals based on their dependencies so you can create locals that depend on other locals, on resources, on data blocks, etc.