AWS - Obtendo account alias usando Terraform

Postado por Thiago Marinho em 20 de Setembro de 2023 · 3 mins de leitura

As vezes, pra fazer algum tipo de automação, é interessante utilizar o alias da conta AWS como parte do nome de algum recurso, como tag etc. Curiosamente, ao procurar por alias na página da documentação do provider, o que você encontra, dentre outros, é esse recurso:

data "aws_iam_account_alias" "current" {}

output "account_id" {
  value = data.aws_iam_account_alias.current.account_alias
}

Por conta de seu nome, pode parecer que ele é exatamente o que você precisa, mas na verdade, ele é utilizado para personalizar a URL de login da sua conta.

Ao invés disso, o que muito provavelmente você está procurando é o alias da conta dentro de sua organização; para obter esse valor, você pode utilizar esse código aqui:

data "aws_caller_identity" "current" {}

data "aws_organizations_organization" "org" {}

locals {
  aws_account_name = compact([for account in data.aws_organizations_organization.org.accounts : account.id == data.aws_caller_identity.current.id ? account.name : ""])[0]
}

output "account_alias" {
  value = local.aws_account_name
}

Inclusive poderia ser uma possível inclusão em um módulo info, caso você possua ou queira prover algo do tipo:

module "info" {
  source "..."
}

output "account_alias" {
  value = module.info.account_alias
}

MAS

Esse código só vai funcionar se a identidade executando o código atualmente for a conta de gerenciamento da organização ou um delegated administrator:

  • https://docs.aws.amazon.com/pt_br/organizations/latest/APIReference/API_ListAccounts.html
  • https://github.com/hashicorp/terraform-provider-aws/issues/18590

Se não for esse seu caso, infelizmente ainda não há um datasource que retorne o alias apenas de sua conta; algo como descrito nessa issue (aberta):

  • https://github.com/hashicorp/terraform-provider-aws/issues/30656

Por enquanto, se você estiver nesse cenário e realmente precisar usar esse alias, sua melhor opção é provavelmente utilizar esse comando do AWS CLI:

aws organizations describe-account --account-id <ACCOUNT-ID>

E obter o alias a partir do retorno.