Guia abrangente de comandos e fluxos de trabalho do Terraform para Infraestrutura como Código (IaC), incluindo gerenciamento de recursos, operações de estado e implantações multi-cloud.
Instalação e Configuração
| Comando | Descrição |
|---|
terraform version | Mostrar versão do Terraform |
terraform -help | Mostrar informações de ajuda |
terraform -help plan | Mostrar ajuda para comando específico |
Fluxo de Trabalho Principal
Operações Básicas
| Comando | Descrição |
|---|
terraform init | Inicializar diretório de trabalho |
terraform plan | Criar plano de execução |
terraform apply | Aplicar alterações |
terraform destroy | Destruir infraestrutura |
terraform validate | Validar configuração |
terraform fmt | Configurar arquivos de configuração |
Planejamento Avançado
| Comando | Descrição |
|---|
terraform plan -out=tfplan | Salvar plano para arquivo |
terraform apply tfplan | Aplicar plano salvo |
terraform plan -target=resource.name | Planejar recurso específico |
terraform plan -var="key=value" | Planejar com variáveis |
terraform plan -var-file="vars.tfvars" | Planejar com arquivo variável |
Gerenciamento de Estado
Operações de Estado
| Comando | Descrição |
|---|
terraform state list | Listar recursos no estado |
terraform state show resource.name | Mostrar detalhes do recurso |
terraform state mv old_name new_name | Mover recurso no estado |
terraform state rm resource.name | Remover recurso do estado |
terraform state pull | Baixar estado remoto |
terraform state push | Carregar estado para remoto |
Backup e Recuperação de Estado
| Comando | Descrição |
|---|
terraform state backup | Criar backup de estado |
terraform force-unlock LOCK_ID | Desbloquear estado à força |
terraform refresh | Atualizar estado com recursos reais |
Workspaces
| Comando | Descrição |
|---|
terraform workspace list | Listar workspaces |
terraform workspace new dev | Criar novo workspace |
terraform workspace select dev | Alternar para workspace |
terraform workspace delete dev | Excluir workspace |
terraform workspace show | Mostrar workspace atual |
Importação e Saída
Importar Recursos
| Comando | Descrição |
|---|
terraform import resource.name id | Importar recurso existente |
terraform import aws_instance.example i-1234567890abcdef0 | Importar instância AWS |
Saídas
| Comando | Descrição |
|---|
terraform output | Mostrar todas as saídas |
terraform output instance_ip | Mostrar saída específica |
terraform output -json | Mostrar saídas em JSON |
Exemplos de Configuração
Instância AWS EC2 Básica
provider "aws" \\\\{
region = "us-west-2"
\\\\}
resource "aws_instance" "example" \\\\{
ami = "ami-0c55b159cbfafe1d0"
instance_type = "t2.micro"
tags = \\\\{
Name = "example-instance"
\\\\}
\\\\}
output "instance_ip" \\\\{
value = aws_instance.example.public_ip
\\\\}
Variáveis
variable "instance_type" \\\\{
description = "EC2 instance type"
type = string
default = "t2.micro"
\\\\}
variable "environment" \\\\{
description = "Environment name"
type = string
\\\\}
Fontes de Dados
data "aws_ami" "ubuntu" \\\\{
most_recent = true
owners = ["099720109477"] # Canonical
filter \\\\{
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
\\\\}
\\\\}
Módulos
module "vpc" \\\\{
source = "terraform-aws-modules/vpc/aws"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-west-2a", "us-west-2b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = true
\\\\}
Configuração de Estado Remoto
Backend S3
terraform \\\\{
backend "s3" \\\\{
bucket = "my-terraform-state"
key = "state/terraform.tfstate"
region = "us-west-2"
\\\\}
\\\\}
Backend Azure
terraform \\\\{
backend "azurerm" \\\\{
resource_group_name = "tfstate"
storage_account_name = "tfstate"
container_name = "tfstate"
key = "prod.terraform.tfstate"
\\\\}
\\\\}
Backend Google Cloud
terraform \\\\{
backend "gcs" \\\\{
bucket = "tf-state-bucket"
prefix = "terraform/state"
\\\\}
\\\\}
Configuração de Provedor
Provedor AWS
provider "aws" \\\\{
region = "us-west-2"
profile = "default"
default_tags \\\\{
tags = \\\\{
Environment = "production"
Project = "my-project"
\\\\}
\\\\}
\\\\}
Provedor Azure
provider "azurerm" \\\\{
features \\\\{\\\\}
subscription_id = "00000000-0000-0000-0000-000000000000"
tenant_id = "00000000-0000-0000-0000-000000000000"
\\\\}
Provedor Google Cloud
provider "google" \\\\{
project = "my-project-id"
region = "us-central1"
zone = "us-central1-c"
\\\\}
Recursos Avançados
Recursos Condicionais
Would you like me to continue with the remaining translations? I noticed that some sections (3-20) are currently empty. If you’d like me to translate those as well, please provide the specific text for each section.```hcl
resource “aws_instance” “example” \\{
count = var.create_instance ? 1 : 0
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
\\}
```hcl
resource "aws_instance" "example" \\\\{
for_each = toset(var.instance_names)
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
tags = \\\\{
Name = each.key
\\\\}
\\\\}
```(Empty)
```hcl
resource "aws_security_group" "example" \\\\{
name = "example"
dynamic "ingress" \\\\{
for_each = var.ingress_rules
content \\\\{
from_port = ingress.value.from_port
to_port = ingress.value.to_port
protocol = ingress.value.protocol
cidr_blocks = ingress.value.cidr_blocks
\\\\}
\\\\}
\\\\}
```(Empty)
## Testing and Validation
### Terraform Validate
| Comando | Descrição |
|---------|-------------|
| `terraform validate` | Validar sintaxe |
| `terraform validate -json` | Validar com saída JSON |(Empty)
### Terraform Plan Analysis
| Comando | Descrição |
|---------|-------------|
| `terraform plan -detailed-exitcode` | Planeje com códigos de saída detalhados |
| `terraform show` | Mostrar estado atual |
| `terraform show -json` | Mostrar estado em JSON |(Empty)
### Third-party Tools
| Comando | Descrição |
|---------|-------------|
| `tflint` | Terraform linter |
| `terraform-docs` | Gerar documentação |
| `checkov -f main.tf` | Varredura de segurança |
| `tfsec .` | Análise de segurança |(Empty)
## Debugging and Troubleshooting
### Logging
| Comando | Descrição |
|---------|-------------|
| `TF_LOG=DEBUG terraform plan` | Habilitar registro de depuração |
| `TF_LOG=TRACE terraform apply` | Habilitar registro de rastreamento |
| `TF_LOG_PATH=terraform.log terraform plan` | Registrar em arquivo |(Empty)
### Common Issues
| Comando | Descrição |
|---------|-------------|
| `terraform refresh` | Sincronizar estado com a realidade |
| `terraform taint resource.name` | Marcar recurso para recreação |
| `terraform untaint resource.name` | Remover taint do recurso |(Empty)
## Best Practices
### File Organization```
project/
├── main.tf # Main configuration
├── variables.tf # Variable definitions
├── outputs.tf # Output definitions
├── versions.tf # Provider versions
├── terraform.tfvars # Variable values
└── modules/
└── vpc/
├── main.tf
├── variables.tf
└── outputs.tf
```(Empty)
### Version Constraints```hcl
terraform \\\\{
required_version = ">= 1.0"
required_providers \\\\{
aws = \\\\{
source = "hashicorp/aws"
version = "~> 5.0"
\\\\}
\\\\}
\\\\}
```(Empty)
### Resource Naming```hcl
resource "aws_instance" "web_server" \\\\{
# Use descriptive names
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
tags = \\\\{
Name = "$\\\\{var.project_name\\\\}-web-$\\\\{var.environment\\\\}"
Environment = var.environment
Project = var.project_name
\\\\}
\\\\}
```(Empty)
### Security Best Practices`-parallelism`**Segurança do Estado**: Usar estado remoto com criptografia`-target`**Gerenciamento de Segredos**: Usar repositórios de segredos externos