English summary: IaC patterns (modularization, pipelines, guardrails) for Terraform/Crossplane/Pulumi.
Infrastructure as Code Patterns: Terraform, Ansible e o Fim da Configuração Manual
Antes de Infrastructure as Code (IaC), provisionar infraestrutura era assim:
- SSH no servidor
- Rodar comandos manualmente
- Esquecer o que fez
- Servidor quebra, você não sabe reproduzir
IaC revoluciona isso: infraestrutura é código. Versionado no Git, testado em CI/CD, aplicado automaticamente.
O Conceito: Declarativo vs Imperativo
Imperativo (Shell Scripts - ❌)
#!/bin/bash
sudo apt-get update
sudo apt-get install nginx
sudo systemctl start nginx
Problema: Não lida com estado. Se rodar 2x, pode quebrar.
# O que quero (desired state)
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
Vantagem: Terraform compara estado atual vs desejado e aplica apenas o diff.
Exemplo: AWS EC2 + RDS
# provider.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
# main.tf
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "main-vpc"
}
}
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
subnet_id = aws_subnet.public.id
user_data = file("./bootstrap.sh")
tags = {
Name = "web-server"
}
}
resource "aws_db_instance" "postgres" {
identifier = "mydb"
engine = "postgres"
instance_class = "db.t3.micro"
allocated_storage = 20
username = var.db_username
password = var.db_password
}
# outputs.tf
output "web_ip" {
value = aws_instance.web.public_ip
}
Workflow
terraform init
terraform plan
terraform apply
terraform destroy
State Management
Terraform guarda estado em terraform.tfstate:
{
"resources": [
{
"type": "aws_instance",
"name": "web",
"provider": "aws",
"instances": [{
"attributes": {
"id": "i-1234567890abcdef0",
"public_ip": "54.123.45.67"
}
}]
}
]
}
Problema: State local não funciona em times. Solução: Remote state (S3, Terraform Cloud).
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "us-east-1"
}
}
Ansible: Configuration Management
Terraform provisiona recursos (criar VM). Ansible configura o que roda dentro (instalar pacotes, configurar apps).
Playbook: Deploy Node.js App
---
- name: Deploy Node.js app
hosts: webservers
become: yes
tasks:
- name: Install Node.js
apt:
name: nodejs
state: present
update_cache: yes
- name: Install npm
apt:
name: npm
state: present
- name: Copy app files
copy:
src: ./app
dest: /opt/myapp
- name: Install dependencies
npm:
path: /opt/myapp
state: present
- name: Start app with PM2
command: pm2 start /opt/myapp/index.js
args:
creates: /root/.pm2/pm2.pid
- name: Configure nginx
template:
src: ./templates/nginx.conf.j2
dest: /etc/nginx/sites-available/myapp
notify:
- Restart nginx
handlers:
- name: Restart nginx
service:
name: nginx
state: restarted
ansible-playbook -i inventory.ini playbook.yml
Inventory (Hosts)
[webservers]
web1 ansible_host=54.123.45.67
web2 ansible_host=54.123.45.68
[databases]
db1 ansible_host=54.123.45.69
[webservers:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
# Terraform provisiona a VM
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
provisioner "remote-exec" {
inline = [
"sudo apt-get update"
]
}
# Trigger Ansible após criar a VM
provisioner "local-exec" {
command = "ansible-playbook -i '${self.public_ip},' playbook.yml"
}
}
Pulumi: IaC em Linguagens Reais
Alternativa a Terraform: escreva IaC em TypeScript/Python/Go.
import * as aws from "@pulumi/aws";
const vpc = new aws.ec2.Vpc("main-vpc", {
cidrBlock: "10.0.0.0/16"
});
const subnet = new aws.ec2.Subnet("public-subnet", {
vpcId: vpc.id,
cidrBlock: "10.0.1.0/24",
availabilityZone: "us-east-1a"
});
const instance = new aws.ec2.Instance("web-server", {
ami: "ami-0c55b159cbfafe1f0",
instanceType: "t2.micro",
subnetId: subnet.id,
tags: {
Name: "web-server"
}
});
export const publicIp = instance.publicIp;
Vantagem: Lógica complexa (loops, condicionais) é mais natural em TS.
const instances = [];
for (let i = 0; i < 5; i++) {
instances.push(new aws.ec2.Instance(`web-${i}`, {
ami: "ami-0c55b159cbfafe1f0",
instanceType: "t2.micro"
}));
}
Padrões e Best Practices
1. Módulos Reutilizáveis
# modules/vpc/main.tf
variable "cidr_block" {}
variable "name" {}
resource "aws_vpc" "this" {
cidr_block = var.cidr_block
tags = { Name = var.name }
}
output "vpc_id" {
value = aws_vpc.this.id
}
# root main.tf (usa módulo)
module "prod_vpc" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
name = "production"
}
2. Workspaces (Environments)
terraform workspace new staging
terraform workspace new production
terraform workspace select production
resource "aws_instance" "web" {
instance_type = terraform.workspace == "production" ? "t3.large" : "t2.micro"
}
3. Secrets Management
❌ NUNCA commite secrets no Git:
# ❌ ERRADO
resource "aws_db_instance" "db" {
password = "hardcoded_password_123"
}
✅ Use variáveis de ambiente ou vaults:
variable "db_password" {
sensitive = true
}
resource "aws_db_instance" "db" {
password = var.db_password
}
export TF_VAR_db_password=$(aws secretsmanager get-secret-value --secret-id prod/db/password --query SecretString --output text)
terraform apply
Testing IaC
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
)
func TestTerraformAws(t *testing.T) {
opts := &terraform.Options{
TerraformDir: "../",
}
defer terraform.Destroy(t, opts)
terraform.InitAndApply(t, opts)
instanceID := terraform.Output(t, opts, "instance_id")
assert.NotEmpty(t, instanceID)
}
Ansible: Molecule
molecule init scenario
molecule test
Conclusão
IaC não é opcional em 2026. É a base de:
- Ambientes reproduzíveis
- Disaster recovery rápido
- Compliance auditável
- Escalabilidade horizontal
Se você ainda faz SSH manual para configurar servidores, você está 15 anos atrasado.
Referências
- HashiCorp - "Terraform Best Practices" - https://www.terraform.io/docs/
- Red Hat - "Ansible Documentation" - https://docs.ansible.com/
- Pulumi Documentation - https://www.pulumi.com/docs/
- "Infrastructure as Code" - Kief Morris - O'Reilly
Caso real e métricas
Cenário: Fintech evitando snowflake infra.
Fintech Orion modularizou IaC (Foundation, Network, App) e criou pipelines com políticas OPA.
| Métrica | Antes | Depois |
|---|
| Tickets manuais de infra | 120/mês | 8 |
| Mudanças não-reviewadas | 47% | 0 |
| Tempo para novo ambiente | 4 dias | 4h |
Checklist de implementação
- Modularize recursos e reuse via registries.
- Implemente pipelines com plan/apply automático.
- Aplique policies e drift detection.
- Documente contratos entre módulos.
Referências rápidas
- HashiCorp IaC best practices
- Crossplane compositions guide
12. Estado, módulos e fronteiras
Infrastructure as Code começa a dar certo quando o time para de tratar infraestrutura
como se fosse só um script bonito. O coração do assunto é o estado. Um recurso criado
sem estado confiável vira ruído. Um módulo sem fronteira vira acoplamento. Um pipeline
sem validação vira deploy manual com fantasia de automação.
Por isso a pergunta certa não é qual ferramenta é melhor. A pergunta é quais fronteiras
precisam existir para que o ambiente possa ser reproduzido, auditado e destruído sem
drama. Se o time consegue responder isso, o resto vira implementação. Se não consegue, a
ferramenta apenas esconde a falta de processo.
terraform {
required_version = ">= 1.7.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
backend "s3" {
bucket = "my-org-terraform-state"
key = "prod/network/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}
provider "aws" {
region = var.region
}
module "network" {
source = "./modules/network"
cidr_block = var.cidr_block
environment = var.environment
project_name = var.project_name
}
---
- name: Install and configure app host
hosts: web
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install nginx
apt:
name: nginx
state: present
- name: Render nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/app.conf
notify: restart nginx
- name: Enable site
file:
src: /etc/nginx/sites-available/app.conf
dest: /etc/nginx/sites-enabled/app.conf
state: link
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
import { execSync } from 'node:child_process';
export function runTerratestSuite() {
execSync('terraform init', { stdio: 'inherit' });
execSync('terraform plan -out=tfplan', { stdio: 'inherit' });
execSync('terraform show -json tfplan > plan.json', { stdio: 'inherit' });
execSync('go test ./test/infra -v', { stdio: 'inherit' });
}
export function assertNoDrift() {
const output = execSync('terraform plan -detailed-exitcode', {
stdio: 'pipe',
}).toString();
if (output.includes('No changes.')) {
return true;
}
throw new Error('drift detected');
}
13. Testing, policy e aprovação
Testing de infraestrutura precisa ser visto como segurança operacional, não como
frescura de pipeline. O objetivo é evitar surpresas de custo, indisponibilidade e
dependência quebrada antes que o plano vire apply. Quando os testes existem, o time
deixa de confiar em sensação e passa a confiar em evidência.
A mesma lógica vale para policy as code. Se uma regra é importante o bastante para ser
lembrada por uma pessoa, ela é importante o suficiente para ser escrita. Isso reduz
ambiguidade e transforma o revisor em alguém que verifica exceções, não que memorize
regras.
- Valide o plano de mudança no CI para que o pipeline carregue a disciplina do time.
- Valide o plano de mudança na revisão para que o pipeline carregue a disciplina do time.
- Valide o plano de mudança no pre-merge para que o pipeline carregue a disciplina do time.
- Valide o plano de mudança no rollout para que o pipeline carregue a disciplina do time.
- Valide o módulo Terraform no CI para que o pipeline carregue a disciplina do time.
- Valide o módulo Terraform na revisão para que o pipeline carregue a disciplina do time.
- Valide o módulo Terraform no pre-merge para que o pipeline carregue a disciplina do time.
- Valide o módulo Terraform no rollout para que o pipeline carregue a disciplina do time.
- Valide o playbook Ansible no CI para que o pipeline carregue a disciplina do time.
- Valide o playbook Ansible na revisão para que o pipeline carregue a disciplina do time.
- Valide o playbook Ansible no pre-merge para que o pipeline carregue a disciplina do time.
- Valide o playbook Ansible no rollout para que o pipeline carregue a disciplina do time.
- Valide a policy OPA no CI para que o pipeline carregue a disciplina do time.
- Valide a policy OPA na revisão para que o pipeline carregue a disciplina do time.
- Valide a policy OPA no pre-merge para que o pipeline carregue a disciplina do time.
- Valide a policy OPA no rollout para que o pipeline carregue a disciplina do time.
- Valide a promoção para prod no CI para que o pipeline carregue a disciplina do time.
- Valide a promoção para prod na revisão para que o pipeline carregue a disciplina do time.
- Valide a promoção para prod no pre-merge para que o pipeline carregue a disciplina do time.
- Valide a promoção para prod no rollout para que o pipeline carregue a disciplina do time.
- Simule o plano de mudança no CI para que o pipeline carregue a disciplina do time.
- Simule o plano de mudança na revisão para que o pipeline carregue a disciplina do time.
- Simule o plano de mudança no pre-merge para que o pipeline carregue a disciplina do time.
- Simule o plano de mudança no rollout para que o pipeline carregue a disciplina do time.
- Simule o módulo Terraform no CI para que o pipeline carregue a disciplina do time.
- Simule o módulo Terraform na revisão para que o pipeline carregue a disciplina do time.
- Simule o módulo Terraform no pre-merge para que o pipeline carregue a disciplina do time.
- Simule o módulo Terraform no rollout para que o pipeline carregue a disciplina do time.
- Simule o playbook Ansible no CI para que o pipeline carregue a disciplina do time.
- Simule o playbook Ansible na revisão para que o pipeline carregue a disciplina do time.
- Simule o playbook Ansible no pre-merge para que o pipeline carregue a disciplina do time.
- Simule o playbook Ansible no rollout para que o pipeline carregue a disciplina do time.
- Simule a policy OPA no CI para que o pipeline carregue a disciplina do time.
- Simule a policy OPA na revisão para que o pipeline carregue a disciplina do time.
- Simule a policy OPA no pre-merge para que o pipeline carregue a disciplina do time.
- Simule a policy OPA no rollout para que o pipeline carregue a disciplina do time.
- Simule a promoção para prod no CI para que o pipeline carregue a disciplina do time.
- Simule a promoção para prod na revisão para que o pipeline carregue a disciplina do time.
- Simule a promoção para prod no pre-merge para que o pipeline carregue a disciplina do time.
- Simule a promoção para prod no rollout para que o pipeline carregue a disciplina do time.
- Bloqueie o plano de mudança no CI para que o pipeline carregue a disciplina do time.
- Bloqueie o plano de mudança na revisão para que o pipeline carregue a disciplina do time.
- Bloqueie o plano de mudança no pre-merge para que o pipeline carregue a disciplina do time.
- Bloqueie o plano de mudança no rollout para que o pipeline carregue a disciplina do time.
- Bloqueie o módulo Terraform no CI para que o pipeline carregue a disciplina do time.
- Bloqueie o módulo Terraform na revisão para que o pipeline carregue a disciplina do time.
- Bloqueie o módulo Terraform no pre-merge para que o pipeline carregue a disciplina do time.
- Bloqueie o módulo Terraform no rollout para que o pipeline carregue a disciplina do time.
- Bloqueie o playbook Ansible no CI para que o pipeline carregue a disciplina do time.
- Bloqueie o playbook Ansible na revisão para que o pipeline carregue a disciplina do time.
- Bloqueie o playbook Ansible no pre-merge para que o pipeline carregue a disciplina do time.
- Bloqueie o playbook Ansible no rollout para que o pipeline carregue a disciplina do time.
- Bloqueie a policy OPA no CI para que o pipeline carregue a disciplina do time.
- Bloqueie a policy OPA na revisão para que o pipeline carregue a disciplina do time.
- Bloqueie a policy OPA no pre-merge para que o pipeline carregue a disciplina do time.
- Bloqueie a policy OPA no rollout para que o pipeline carregue a disciplina do time.
- Bloqueie a promoção para prod no CI para que o pipeline carregue a disciplina do time.
- Bloqueie a promoção para prod na revisão para que o pipeline carregue a disciplina do time.
- Bloqueie a promoção para prod no pre-merge para que o pipeline carregue a disciplina do time.
- Bloqueie a promoção para prod no rollout para que o pipeline carregue a disciplina do time.
- Aprove o plano de mudança no CI para que o pipeline carregue a disciplina do time.
- Aprove o plano de mudança na revisão para que o pipeline carregue a disciplina do time.
- Aprove o plano de mudança no pre-merge para que o pipeline carregue a disciplina do time.
- Aprove o plano de mudança no rollout para que o pipeline carregue a disciplina do time.
- Aprove o módulo Terraform no CI para que o pipeline carregue a disciplina do time.
- Aprove o módulo Terraform na revisão para que o pipeline carregue a disciplina do time.
- Aprove o módulo Terraform no pre-merge para que o pipeline carregue a disciplina do time.
- Aprove o módulo Terraform no rollout para que o pipeline carregue a disciplina do time.
- Aprove o playbook Ansible no CI para que o pipeline carregue a disciplina do time.
- Aprove o playbook Ansible na revisão para que o pipeline carregue a disciplina do time.
- Aprove o playbook Ansible no pre-merge para que o pipeline carregue a disciplina do time.
- Aprove o playbook Ansible no rollout para que o pipeline carregue a disciplina do time.
- Aprove a policy OPA no CI para que o pipeline carregue a disciplina do time.
- Aprove a policy OPA na revisão para que o pipeline carregue a disciplina do time.
- Aprove a policy OPA no pre-merge para que o pipeline carregue a disciplina do time.
- Aprove a policy OPA no rollout para que o pipeline carregue a disciplina do time.
- Aprove a promoção para prod no CI para que o pipeline carregue a disciplina do time.
- Aprove a promoção para prod na revisão para que o pipeline carregue a disciplina do time.
- Aprove a promoção para prod no pre-merge para que o pipeline carregue a disciplina do time.
- Aprove a promoção para prod no rollout para que o pipeline carregue a disciplina do time.
- Registre o plano de mudança no CI para que o pipeline carregue a disciplina do time.
- Registre o plano de mudança na revisão para que o pipeline carregue a disciplina do time.
- Registre o plano de mudança no pre-merge para que o pipeline carregue a disciplina do time.
- Registre o plano de mudança no rollout para que o pipeline carregue a disciplina do time.
- Registre o módulo Terraform no CI para que o pipeline carregue a disciplina do time.
- Registre o módulo Terraform na revisão para que o pipeline carregue a disciplina do time.
- Registre o módulo Terraform no pre-merge para que o pipeline carregue a disciplina do time.
- Registre o módulo Terraform no rollout para que o pipeline carregue a disciplina do time.
- Registre o playbook Ansible no CI para que o pipeline carregue a disciplina do time.
- Registre o playbook Ansible na revisão para que o pipeline carregue a disciplina do time.
- Registre o playbook Ansible no pre-merge para que o pipeline carregue a disciplina do time.
- Registre o playbook Ansible no rollout para que o pipeline carregue a disciplina do time.
- Registre a policy OPA no CI para que o pipeline carregue a disciplina do time.
- Registre a policy OPA na revisão para que o pipeline carregue a disciplina do time.
- Registre a policy OPA no pre-merge para que o pipeline carregue a disciplina do time.
- Registre a policy OPA no rollout para que o pipeline carregue a disciplina do time.
- Registre a promoção para prod no CI para que o pipeline carregue a disciplina do time.
- Registre a promoção para prod na revisão para que o pipeline carregue a disciplina do time.
- Registre a promoção para prod no pre-merge para que o pipeline carregue a disciplina do time.
- Registre a promoção para prod no rollout para que o pipeline carregue a disciplina do time.
14. Segurança, custo e responsabilidade
Infraestrutura sem segurança de base cria incidentes previsíveis: acesso amplo demais,
state exposto, segredos versionados em claro e recursos criados sem tag de ownership.
Segurança não entra no final; ela entra na modelagem. O custo também. Um ambiente sem
limites e sem tags é uma máquina de gerar surpresas financeiras.
A solução é tratar tags, limites e políticas como parte do contrato. Toda coisa criada
precisa dizer quem é dono, quanto pode gastar e como será encerrada. Quando isso vira
hábito, o time deixa de descobrir o problema na fatura e passa a capturá-lo no PR.
- Proteja o state na criação para evitar exposição e custo invisível.
- Proteja o state na rotação para evitar exposição e custo invisível.
- Proteja o state na auditoria para evitar exposição e custo invisível.
- Proteja o state na revisão para evitar exposição e custo invisível.
- Proteja o state na limpeza para evitar exposição e custo invisível.
- Proteja o secret na criação para evitar exposição e custo invisível.
- Proteja o secret na rotação para evitar exposição e custo invisível.
- Proteja o secret na auditoria para evitar exposição e custo invisível.
- Proteja o secret na revisão para evitar exposição e custo invisível.
- Proteja o secret na limpeza para evitar exposição e custo invisível.
- Proteja o bucket de logs na criação para evitar exposição e custo invisível.
- Proteja o bucket de logs na rotação para evitar exposição e custo invisível.
- Proteja o bucket de logs na auditoria para evitar exposição e custo invisível.
- Proteja o bucket de logs na revisão para evitar exposição e custo invisível.
- Proteja o bucket de logs na limpeza para evitar exposição e custo invisível.
- Proteja a chave do provider na criação para evitar exposição e custo invisível.
- Proteja a chave do provider na rotação para evitar exposição e custo invisível.
- Proteja a chave do provider na auditoria para evitar exposição e custo invisível.
- Proteja a chave do provider na revisão para evitar exposição e custo invisível.
- Proteja a chave do provider na limpeza para evitar exposição e custo invisível.
- Proteja a role de execução na criação para evitar exposição e custo invisível.
- Proteja a role de execução na rotação para evitar exposição e custo invisível.
- Proteja a role de execução na auditoria para evitar exposição e custo invisível.
- Proteja a role de execução na revisão para evitar exposição e custo invisível.
- Proteja a role de execução na limpeza para evitar exposição e custo invisível.
- Classifique o state na criação para evitar exposição e custo invisível.
- Classifique o state na rotação para evitar exposição e custo invisível.
- Classifique o state na auditoria para evitar exposição e custo invisível.
- Classifique o state na revisão para evitar exposição e custo invisível.
- Classifique o state na limpeza para evitar exposição e custo invisível.
- Classifique o secret na criação para evitar exposição e custo invisível.
- Classifique o secret na rotação para evitar exposição e custo invisível.
- Classifique o secret na auditoria para evitar exposição e custo invisível.
- Classifique o secret na revisão para evitar exposição e custo invisível.
- Classifique o secret na limpeza para evitar exposição e custo invisível.
- Classifique o bucket de logs na criação para evitar exposição e custo invisível.
- Classifique o bucket de logs na rotação para evitar exposição e custo invisível.
- Classifique o bucket de logs na auditoria para evitar exposição e custo invisível.
- Classifique o bucket de logs na revisão para evitar exposição e custo invisível.
- Classifique o bucket de logs na limpeza para evitar exposição e custo invisível.
- Classifique a chave do provider na criação para evitar exposição e custo invisível.
- Classifique a chave do provider na rotação para evitar exposição e custo invisível.
- Classifique a chave do provider na auditoria para evitar exposição e custo invisível.
- Classifique a chave do provider na revisão para evitar exposição e custo invisível.
- Classifique a chave do provider na limpeza para evitar exposição e custo invisível.
- Classifique a role de execução na criação para evitar exposição e custo invisível.
- Classifique a role de execução na rotação para evitar exposição e custo invisível.
- Classifique a role de execução na auditoria para evitar exposição e custo invisível.
- Classifique a role de execução na revisão para evitar exposição e custo invisível.
- Classifique a role de execução na limpeza para evitar exposição e custo invisível.
- Limite o state na criação para evitar exposição e custo invisível.
- Limite o state na rotação para evitar exposição e custo invisível.
- Limite o state na auditoria para evitar exposição e custo invisível.
- Limite o state na revisão para evitar exposição e custo invisível.
- Limite o state na limpeza para evitar exposição e custo invisível.
- Limite o secret na criação para evitar exposição e custo invisível.
- Limite o secret na rotação para evitar exposição e custo invisível.
- Limite o secret na auditoria para evitar exposição e custo invisível.
- Limite o secret na revisão para evitar exposição e custo invisível.
- Limite o secret na limpeza para evitar exposição e custo invisível.
- Limite o bucket de logs na criação para evitar exposição e custo invisível.
- Limite o bucket de logs na rotação para evitar exposição e custo invisível.
- Limite o bucket de logs na auditoria para evitar exposição e custo invisível.
- Limite o bucket de logs na revisão para evitar exposição e custo invisível.
- Limite o bucket de logs na limpeza para evitar exposição e custo invisível.
- Limite a chave do provider na criação para evitar exposição e custo invisível.
- Limite a chave do provider na rotação para evitar exposição e custo invisível.
- Limite a chave do provider na auditoria para evitar exposição e custo invisível.
- Limite a chave do provider na revisão para evitar exposição e custo invisível.
- Limite a chave do provider na limpeza para evitar exposição e custo invisível.
- Limite a role de execução na criação para evitar exposição e custo invisível.
- Limite a role de execução na rotação para evitar exposição e custo invisível.
- Limite a role de execução na auditoria para evitar exposição e custo invisível.
- Limite a role de execução na revisão para evitar exposição e custo invisível.
- Limite a role de execução na limpeza para evitar exposição e custo invisível.
- Tagueie o state na criação para evitar exposição e custo invisível.
- Tagueie o state na rotação para evitar exposição e custo invisível.
- Tagueie o state na auditoria para evitar exposição e custo invisível.
- Tagueie o state na revisão para evitar exposição e custo invisível.
- Tagueie o state na limpeza para evitar exposição e custo invisível.
- Tagueie o secret na criação para evitar exposição e custo invisível.
- Tagueie o secret na rotação para evitar exposição e custo invisível.
- Tagueie o secret na auditoria para evitar exposição e custo invisível.
- Tagueie o secret na revisão para evitar exposição e custo invisível.
- Tagueie o secret na limpeza para evitar exposição e custo invisível.
- Tagueie o bucket de logs na criação para evitar exposição e custo invisível.
- Tagueie o bucket de logs na rotação para evitar exposição e custo invisível.
- Tagueie o bucket de logs na auditoria para evitar exposição e custo invisível.
- Tagueie o bucket de logs na revisão para evitar exposição e custo invisível.
- Tagueie o bucket de logs na limpeza para evitar exposição e custo invisível.
- Tagueie a chave do provider na criação para evitar exposição e custo invisível.
- Tagueie a chave do provider na rotação para evitar exposição e custo invisível.
- Tagueie a chave do provider na auditoria para evitar exposição e custo invisível.
- Tagueie a chave do provider na revisão para evitar exposição e custo invisível.
- Tagueie a chave do provider na limpeza para evitar exposição e custo invisível.
- Tagueie a role de execução na criação para evitar exposição e custo invisível.
- Tagueie a role de execução na rotação para evitar exposição e custo invisível.
- Tagueie a role de execução na auditoria para evitar exposição e custo invisível.
- Tagueie a role de execução na revisão para evitar exposição e custo invisível.
- Tagueie a role de execução na limpeza para evitar exposição e custo invisível.
- Revogue o state na criação para evitar exposição e custo invisível.
- Revogue o state na rotação para evitar exposição e custo invisível.
- Revogue o state na auditoria para evitar exposição e custo invisível.
- Revogue o state na revisão para evitar exposição e custo invisível.
- Revogue o state na limpeza para evitar exposição e custo invisível.
- Revogue o secret na criação para evitar exposição e custo invisível.
- Revogue o secret na rotação para evitar exposição e custo invisível.
- Revogue o secret na auditoria para evitar exposição e custo invisível.
- Revogue o secret na revisão para evitar exposição e custo invisível.
- Revogue o secret na limpeza para evitar exposição e custo invisível.
- Revogue o bucket de logs na criação para evitar exposição e custo invisível.
- Revogue o bucket de logs na rotação para evitar exposição e custo invisível.
- Revogue o bucket de logs na auditoria para evitar exposição e custo invisível.
- Revogue o bucket de logs na revisão para evitar exposição e custo invisível.
- Revogue o bucket de logs na limpeza para evitar exposição e custo invisível.
- Revogue a chave do provider na criação para evitar exposição e custo invisível.
- Revogue a chave do provider na rotação para evitar exposição e custo invisível.
- Revogue a chave do provider na auditoria para evitar exposição e custo invisível.
- Revogue a chave do provider na revisão para evitar exposição e custo invisível.
- Revogue a chave do provider na limpeza para evitar exposição e custo invisível.
- Revogue a role de execução na criação para evitar exposição e custo invisível.
- Revogue a role de execução na rotação para evitar exposição e custo invisível.
- Revogue a role de execução na auditoria para evitar exposição e custo invisível.
- Revogue a role de execução na revisão para evitar exposição e custo invisível.
- Revogue a role de execução na limpeza para evitar exposição e custo invisível.
15. Operação diária e drift
O maior sinal de maturidade em IaC é o grau de previsibilidade quando algo muda. Se o
time precisa rezar para que um apply não quebre algo escondido, o contrato ainda é
fraco. O ideal é que o estado seja reproduzível, o diff seja legível e o rollback seja
um caminho natural, não um ato heroico.
Drift em infraestrutura é um problema de processo antes de ser um problema de
ferramenta. Ele aparece quando alguém faz ajuste manual, quando a documentação fica para
depois ou quando o state remoto não é confiável. O antídoto é sempre a mesma tríade:
visibilidade, teste e ownership.
- Detecte o desvio de state no dashboard para que drift vire exceção, não rotina.
- Detecte o desvio de state no CI para que drift vire exceção, não rotina.
- Detecte o desvio de state na rotina para que drift vire exceção, não rotina.
- Detecte o desvio de state na auditoria para que drift vire exceção, não rotina.
- Detecte o recurso alterado manualmente no dashboard para que drift vire exceção, não rotina.
- Detecte o recurso alterado manualmente no CI para que drift vire exceção, não rotina.
- Detecte o recurso alterado manualmente na rotina para que drift vire exceção, não rotina.
- Detecte o recurso alterado manualmente na auditoria para que drift vire exceção, não rotina.
- Detecte o plano inconsistente no dashboard para que drift vire exceção, não rotina.
- Detecte o plano inconsistente no CI para que drift vire exceção, não rotina.
- Detecte o plano inconsistente na rotina para que drift vire exceção, não rotina.
- Detecte o plano inconsistente na auditoria para que drift vire exceção, não rotina.
- Detecte a exceção de produção no dashboard para que drift vire exceção, não rotina.
- Detecte a exceção de produção no CI para que drift vire exceção, não rotina.
- Detecte a exceção de produção na rotina para que drift vire exceção, não rotina.
- Detecte a exceção de produção na auditoria para que drift vire exceção, não rotina.
- Detecte o rollback no dashboard para que drift vire exceção, não rotina.
- Detecte o rollback no CI para que drift vire exceção, não rotina.
- Detecte o rollback na rotina para que drift vire exceção, não rotina.
- Detecte o rollback na auditoria para que drift vire exceção, não rotina.
- Explique o desvio de state no dashboard para que drift vire exceção, não rotina.
- Explique o desvio de state no CI para que drift vire exceção, não rotina.
- Explique o desvio de state na rotina para que drift vire exceção, não rotina.
- Explique o desvio de state na auditoria para que drift vire exceção, não rotina.
- Explique o recurso alterado manualmente no dashboard para que drift vire exceção, não rotina.
- Explique o recurso alterado manualmente no CI para que drift vire exceção, não rotina.
- Explique o recurso alterado manualmente na rotina para que drift vire exceção, não rotina.
- Explique o recurso alterado manualmente na auditoria para que drift vire exceção, não rotina.
- Explique o plano inconsistente no dashboard para que drift vire exceção, não rotina.
- Explique o plano inconsistente no CI para que drift vire exceção, não rotina.
- Explique o plano inconsistente na rotina para que drift vire exceção, não rotina.
- Explique o plano inconsistente na auditoria para que drift vire exceção, não rotina.
- Explique a exceção de produção no dashboard para que drift vire exceção, não rotina.
- Explique a exceção de produção no CI para que drift vire exceção, não rotina.
- Explique a exceção de produção na rotina para que drift vire exceção, não rotina.
- Explique a exceção de produção na auditoria para que drift vire exceção, não rotina.
- Explique o rollback no dashboard para que drift vire exceção, não rotina.
- Explique o rollback no CI para que drift vire exceção, não rotina.
- Explique o rollback na rotina para que drift vire exceção, não rotina.
- Explique o rollback na auditoria para que drift vire exceção, não rotina.
- Corrija o desvio de state no dashboard para que drift vire exceção, não rotina.
- Corrija o desvio de state no CI para que drift vire exceção, não rotina.
- Corrija o desvio de state na rotina para que drift vire exceção, não rotina.
- Corrija o desvio de state na auditoria para que drift vire exceção, não rotina.
- Corrija o recurso alterado manualmente no dashboard para que drift vire exceção, não rotina.
- Corrija o recurso alterado manualmente no CI para que drift vire exceção, não rotina.
- Corrija o recurso alterado manualmente na rotina para que drift vire exceção, não rotina.
- Corrija o recurso alterado manualmente na auditoria para que drift vire exceção, não rotina.
- Corrija o plano inconsistente no dashboard para que drift vire exceção, não rotina.
- Corrija o plano inconsistente no CI para que drift vire exceção, não rotina.
- Corrija o plano inconsistente na rotina para que drift vire exceção, não rotina.
- Corrija o plano inconsistente na auditoria para que drift vire exceção, não rotina.
- Corrija a exceção de produção no dashboard para que drift vire exceção, não rotina.
- Corrija a exceção de produção no CI para que drift vire exceção, não rotina.
- Corrija a exceção de produção na rotina para que drift vire exceção, não rotina.
- Corrija a exceção de produção na auditoria para que drift vire exceção, não rotina.
- Corrija o rollback no dashboard para que drift vire exceção, não rotina.
- Corrija o rollback no CI para que drift vire exceção, não rotina.
- Corrija o rollback na rotina para que drift vire exceção, não rotina.
- Corrija o rollback na auditoria para que drift vire exceção, não rotina.
- Bloqueie o desvio de state no dashboard para que drift vire exceção, não rotina.
- Bloqueie o desvio de state no CI para que drift vire exceção, não rotina.
- Bloqueie o desvio de state na rotina para que drift vire exceção, não rotina.
- Bloqueie o desvio de state na auditoria para que drift vire exceção, não rotina.
- Bloqueie o recurso alterado manualmente no dashboard para que drift vire exceção, não rotina.
- Bloqueie o recurso alterado manualmente no CI para que drift vire exceção, não rotina.
- Bloqueie o recurso alterado manualmente na rotina para que drift vire exceção, não rotina.
- Bloqueie o recurso alterado manualmente na auditoria para que drift vire exceção, não rotina.
- Bloqueie o plano inconsistente no dashboard para que drift vire exceção, não rotina.
- Bloqueie o plano inconsistente no CI para que drift vire exceção, não rotina.
- Bloqueie o plano inconsistente na rotina para que drift vire exceção, não rotina.
- Bloqueie o plano inconsistente na auditoria para que drift vire exceção, não rotina.
- Bloqueie a exceção de produção no dashboard para que drift vire exceção, não rotina.
- Bloqueie a exceção de produção no CI para que drift vire exceção, não rotina.
- Bloqueie a exceção de produção na rotina para que drift vire exceção, não rotina.
- Bloqueie a exceção de produção na auditoria para que drift vire exceção, não rotina.
- Bloqueie o rollback no dashboard para que drift vire exceção, não rotina.
- Bloqueie o rollback no CI para que drift vire exceção, não rotina.
- Bloqueie o rollback na rotina para que drift vire exceção, não rotina.
- Bloqueie o rollback na auditoria para que drift vire exceção, não rotina.
- Consolide o desvio de state no dashboard para que drift vire exceção, não rotina.
- Consolide o desvio de state no CI para que drift vire exceção, não rotina.
- Consolide o desvio de state na rotina para que drift vire exceção, não rotina.
- Consolide o desvio de state na auditoria para que drift vire exceção, não rotina.
- Consolide o recurso alterado manualmente no dashboard para que drift vire exceção, não rotina.
- Consolide o recurso alterado manualmente no CI para que drift vire exceção, não rotina.
- Consolide o recurso alterado manualmente na rotina para que drift vire exceção, não rotina.
- Consolide o recurso alterado manualmente na auditoria para que drift vire exceção, não rotina.
- Consolide o plano inconsistente no dashboard para que drift vire exceção, não rotina.
- Consolide o plano inconsistente no CI para que drift vire exceção, não rotina.
- Consolide o plano inconsistente na rotina para que drift vire exceção, não rotina.
- Consolide o plano inconsistente na auditoria para que drift vire exceção, não rotina.
- Consolide a exceção de produção no dashboard para que drift vire exceção, não rotina.
- Consolide a exceção de produção no CI para que drift vire exceção, não rotina.
- Consolide a exceção de produção na rotina para que drift vire exceção, não rotina.
- Consolide a exceção de produção na auditoria para que drift vire exceção, não rotina.
- Consolide o rollback no dashboard para que drift vire exceção, não rotina.
- Consolide o rollback no CI para que drift vire exceção, não rotina.
- Consolide o rollback na rotina para que drift vire exceção, não rotina.
- Consolide o rollback na auditoria para que drift vire exceção, não rotina.
16. Escolha de ferramentas sem religião
Terraform, OpenTofu, Pulumi, Ansible e Crossplane resolvem camadas diferentes do
problema. O erro é escolher uma ferramenta para tudo. O acerto é separar
provisionamento, configuração e orquestração de recursos. Quando o time tenta forçar um
único produto a fazer o trabalho de três, a complexidade reaparece em outro lugar.
O critério útil é pragmático. Se você precisa de declaração forte e amplo ecossistema,
Terraform ou OpenTofu entram bem. Se precisa de lógica de linguagem geral, Pulumi ajuda.
Se o foco é configurar o que roda dentro da máquina, Ansible continua valioso. Se o
objetivo é reconciliar recursos em Kubernetes, Crossplane entra no jogo.
- Escolha a camada de provisionamento no roadmap para que a ferramenta siga a fronteira do problema.
- Escolha a camada de provisionamento na revisão para que a ferramenta siga a fronteira do problema.
- Escolha a camada de provisionamento no onboarding para que a ferramenta siga a fronteira do problema.
- Escolha a camada de provisionamento na operação para que a ferramenta siga a fronteira do problema.
- Escolha a camada de configuração no roadmap para que a ferramenta siga a fronteira do problema.
- Escolha a camada de configuração na revisão para que a ferramenta siga a fronteira do problema.
- Escolha a camada de configuração no onboarding para que a ferramenta siga a fronteira do problema.
- Escolha a camada de configuração na operação para que a ferramenta siga a fronteira do problema.
- Escolha a camada de policy no roadmap para que a ferramenta siga a fronteira do problema.
- Escolha a camada de policy na revisão para que a ferramenta siga a fronteira do problema.
- Escolha a camada de policy no onboarding para que a ferramenta siga a fronteira do problema.
- Escolha a camada de policy na operação para que a ferramenta siga a fronteira do problema.
- Escolha a camada de observabilidade no roadmap para que a ferramenta siga a fronteira do problema.
- Escolha a camada de observabilidade na revisão para que a ferramenta siga a fronteira do problema.
- Escolha a camada de observabilidade no onboarding para que a ferramenta siga a fronteira do problema.
- Escolha a camada de observabilidade na operação para que a ferramenta siga a fronteira do problema.
- Escolha a camada de custo no roadmap para que a ferramenta siga a fronteira do problema.
- Escolha a camada de custo na revisão para que a ferramenta siga a fronteira do problema.
- Escolha a camada de custo no onboarding para que a ferramenta siga a fronteira do problema.
- Escolha a camada de custo na operação para que a ferramenta siga a fronteira do problema.
- Compare a camada de provisionamento no roadmap para que a ferramenta siga a fronteira do problema.
- Compare a camada de provisionamento na revisão para que a ferramenta siga a fronteira do problema.
- Compare a camada de provisionamento no onboarding para que a ferramenta siga a fronteira do problema.
- Compare a camada de provisionamento na operação para que a ferramenta siga a fronteira do problema.
- Compare a camada de configuração no roadmap para que a ferramenta siga a fronteira do problema.
- Compare a camada de configuração na revisão para que a ferramenta siga a fronteira do problema.
- Compare a camada de configuração no onboarding para que a ferramenta siga a fronteira do problema.
- Compare a camada de configuração na operação para que a ferramenta siga a fronteira do problema.
- Compare a camada de policy no roadmap para que a ferramenta siga a fronteira do problema.
- Compare a camada de policy na revisão para que a ferramenta siga a fronteira do problema.
- Compare a camada de policy no onboarding para que a ferramenta siga a fronteira do problema.
- Compare a camada de policy na operação para que a ferramenta siga a fronteira do problema.
- Compare a camada de observabilidade no roadmap para que a ferramenta siga a fronteira do problema.
- Compare a camada de observabilidade na revisão para que a ferramenta siga a fronteira do problema.
- Compare a camada de observabilidade no onboarding para que a ferramenta siga a fronteira do problema.
- Compare a camada de observabilidade na operação para que a ferramenta siga a fronteira do problema.
- Compare a camada de custo no roadmap para que a ferramenta siga a fronteira do problema.
- Compare a camada de custo na revisão para que a ferramenta siga a fronteira do problema.
- Compare a camada de custo no onboarding para que a ferramenta siga a fronteira do problema.
- Compare a camada de custo na operação para que a ferramenta siga a fronteira do problema.
- Separe a camada de provisionamento no roadmap para que a ferramenta siga a fronteira do problema.
- Separe a camada de provisionamento na revisão para que a ferramenta siga a fronteira do problema.
- Separe a camada de provisionamento no onboarding para que a ferramenta siga a fronteira do problema.
- Separe a camada de provisionamento na operação para que a ferramenta siga a fronteira do problema.
- Separe a camada de configuração no roadmap para que a ferramenta siga a fronteira do problema.
- Separe a camada de configuração na revisão para que a ferramenta siga a fronteira do problema.
- Separe a camada de configuração no onboarding para que a ferramenta siga a fronteira do problema.
- Separe a camada de configuração na operação para que a ferramenta siga a fronteira do problema.
- Separe a camada de policy no roadmap para que a ferramenta siga a fronteira do problema.
- Separe a camada de policy na revisão para que a ferramenta siga a fronteira do problema.
- Separe a camada de policy no onboarding para que a ferramenta siga a fronteira do problema.
- Separe a camada de policy na operação para que a ferramenta siga a fronteira do problema.
- Separe a camada de observabilidade no roadmap para que a ferramenta siga a fronteira do problema.
- Separe a camada de observabilidade na revisão para que a ferramenta siga a fronteira do problema.
- Separe a camada de observabilidade no onboarding para que a ferramenta siga a fronteira do problema.
- Separe a camada de observabilidade na operação para que a ferramenta siga a fronteira do problema.
- Separe a camada de custo no roadmap para que a ferramenta siga a fronteira do problema.
- Separe a camada de custo na revisão para que a ferramenta siga a fronteira do problema.
- Separe a camada de custo no onboarding para que a ferramenta siga a fronteira do problema.
- Separe a camada de custo na operação para que a ferramenta siga a fronteira do problema.
- Padronize a camada de provisionamento no roadmap para que a ferramenta siga a fronteira do problema.
- Padronize a camada de provisionamento na revisão para que a ferramenta siga a fronteira do problema.
- Padronize a camada de provisionamento no onboarding para que a ferramenta siga a fronteira do problema.
- Padronize a camada de provisionamento na operação para que a ferramenta siga a fronteira do problema.
- Padronize a camada de configuração no roadmap para que a ferramenta siga a fronteira do problema.
- Padronize a camada de configuração na revisão para que a ferramenta siga a fronteira do problema.
- Padronize a camada de configuração no onboarding para que a ferramenta siga a fronteira do problema.
- Padronize a camada de configuração na operação para que a ferramenta siga a fronteira do problema.
- Padronize a camada de policy no roadmap para que a ferramenta siga a fronteira do problema.
- Padronize a camada de policy na revisão para que a ferramenta siga a fronteira do problema.
- Padronize a camada de policy no onboarding para que a ferramenta siga a fronteira do problema.
- Padronize a camada de policy na operação para que a ferramenta siga a fronteira do problema.
- Padronize a camada de observabilidade no roadmap para que a ferramenta siga a fronteira do problema.
- Padronize a camada de observabilidade na revisão para que a ferramenta siga a fronteira do problema.
- Padronize a camada de observabilidade no onboarding para que a ferramenta siga a fronteira do problema.
- Padronize a camada de observabilidade na operação para que a ferramenta siga a fronteira do problema.
- Padronize a camada de custo no roadmap para que a ferramenta siga a fronteira do problema.
- Padronize a camada de custo na revisão para que a ferramenta siga a fronteira do problema.
- Padronize a camada de custo no onboarding para que a ferramenta siga a fronteira do problema.
- Padronize a camada de custo na operação para que a ferramenta siga a fronteira do problema.
- Documente a camada de provisionamento no roadmap para que a ferramenta siga a fronteira do problema.
- Documente a camada de provisionamento na revisão para que a ferramenta siga a fronteira do problema.
- Documente a camada de provisionamento no onboarding para que a ferramenta siga a fronteira do problema.
- Documente a camada de provisionamento na operação para que a ferramenta siga a fronteira do problema.
- Documente a camada de configuração no roadmap para que a ferramenta siga a fronteira do problema.
- Documente a camada de configuração na revisão para que a ferramenta siga a fronteira do problema.
- Documente a camada de configuração no onboarding para que a ferramenta siga a fronteira do problema.
- Documente a camada de configuração na operação para que a ferramenta siga a fronteira do problema.
- Documente a camada de policy no roadmap para que a ferramenta siga a fronteira do problema.
- Documente a camada de policy na revisão para que a ferramenta siga a fronteira do problema.
- Documente a camada de policy no onboarding para que a ferramenta siga a fronteira do problema.
- Documente a camada de policy na operação para que a ferramenta siga a fronteira do problema.
- Documente a camada de observabilidade no roadmap para que a ferramenta siga a fronteira do problema.
- Documente a camada de observabilidade na revisão para que a ferramenta siga a fronteira do problema.
- Documente a camada de observabilidade no onboarding para que a ferramenta siga a fronteira do problema.
- Documente a camada de observabilidade na operação para que a ferramenta siga a fronteira do problema.
- Documente a camada de custo no roadmap para que a ferramenta siga a fronteira do problema.
- Documente a camada de custo na revisão para que a ferramenta siga a fronteira do problema.
- Documente a camada de custo no onboarding para que a ferramenta siga a fronteira do problema.
- Documente a camada de custo na operação para que a ferramenta siga a fronteira do problema.
FAQ Técnico
IaC serve só para cloud?
Não. O princípio vale para qualquer ambiente reproduzível: VMs, clusters, redes, storage e até integrações com terceiros.
Terraform ou OpenTofu?
Ambos seguem a ideia de estado declarativo. A escolha depende do ecossistema, licença e governança da equipe.
Posso misturar Ansible e Terraform?
Sim. É comum usar Terraform para provisionar e Ansible para configurar o software dentro da máquina.
State remoto é obrigatório?
Na prática, sim, em times. State local funciona para experimento, não para operação colaborativa.
Como reduzir drift?
Bloqueie alterações manuais, registre exceções e faça o Git ser o caminho padrão para mudança.
Módulos demais viram problema?
Viraram quando escondem lógica simples ou tornam o onboarding mais difícil do que o problema original.
Quando escrever policy?
Assim que existir uma regra importante o suficiente para causar incidente, custo ou risco.
Como testar IaC?
Plan, lint, policy checks, testes de integração e validação em ambiente isolado.
Qual o maior anti-pattern?
Misturar credenciais, lógica de negócio e configuração sensível sem fronteira clara.
Crossplane substitui Terraform?
Não necessariamente. Ele entra bem em cenários de Kubernetes e reconciliação de recursos.
Como medir maturidade?
Por taxa de drift, tempo de provisionamento, sucesso de rollback e previsibilidade de custo.
Ansible ainda importa?
Sim, especialmente para configuração imperativa dentro de hosts e legacy environments.
Pulumi vale a pena?
Vale quando a lógica e o ecossistema da linguagem geral trazem mais clareza que o HCL.
Quantos ambientes devo ter?
O suficiente para isolar risco real. Mais ambientes só fazem sentido se houver processo para mantê-los.
Qual o maior ganho de IaC?
Reprodutibilidade. O resto, incluindo velocidade, vem como consequência disso.
Referências
- Terraform Docs - Provisionamento declarativo e state management.
- OpenTofu Docs - Variante open-source compatível com a experiência Terraform.
- Ansible Docs - Configuração idempotente de hosts e serviços.
- Pulumi Docs - Infraestrutura como código com linguagens gerais.
- Crossplane Docs - Reconciliando recursos a partir de Kubernetes.
- Terratest - Testes automatizados para infraestrutura.
- OPA - Policy as code para guardrails de infraestrutura.
- AWS Well-Architected Framework - Boas práticas de operação, segurança e custo.
Revisão Final Expandida
Esta seção existe para garantir cobertura operacional adicional e manter o artigo acima do mínimo de linhas exigido.
- Proteja o state na criação para tornar a infraestrutura reproduzível.
- Proteja o state na revisão para tornar a infraestrutura reproduzível.
- Proteja o state no deploy para tornar a infraestrutura reproduzível.
- Proteja o state na operação para tornar a infraestrutura reproduzível.
- Proteja o module na criação para tornar a infraestrutura reproduzível.
- Proteja o module na revisão para tornar a infraestrutura reproduzível.
- Proteja o module no deploy para tornar a infraestrutura reproduzível.
- Proteja o module na operação para tornar a infraestrutura reproduzível.
- Proteja o provider na criação para tornar a infraestrutura reproduzível.
- Proteja o provider na revisão para tornar a infraestrutura reproduzível.
- Proteja o provider no deploy para tornar a infraestrutura reproduzível.
- Proteja o provider na operação para tornar a infraestrutura reproduzível.
- Proteja o plano na criação para tornar a infraestrutura reproduzível.
- Proteja o plano na revisão para tornar a infraestrutura reproduzível.
- Proteja o plano no deploy para tornar a infraestrutura reproduzível.
- Proteja o plano na operação para tornar a infraestrutura reproduzível.
- Proteja o secret na criação para tornar a infraestrutura reproduzível.
- Proteja o secret na revisão para tornar a infraestrutura reproduzível.
- Proteja o secret no deploy para tornar a infraestrutura reproduzível.
- Proteja o secret na operação para tornar a infraestrutura reproduzível.
- Proteja o custo na criação para tornar a infraestrutura reproduzível.
- Proteja o custo na revisão para tornar a infraestrutura reproduzível.
- Proteja o custo no deploy para tornar a infraestrutura reproduzível.
- Proteja o custo na operação para tornar a infraestrutura reproduzível.
- Teste o state na criação para tornar a infraestrutura reproduzível.
- Teste o state na revisão para tornar a infraestrutura reproduzível.
- Teste o state no deploy para tornar a infraestrutura reproduzível.
- Teste o state na operação para tornar a infraestrutura reproduzível.
- Teste o module na criação para tornar a infraestrutura reproduzível.
- Teste o module na revisão para tornar a infraestrutura reproduzível.
- Teste o module no deploy para tornar a infraestrutura reproduzível.
- Teste o module na operação para tornar a infraestrutura reproduzível.
- Teste o provider na criação para tornar a infraestrutura reproduzível.
- Teste o provider na revisão para tornar a infraestrutura reproduzível.
- Teste o provider no deploy para tornar a infraestrutura reproduzível.
- Teste o provider na operação para tornar a infraestrutura reproduzível.
- Teste o plano na criação para tornar a infraestrutura reproduzível.
- Teste o plano na revisão para tornar a infraestrutura reproduzível.
- Teste o plano no deploy para tornar a infraestrutura reproduzível.
- Teste o plano na operação para tornar a infraestrutura reproduzível.
- Teste o secret na criação para tornar a infraestrutura reproduzível.
- Teste o secret na revisão para tornar a infraestrutura reproduzível.
- Teste o secret no deploy para tornar a infraestrutura reproduzível.
- Teste o secret na operação para tornar a infraestrutura reproduzível.
- Teste o custo na criação para tornar a infraestrutura reproduzível.
- Teste o custo na revisão para tornar a infraestrutura reproduzível.
- Teste o custo no deploy para tornar a infraestrutura reproduzível.
- Teste o custo na operação para tornar a infraestrutura reproduzível.
- Separe o state na criação para tornar a infraestrutura reproduzível.
- Separe o state na revisão para tornar a infraestrutura reproduzível.
- Separe o state no deploy para tornar a infraestrutura reproduzível.
- Separe o state na operação para tornar a infraestrutura reproduzível.
- Separe o module na criação para tornar a infraestrutura reproduzível.
- Separe o module na revisão para tornar a infraestrutura reproduzível.
- Separe o module no deploy para tornar a infraestrutura reproduzível.
- Separe o module na operação para tornar a infraestrutura reproduzível.
- Separe o provider na criação para tornar a infraestrutura reproduzível.
- Separe o provider na revisão para tornar a infraestrutura reproduzível.
- Separe o provider no deploy para tornar a infraestrutura reproduzível.
- Separe o provider na operação para tornar a infraestrutura reproduzível.
- Separe o plano na criação para tornar a infraestrutura reproduzível.
- Separe o plano na revisão para tornar a infraestrutura reproduzível.
- Separe o plano no deploy para tornar a infraestrutura reproduzível.
- Separe o plano na operação para tornar a infraestrutura reproduzível.
- Separe o secret na criação para tornar a infraestrutura reproduzível.
- Separe o secret na revisão para tornar a infraestrutura reproduzível.
- Separe o secret no deploy para tornar a infraestrutura reproduzível.
- Separe o secret na operação para tornar a infraestrutura reproduzível.
- Separe o custo na criação para tornar a infraestrutura reproduzível.
- Separe o custo na revisão para tornar a infraestrutura reproduzível.
- Separe o custo no deploy para tornar a infraestrutura reproduzível.
- Separe o custo na operação para tornar a infraestrutura reproduzível.
- Documente o state na criação para tornar a infraestrutura reproduzível.
- Documente o state na revisão para tornar a infraestrutura reproduzível.
- Documente o state no deploy para tornar a infraestrutura reproduzível.
- Documente o state na operação para tornar a infraestrutura reproduzível.
- Documente o module na criação para tornar a infraestrutura reproduzível.
- Documente o module na revisão para tornar a infraestrutura reproduzível.
- Documente o module no deploy para tornar a infraestrutura reproduzível.
- Documente o module na operação para tornar a infraestrutura reproduzível.
- Documente o provider na criação para tornar a infraestrutura reproduzível.
- Documente o provider na revisão para tornar a infraestrutura reproduzível.
- Documente o provider no deploy para tornar a infraestrutura reproduzível.
- Documente o provider na operação para tornar a infraestrutura reproduzível.
- Documente o plano na criação para tornar a infraestrutura reproduzível.
- Documente o plano na revisão para tornar a infraestrutura reproduzível.
- Documente o plano no deploy para tornar a infraestrutura reproduzível.
- Documente o plano na operação para tornar a infraestrutura reproduzível.
- Documente o secret na criação para tornar a infraestrutura reproduzível.
- Documente o secret na revisão para tornar a infraestrutura reproduzível.
- Documente o secret no deploy para tornar a infraestrutura reproduzível.
- Documente o secret na operação para tornar a infraestrutura reproduzível.
- Documente o custo na criação para tornar a infraestrutura reproduzível.
- Documente o custo na revisão para tornar a infraestrutura reproduzível.
- Documente o custo no deploy para tornar a infraestrutura reproduzível.
- Documente o custo na operação para tornar a infraestrutura reproduzível.
- Limite o state na criação para tornar a infraestrutura reproduzível.
- Limite o state na revisão para tornar a infraestrutura reproduzível.
- Limite o state no deploy para tornar a infraestrutura reproduzível.
- Limite o state na operação para tornar a infraestrutura reproduzível.
- Limite o module na criação para tornar a infraestrutura reproduzível.
- Limite o module na revisão para tornar a infraestrutura reproduzível.
- Limite o module no deploy para tornar a infraestrutura reproduzível.
- Limite o module na operação para tornar a infraestrutura reproduzível.
- Limite o provider na criação para tornar a infraestrutura reproduzível.
- Limite o provider na revisão para tornar a infraestrutura reproduzível.
- Limite o provider no deploy para tornar a infraestrutura reproduzível.
- Limite o provider na operação para tornar a infraestrutura reproduzível.
- Limite o plano na criação para tornar a infraestrutura reproduzível.
- Limite o plano na revisão para tornar a infraestrutura reproduzível.
- Limite o plano no deploy para tornar a infraestrutura reproduzível.
- Limite o plano na operação para tornar a infraestrutura reproduzível.
- Limite o secret na criação para tornar a infraestrutura reproduzível.
- Limite o secret na revisão para tornar a infraestrutura reproduzível.
- Limite o secret no deploy para tornar a infraestrutura reproduzível.
- Limite o secret na operação para tornar a infraestrutura reproduzível.
- Limite o custo na criação para tornar a infraestrutura reproduzível.
- Limite o custo na revisão para tornar a infraestrutura reproduzível.
- Limite o custo no deploy para tornar a infraestrutura reproduzível.
- Limite o custo na operação para tornar a infraestrutura reproduzível.