How to use AWS account_id variable in Terraform
Solution 1
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.
Solution 2
Any time you create a datasource in terraform , it will export some attributes related to that datasource so that you can reference it somewhere else in your configuration and interpolate it with various ways.
In your case, you are already referencing the value of your account id in output
block
So that same way, you can construct the string for the bucket name as follows.
resource "aws_s3_bucket" "test-bucket" {
bucket = "test-bucket-${data.aws_caller_identity.current.account_id}"
}
I would highly recommend you go through the terrraform syntax which can help you better understand the resource, datasource and expressions
https://www.terraform.io/docs/language/expressions/references.html
Comments
-
John Skiles Skinner almost 2 years
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 errorA 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?-
luk2302 almost 3 years
"test-bucket-${account_id}"
should be"test-bucket-${data.aws_caller_identity.current.account_id}"
- alternatively define alocals
with that same value. -
John Skiles Skinner almost 3 yearsI was hoping there was a way to not have to repeat
ata.aws_caller_identity.current.account_id
over and over. Know how to define locals assigned to the account_id?
-