Cola de Terraform
Conceitos
- O que é o Terraform (en)
- Como o Terraform funciona (en)
- Casos de uso (en)
- Instalação (en)
- Fluxo de trabalho padrão (en)
- Tutoriais (en)
Linguagem
Resumo:
- Terraform utiliza HCL como linguagem
- HCL é uma linguagem de configuração construída por dois conceitos principais:
# Atributos
attribute = "value"
# Bloco
type ["value" ...] {
(outros atributos ou blocos)
}- Valores de atributos também podem ser expressões
# Operações entre valores
soma = 1 + valor
# Interpolação de strings
mensagem = "Olá, ${nome}"
# Utilização de funções
mensagem_gritando = upper(mensagem)Configuração do terraform
Referência: terraform (en)
terraform {
# Declara a versão requerida do terraform
required_version = "..."
# Configuração do backend
backend "<tipo>" {
...
}
}1.0.2, ou= 1.0.2!= 1.0.2> 2>= 2.0.5, < 3.0~> 1.0.2~> 2.1
Referência sobre backend: backend (en)
Provedor (provider)
Referência: Provedores (en)
terraform {
# Define a versão do provedor
required_providers {
<nome> = {
source = <endereço>
version = <versão>
}
}
}
# Configurações do provedor
provider "<nome>" {
...
}Configuração múltipla de um provedor
provider "aws" {
region = "us-east-1"
}
provider "aws" {
# Define um alias para esta configuração
alias = "west"
region = "us-east-2"
}
resource "aws_instance" "foo" {
# Declara que este recurso faz uso da configuração
# com alias "west" do provedor "aws"
provider = aws.west
...
}Passando um provedor alternativo para um módulo
Declarando o módulo:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
# Declara um provedor com alias para o módulo,
# já que módulos não possuem blocos provider
configuration_aliases = [aws.backup]
}
}
}
data "aws_ami" "amazon_linux" {
provider = aws.backup
}Ao utilizar o módulo:
provider "aws" {
alias = "west"
region = "us-west-2"
}
module "web-server" {
source = "./modules/web-server"
# Passa o provedor com alias para o módulo
providers = {
aws.backup = aws.west
}
}Recursos (resources)
Referência: recursos (en)
# Deve ser referenciado como "tipo.nome"
resource "<tipo>" "<nome>" {
...
# Permite definir timeouts para operações
# específicas. Disponível apenas em alguns
# recursos
timeouts {
create = "60m"
delete = "2h
}
}Fontes de dados (data source)
Referência: fontes de dados (en)
# Deve ser referenciado como "data.tipo.nome"
data "<tipo>" "<nome>" {
...
}Variáveis (variables)
Referência: variáveis (en)
# Deve ser referenciado como var.nome
variable "<nome>" {
type = string|number|bool|list(...)|tuple([...])|set(...)|map(...)|object({...})
description = "..."
# Opcionais
# Declara um valor padrão, caso nenhum valor seja definido
default = ...
# Marca o valor como sensível e previne que seja exibido
# em saída da CLI
sensitive = true
# Declara que o valor pode ser nulo
nullable = true
# Declara como o valor será validado
validation {
# Expressão que retorna verdadeiro ou falso
condition = ...
# Mensagem que será exibida, caso o valor não seja válido
error_message = "..."
}
}Definindo valores para variáveis no módulo raiz:
- Argumentos
-vare-var-fileda CLI - Arquivos
*.auto.tfvarse*.auto.tfvars.jsonem ordem léxicaterraform.tfvars.jsonterraform.tfvars
- Variáveis de ambiente (
TF_VAR_*) - O argumento
defaultno bloco da variável
Locais (locals)
Referência: locais (en)
locals {
# Deve ser referenciado como local.nome
<nome> = <valor>
...
}Podem existir múltiplos blocos locals
Saídas (outputs)
Referência: saídas (en)
output "<nome>" {
description = "..."
value = ...
# Marca o valor como sensível e previne que seja exibido
# em saída da CLI
sensitive = true
}Módulos (modules)
Referência: módulos (en)
Utilizando um módulo:
# Deve ser referenciado como module.nome
module "<nome>" {
source = "..."
version = "..."
...
}Meta-argumentos
Referência: meta-argumentos (en)
depends_on = [...]count = ...pode utilizarcount.indexfor_each = ...pode utilizareach.keyeeach.valuelifecycle {}provider = ...utilizado em recursos e fontes de dadosproviders = {}utilizado em módulos
Valores efêmeros
Referência: gerencie dados sensíveis (en)
Disponível a partir do terraform v1.10
- Argumento
ephemeral = trueem variáveis e saídas de módulos - Recursos efêmeros (ephemeral)
# Deve ser referenciado como ephemeral.nome
ephemeral "<tipo>" "<nome>" {
...
}Disponível a partir do terraform v1.11
- Argumento somente para escrita em recursos
Importando recursos
Referência: Importando (en)
Disponível a partir do terraform v1.12
# Deve estar em um arquivo com extensão .tfquery.hcl
# Deve ser referenciado como list.tipo.nome
list "<tipo>" "<nome>" {
provider = ...
config = ...
include_resource = ...
limit = ...
}import {
id = "<id do recurso>"
to = tipo.nome
}
resource "<tipo>" "<nome>" {
...
}Alterando o estado
Referência: estado (en)
Disponível a partir do terraform v1.7
# Declara um recurso como removido
removed {
from = tipo.nome
lifecycle {
destroy = false
}
}
# Declara um recurso como movido
moved {
from = <endereço antigo>
to = <endereço novo>
}Ações (action)
Referência: ações (en)
Disponível a partir do terraform v1.14
action "<tipo>" "<nome>" {
config {
...
}
}Validações
Referência: valide sua configuração (en)
Disponível a partir do terraform v1.5
check "<nome>" {
data "<tipo>" "<nome>" {
...
}
assert {
condition = ...
error_message = "..."
}
}Teste da configuração
Referência: Testes (en)
Disponível a partir do terraform v1.6
# Deve estar em um arquivo com extensão .tftest.hcl
mock_provider "<nome>" {}
run "<nome>" {
command = ...
assert {
condition = ...
error_message = "..."
}
}Expressões
Referência: expressões (en)
# String
"Olá"
# String heredoc
<<EOT
Essa string
pode abranger
várias linhas
EOT
<<-EOT
Essa string
pode ser identada
EOT
# Interpolação
"Olá, ${var.nome}"
# Diretivas
"Olá, %{ if var.name != "" }${ var.name }%{ else }unnamed%{ endif }"
<<EOT
%{ for ip in aws_instance.exemplo[*].private_ip }
server ${ip}
%{ endfor }
EOT- Aritméticos:
+,-,*,/e% - Igualdade:
==e!= - Comparação:
||,&&e!
<condição> ? <valor se verdadeiro> : <valor se falso># Criando uma tupla
[for <variável> in <coleção> : <resultado>]
# Criando um objeto
{for <variável> in {coleção} : <chave> => <valor>}
# Filtrando elementos
[for <variável> in <coleção> : <resultado> if <condição>]
{for <variável> in {coleção} : <chave> => <valor> if <condição>}
# Agrupando na mesma chave
{for <variável> in {coleção} : <chave> => <valor>...}# Equivalente a [for o in <coleção> : o.<atributo>]
<coleção>[*].<atributo>resource "<tipo>" "<valor>" {
dynamic "<bloco>" {
for_each = <coleção>
content {
...
}
}
}Funções
Referência: funções (en)
# Executando funções internas
<nome>(<argumentos>...)
# Funções de provedores
# Disponível a partir do terraform v1.8
provider::<nome provedor>::<nome função>(<argumentos>...)Numéricas
| Função | Versão do Terraform | Exemplo |
|---|---|---|
abs(n) | v0.10.7 | abs(-5) # 5 |
ceil(n) | v0.10 | ceil(4.2) # 5 |
floor(n) | v0.10 | floor(4.8) # 4 |
log(n, base) | v0.10 | log(16, 2) # 4 |
max(n...) | v0.10 | max(5, 12, 9) # 12 |
min(n...) | v0.10 | min(5, 12, 9) # 5 |
parseint(s, base) | v0.12.10 | parseint("FF", 16) # 255 |
pow(n, exp) | v0.10 | pow(2, 3) # 8 |
signum(n) | v0.6.12 | signum(-42) # -1 |
Strings
| Função | Versão do Terraform | Exemplo |
|---|---|---|
chomp(s) | v0.9.3 | chomp("hello\n") # "hello" |
endswith(s, suffix) | v1.3.0 | endswith("arquivo.txt", ".txt") # true |
format(s, values...) | v0.4 | format("id-%03d", 7) # "id-007" |
formatlist(s, values...) | v0.5.1 | formatlist("srv-%02d", [1,2,3]) # ["srv-01","srv-02","srv-03"] |
indent(n, s) | v0.10.5 | indent(2, "a\nb") # " a\n b" |
join(sep, list) | v0.3 | join(",", ["a","b","c"]) # "a,b,c" |
lower(s) | v0.6.5 | lower("HELLO") # "hello" |
regex(pattern, s) | v0.12.7 | regex("[0-9]+", "id=42") # "42" |
regexall(pattern, s) | v0.12.7 | regexall("[0-9]+", "a1b22") # ["1","22"] |
replace(s, substr, repl) | v0.4 | replace("hello world","world","terraform") # "hello terraform" |
split(sep, s) | v0.4 | split(",", "a,b,c") # ["a","b","c"] |
startswith(s, prefix) | v1.3.0 | startswith("terraform", "terra") # true |
strcontains(s, substr) | v1.5.0 | strcontains("terraform", "form") # true |
strrev(s) | v0.12 | strrev("abc") # "cba" |
substr(s, offset, length) | v0.9.2 | substr("terraform",0,4) # "terr" |
templatestring(template, vars) | v1.9.0 | templatestring("hello ${name}", {name="ana"}) # "hello ana" |
title(s) | v0.7.8 | title("hello world") # "Hello World" |
trim(s, cutset) | v0.12.17 | trim("--hello--","-") # "hello" |
trimprefix(s, prefix) | v0.12.17 | trimprefix("dev-app","dev-") # "app" |
trimsuffix(s, suffix) | v0.12.17 | trimsuffix("file.txt",".txt") # "file" |
trimspace(s) | v0.6.11 | trimspace(" hello ") # "hello" |
upper(s) | v0.6.5 | upper("hello") # "HELLO" |
Coleções
| Função | Versão do Terraform | Exemplo |
|---|---|---|
alltrue(list) | v0.14 | alltrue([true, true, false]) # false |
anytrue(list) | v0.15 | anytrue([false, false, true]) # true |
chunklist(list, size) | v0.10.8 | chunklist(["a","b","c","d"], 2) # [["a","b"],["c","d"]] |
coalesce(a...) | v0.6.7 | coalesce("", "b") # "b" |
coalescelist(lists...) | v0.9.4 | coalescelist([], ["a","b"]) # ["a","b"] |
compact(list) | v0.6.4 | compact(["a","", "b"]) # ["a","b"] |
concat(lists...) | v0.12 | concat(["a"], ["b","c"]) # ["a","b","c"] |
contains(collection, value) | v0.12 | contains(["a","b","c"], "b") # true |
distinct(list) | v0.7 | distinct(["a","b","a"]) # ["a","b"] |
element(list, index) | v0.3.5 | element(["a","b","c"], 1) # "b" |
flatten(list) | v0.10.3 | flatten([["a","b"],["c"]]) # ["a","b","c"] |
index(list, value) | v0.6.4 | index(["a","b","c"], "b") # 1 |
keys(map) | v0.12 | keys({a=1,b=2}) # ["a","b"] |
length(collection) | v0.5 | length(["a","b","c"]) # 3 |
lookup(map, key, default) | v0.1 | lookup({a=1}, "b", 0) # 0 |
matchkeys(values, keys, searchset) | v0.9.4 | matchkeys(["v1","v2"], ["k1","k2"], ["k2"]) # ["v2"] |
merge(maps...) | v0.7 | merge({a=1}, {b=2}) # {a=1,b=2} |
one(list) | v0.15 | one(["only"]) # "only" |
range(max) | v0.12.2 | range(3) # [0,1,2] |
reverse(list) | v0.12 | reverse(["a","b","c"]) # ["c","b","a"] |
setintersection(sets...) | v0.12 | setintersection(["a","b"], ["b","c"]) # ["b"] |
setproduct(sets...) | v0.12 | setproduct(["a","b"], [1,2]) # [["a",1],["a",2],["b",1],["b",2]] |
setsubtract(set1, set2) | v0.13 | setsubtract(["a","b","c"], ["b"]) # ["a","c"] |
setunion(sets...) | v0.12 | setunion(["a","b"], ["b","c"]) # ["a","b","c"] |
slice(list, start, end) | v0.9 | slice(["a","b","c","d"], 1, 3) # ["b","c"] |
sort(list) | v0.7 | sort(["c","a","b"]) # ["a","b","c"] |
sum(list) | v0.13 | sum([1,2,3]) # 6 |
transpose(map(list(string))) | v0.12 | transpose({a=["x","y"], b=["x","z"]}) # {"x"=["a","b"],"y"=["a"],"z"=["b"]} |
values(map) | v0.12 | values({a=1,b=2}) # [1,2] |
zipmap(keys, values) | v0.7.8 | zipmap(["a","b"], [1,2]) # {a=1,b=2} |
Codificação
| Função | Versão do Terraform | Exemplo |
|---|---|---|
base64decode(s) | v0.6.4 | base64decode("SGVsbG8=") # "Hello" |
base64encode(s) | v0.6.4 | base64encode("Hello") # "SGVsbG8=" |
base64gzip(s) | v0.10.3 | base64gzip("hello") # "H4sIAAAAA..." |
csvdecode(s) | v0.12 | csvdecode("name,age\nana,30") # [{name="ana",age="30"}] |
jsondecode(s) | v0.12 | jsondecode("{\"a\":1}") # {a=1} |
jsonencode(v) | v0.12 | jsonencode({a=1}) # "{\"a\":1}" |
textdecodebase64(s, encoding) | v0.15 | textdecodebase64("SGVsbG8=", "UTF-8") # "Hello" |
textencodebase64(s, encoding) | v0.15 | textencodebase64("Hello", "UTF-8") # "SGVsbG8=" |
urlencode(s) | v0.10.3 | urlencode("a b") # "a%20b" |
yamldecode(s) | v0.12.2 | yamldecode("a: 1") # {a=1} |
yamlencode(v) | v0.12.2 | yamlencode({a=1}) # "a: 1\n" |
Sistemas de Arquivo
| Função | Versão do Terraform | Exemplo |
|---|---|---|
abspath(path) | v0.12.4 | abspath("modules/vpc") # "/home/user/project/modules/vpc" |
dirname(path) | v0.9.3 | dirname("/tmp/file.txt") # "/tmp" |
pathexpand(path) | v0.8.5 | pathexpand("~/.config") # /home/user/.config |
basename(path) | v0.9.3 | basename("/tmp/file.txt") # "file.txt" |
file(path) | v0.1 | file("${path.module}/config.txt") # conteúdo do arquivo |
fileexists(path) | v0.12 | fileexists("config.yaml") # true |
fileset(path, pattern) | v0.12.8 | fileset("configs", "*.yaml") # ["a.yaml","b.yaml"] |
filebase64(path) | v0.12 | filebase64("script.sh") # "IyEvYmluL2Jhc2gK..." |
templatefile(path, vars) | v0.12 | templatefile("config.tftpl", {name="app"}) |
Data e Hora
| Função | Versão do Terraform | Exemplo |
|---|---|---|
formatdate(layout, timestamp) | v0.12 | formatdate("YYYY-MM-DD", "2024-01-02T15:04:05Z") # "2024-01-02" |
plantimestamp() | v1.5 | plantimestamp() # "2026-03-16T12:00:00Z" |
timeadd(timestamp, duration) | v0.11.2 | timeadd("2024-01-01T00:00:00Z", "24h") # "2024-01-02T00:00:00Z" |
timecmp(timestamp_a, timestamp_b) | v1.3 | timecmp("2024-01-01T00:00:00Z","2024-01-02T00:00:00Z") # -1 |
timestamp() | v0.8 | timestamp() # "2026-03-16T12:34:56Z" |
Hash e Criptografia
| Função | Versão do Terraform | Exemplo |
|---|---|---|
base64sha256(s) | v0.6.11 | base64sha256("hello") # "LPJNul+wow4m..." |
base64sha512(s) | v0.9.5 | base64sha512("hello") # "m3HSJL1i..." |
bcrypt(s, cost) | v0.9.7 | bcrypt("secret", 10) # "$2a$10$..." |
filebase64sha256(path) | v0.12 | filebase64sha256("script.sh") # "47DEQpj8HBSa..." |
filebase64sha512(path) | v0.12 | filebase64sha512("script.sh") # "z4PhNX7vuL3x..." |
filesmd5(path) | v0.12 | filesmd5("script.sh") # "2fd4e1c67a2d..." |
filesha1(path) | v0.12 | filesha1("script.sh") # "3aa8bfae18f2..." |
filesha256(path) | v0.12 | filesha256("script.sh") # "9f86d081884c..." |
filesha512(path) | v0.12 | filesha512("script.sh") # "cf83e1357eef..." |
md5(s) | v0.6.12 | md5("hello") # "5d41402abc4b2a76b9719d911017c592" |
rsadecrypt(cipher, privatekey) | v0.11.2 | rsadecrypt(file("./ciphertext), file("privatekey.pem)) # "Olá, mundo!" |
sha1(s) | v0.6.9 | sha1("hello") # "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d" |
sha256(s) | v0.6.10 | sha256("hello") # "2cf24dba5fb0a..." |
sha512(s) | v0.12 | sha512("hello") # "9b71d224bd62..." |
uuid() | v0.6.13 | uuid() # "3b12f1df-5232-4e0f-9b0e-3c3c9f0f0e91" |
uuidv5(namespace, name) | v0.12.2 | uuidv5("dns","example.com") # "cfbff0d1-9375-5685-968c-48ce8b15ae17" |
Redes IP
| Função | Versão do Terraform | Exemplo |
|---|---|---|
cidrhost(prefix, hostnum) | v0.6.6 | cidrhost("10.0.0.0/24", 5) # "10.0.0.5" |
cidrnetmask(prefix) | v0.6.6 | cidrnetmask("10.0.0.0/24") # "255.255.255.0" |
cidrsubnet(prefix, newbits, netnum) | v0.6.6 | cidrsubnet("10.0.0.0/16", 8, 2) # "10.0.2.0/24" |
cidrsubnets(prefix, newbits...) | v0.12.10 | cidrsubnets("10.0.0.0/16", 8, 8) # ["10.0.0.0/24","10.0.1.0/24"] |
Conversão de tipos
| Função | Versão do Terraform | Exemplo |
|---|---|---|
tobool(v) | v0.12 | tobool("true") # true |
tonumber(v) | v0.12 | tonumber("42") # 42 |
tostring(v) | v0.12 | tostring(42) # "42" |
tolist(v) | v0.12 | tolist(["a","b"]) # ["a","b"] |
toset(v) | v0.12 | toset(["a","b","a"]) # ["a","b"] |
tomap(v) | v0.12 | tomap({a=1, b=2}) # {a=1, b=2} |
Utilidades
| Função | Versão do Terraform | Exemplo |
|---|---|---|
can(expr) | v0.12.20 | can(regex("[0-9]+", "abc")) # false |
try(exprs...) | v0.12.20 | try(var.obj.name, "default") # "default" |
ephemeralasnull(v) | v1.10 | ephemeralasnull(var.tmp) # null (se valor efêmero) |
issensitive(v) | v1.8 | issensitive(var.secret) # true |
nonsensitive(v) | v0.15 | nonsensitive(var.secret) |
sensitive(v) | v0.15 | sensitive("secret") |
type(v) | v1.0 | type({a=1}) # object({a=number}) |
Links úteis
CLI
Subcomandos principais
# Prepara o diretório atual
terraform init [opções]
# Checa se a configuração é válida
terraform validate [opções]
# Reformata a configuração no estilo padrão
terraform fmt [opções] [alvo...]
# Mostra as mudanças requeridas pela configuração atual
terraform plan [opções]
# Cria ou atualiza a infraestrutura
terraform apply [opções] [arquivo]
# Destroi infraestrutura criada anteriormente
terraform destroy [opções]Init
Referência: init (en)
Uso: terraform init [opções]
-upgradeatualiza módulos e plugins-backend-config=(<atributo>=<valor>|<arquivo>)completa a configuração do backend-migrate-statetenta migrar o estado para o novo backend
Validate
Referência: validate (en)
Uso: terraform validate [opções]
Fmt
Referência: fmt (en)
Uso: terraform fmt [opções] [alvo...]
-checkapenas checa se a configuração está formatada-diffmostra o diff das modificações-list=falsenão mostra a lista de arquivos inconsistentes
Plan
Referência: plan (en)
Uso: terraform plan [opções]
-var <nome>=<valor>define o valor de uma variável-var-file=<arquivo>define o valor de variáveis através de um arquivo.tfvars-out=<arquivo>salva o plano gerado em um arquivo-target=<endereço>foca apenas no recurso em em recursos que ele depende-destroycria um plano pra remover os recursos-invoke=action.<tipo>.<nome>cria um plano para uma ação
Apply
Referência: apply (en)
Uso: terraform apply [opções] [arquivo]
-auto-approvepula a aprovação
Destroy
Referência: destroy (en)
Uso: terraform destroy [opções]
Outros subcomandos
# Permite testar expressões em um prompt interativo
terraform console [opções]
# Exibe o estado atual ou um plano
terraform show [opções] [arquivo]
# Mostra informações sobre os provedores requeridos
terraform providers
# Mostra informações sobre os módulos
# Disponível a partir do terraform v1.10
terraform modules
# Permite alterar o estado
terraform state <subcomando> [opções] [argumentos]
# Permite utilizar workspaces
terraform workspace <subcomando> [opções] [argumentos]Console
Referência: console (en)
Uso: terraform console [opções]
-var <nome>=<valor>define o valor de uma variável-var-file=<arquivo>define o valor de variáveis através de um arquivo.tfvars-plancria um plano e permite avaliar expressões como se o plano já estivesse aplicado
Show
Referência: show (en)
Uso: terraform show [opções] [arquivo]
Providers
Referência: providers (en)
Uso: terraform providers
Modules
Referência: modules (en)
Uso: terraform modules
State
Referência: state (en)
Uso: terraform state <subcomando> [opções] [argumentos]
list [opções] [endereços...]lista os recursos-id=<id>exibe o endereço do recurso com idid
mv [opções] <origem> <destino>move o endereço de um recurso-dry_runsimula a operação
pullbaixa o e exibe o estadorm [opções] <endereços>...remove os recursos do estado-dry_runsimula a operação
show [opções] <endereço>exibe os atributos de um recurso
Workspace
Referência: workspace (en)
Uso: terraform workspace <subcomando> [opções] [argumentos]
listlista todos os workspacesselect [opções] <nome>seleciona um workspace-or-createcria o workspace, caso não exista
new [opções] <nome>cria um novo workspacedelete [opções] <nome>apaga um workspace-forceapaga o workspace mesmo que o estado não esteja vazio
showmostra o workspace atual
HCP Terraform
Referência: O que é HCP Terraform? (en)
terraform {
cloud {
organization = "..."
workspaces {
project = "..."
name = "..."
}
}
}Linguagem
Referência: stacks (en)
# Deve estar em um arquivo com extensão .tfcomponent.hcl
required_providers {
<nome_local> = {
source = "..."
version = "..."
}
}
provider "<nome_local>" "<nome>" {
config {
...
}
}
variable "<nome>" {
...
}
locals {
...
}
removed {
source = "..."
from = ...
providers = {
...
}
}
component "<nome>" {
source = "..."
inputs = {
...
}
providers = {
<nome> = provider.nome_local.nome
}
}
output "<nome>" {
...
}# Deve estar em um arquivo com extensão .tfdeploy.hcl
# Deve ser referenciado como store.varset.nome
store "varset" "<nome>" {
id = "..."
name = "..."
category = "..."
}
# Deve ser referenciado como identity_token.tipo.jwt
identity_token "<tipo>" {
audience = [...]
}
# Deve ser referenciado como deployment_auto_approve.nome
deployment_auto_approve "<nome>" {
check {
condition = ...
reason = "..."
}
}
# Deve ser referenciado como deployment_group.nome
deployment_group "<nome>" {
auto_approve_checks = [
deployment_auto_approve.nome
]
}
# Deve ser referenciado como upstream_input.nome
upstream_input "<nome>" {
type = "..."
source = "..."
}
locals {
...
}
deployment "<nome>" {
inputs = {
...
}
deployment_group = deployment_group.nome
}
publish_output "<nome>" {
description = "..."
value = ...
}CLI
Referência: terraform stacks (en)
# Inicializa a stack
terraform stacks init [opções]
# Cria uma stack
terraform stacks create -organization-name ... -project-name ... -stack-name ... [opções]
# Lista as stacks
terraform stacks list -organization-name ... [opções]
# Valida a stack
terraform stacks validate [opções]
# Formata a stack
terraform stacks fmt [opções] [arquivo...]
# Exibe as versões dos provedores da stack
terraform stacks provider-lock [opções]
# Gerencia os deployments
terraform stacks deployment-run <subcomando>
# Gerencia os grupos de deployment
terraform stacks deployment-group <subcomando> [opções]
# Gerencia configurações
terraform stacks configuration <subcomando> [opções]Stack init
Referência: stacks init (en)
Uso: terraform stacks init [opções]
-upgradeAtualiza módulos e plugins
Stack create
Referência: stacks create (en)
Uso: terraform stacks create -organization-name ... -project-name ... -stack-name ... [opções]
-with-templateGera configuração inicial
Stack list
Referência: stacks list (en)
Uso: terraform stacks list -organization-name ... [opções]
Stack validate
Referência: stacks validate (en)
Uso: terraform stacks validate [opções]
Stack fmt
Referência: stacks fmt (en)
Uso: terraform stacks fmt [opções] [arquivo...]
Stack provider-lock
Referência: stacks provider-lock (en)
Uso: terraform stacks provider-lock [opções]
Stack deployment-run
Referência: stacks deployment-run (en)
Uso: terraform stacks deployment-run <subcomando>
list [opções]lista deployments em um grupo de deploymentapprove-all-plans -deployment-run-id ...aprova todos os planos para um deploymentcancel -deployment-run-id ...cancela um deploymentwatch -deployment-run-id ...acompanha o progresso de um deployment
Stack deployment-group
Referência: stacks deployment-group (en)
Uso: terraform stacks deployment-group <subcomando>
list [opções]lista grupos de deployment em uma configuraçãoapprove-all-plans <identificação>aprova todos os planos para um grupo de deployment-deployment-group-id ...-organization-name ... -project-name ... -stack-name ... -deployment-group-name ...
rerun -deployment-names ... <identificação>reexecuta deployments dentro de um grupo de deployment-deployment-group-id ...-organization-name ... -project-name ... -stack-name ... -deployment-group-name ...
watch <identificação>acompanha o progresso de um deployment-deployment-group-id ...-organization-name ... -project-name ... -stack-name ... -deployment-group-name ...
Stack configuration
Referência: stacks configuration (en)
Uso: terraform stacks configuration <subcomando>
list <identificação>lista as versões de configurações de uma stack-stack-id ...-organization-name ... -project-name ... -stack-name ...
upload <identificação>faz o upload das configurações de componente e deployment-stack-id ...-organization-name ... -project-name ... -stack-name ...
fetch <identificação>faz o download da última configuração da stack-stack-id ...-organization-name ... -project-name ... -stack-name ...
watch <identificação>acompanha o progresso do deployment da stack-stack-id ...-organization-name ... -project-name ... -stack-name ...
OpenTofu
Incompatibilidades:
- Meta-argumento
enabled