Pular para o conteúdo

Terraform

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

ComandoDescrição
terraform versionMostrar versão do Terraform
terraform -helpMostrar informações de ajuda
terraform -help planMostrar ajuda para comando específico

Fluxo de Trabalho Principal

Operações Básicas

ComandoDescrição
terraform initInicializar diretório de trabalho
terraform planCriar plano de execução
terraform applyAplicar alterações
terraform destroyDestruir infraestrutura
terraform validateValidar configuração
terraform fmtConfigurar arquivos de configuração

Planejamento Avançado

ComandoDescrição
terraform plan -out=tfplanSalvar plano para arquivo
terraform apply tfplanAplicar plano salvo
terraform plan -target=resource.namePlanejar 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

ComandoDescrição
terraform state listListar recursos no estado
terraform state show resource.nameMostrar detalhes do recurso
terraform state mv old_name new_nameMover recurso no estado
terraform state rm resource.nameRemover recurso do estado
terraform state pullBaixar estado remoto
terraform state pushCarregar estado para remoto

Backup e Recuperação de Estado

ComandoDescrição
terraform state backupCriar backup de estado
terraform force-unlock LOCK_IDDesbloquear estado à força
terraform refreshAtualizar estado com recursos reais

Workspaces

ComandoDescrição
terraform workspace listListar workspaces
terraform workspace new devCriar novo workspace
terraform workspace select devAlternar para workspace
terraform workspace delete devExcluir workspace
terraform workspace showMostrar workspace atual

Importação e Saída

Importar Recursos

ComandoDescrição
terraform import resource.name idImportar recurso existente
terraform import aws_instance.example i-1234567890abcdef0Importar instância AWS

Saídas

ComandoDescrição
terraform outputMostrar todas as saídas
terraform output instance_ipMostrar saída específica
terraform output -jsonMostrar 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