_
(subtraço) ao invés do -
(traço) em todo o lugar (nomes de recursos, nomes de fontes de dados, nomes de variáveis, outputs, etc.).resource "aws_route_table" "public" {}
resource "aws_route_table" "public_route_table" {}
resource "aws_route_table" "public_aws_route_table" {}
this
se não houver mais um nome descritivo e geral disponível ou se o módulo de recurso criar um único recurso desse tipo (por exemplo, no módulo AWS VPC há um único recurso do tipo aws_nat_gateway
e vários recursos do tupoaws_route_table
, então aws_nat_gateway
deve ser nomeado this
e aws_route_table
deve ter nomes mais descritivos - como private
, public
, database
).-
em valores de argumentos e em locais onde o valor será exposto a um humano (por exemplo, no nome de DNS da instância RDS).count
/ for_each
no bloco de recurso ou fonte de dados como o primeiro argumento na parte superior e separe por uma nova linha depois dele.tags,
se suportadas pelo recurso, como o último argumento real, seguido por depends_on
e lifecycle
, se necessário. Estes devem ser separados por uma única linha vazia.count
/ for_each
, prefira valores boleanos (true
/ false
) em vez de usar length
ou outras expressões.resource
count
/ for_each
tags
count
name
, description
, e valor default
para variáveis conforme definido na seção “Referência de argumento” para o recurso com o qual você está trabalhando.list(...)
ou map(...)
.description
, type
, default
, validation
.description
em todas as variáveis, mesmo que você julgue ser óbvio (você precisará disso, no futuro).number
, string
, list(...)
, map(...)
, any
) sobre tipos específicos como object()
, a menos que você precise ter restrições estritas em cada chave.map(map(string))
se todos os elementos do mapa tiverem o mesmo tipo (ex. string
) ou podem ser convertidos para ele (ex. number
pode ser convertido para string
).any
para desabilitar a validação de tipo a partir de uma determinada profundidade ou quando vários tipos devem ser suportados.{}
às vezes é um mapa, mas às vezes é um objeto. Use tomap(...)
para criar um mapa porque não há como criar um objeto.{name}_{type}_{attribute}
, onde:{name}
um nome de recurso ou fonte de dados sem um prefixo de provedor. O {name}
do aws_subnet
é subnet
, para oaws_vpc
é vpc
.{type}
é um tipo de fontes de recursos.{attribute}
é um atributo retornado pelo output.{name}
e {type}
devem ser o mais genéricos possível (this
como prefixo deve ser omisso). Veja exemplos.description
para todos os outputs mesmo que você julgue que ser óbvio.sensitive
, a menos que você controle totalmente o uso desse output em todos os locais em todos os módulos.try()
(disponível desde o Terraform 0.13) ao invés de element(concat(...))
(abordagem herdada para a versão anterior a 0.13).output
security-group
:this
deve ser omisso no nome do output: