Pular para o conteúdo

Infraestrutura Terraform

Filter this guidePick generator option values to hide sections that don't apply.

Terraform é uma ferramenta de software de infraestrutura como código de código aberto que permite criar, alterar e melhorar a infraestrutura de forma segura e previsível.

O gerador de infraestrutura Terraform cria um projeto de infraestrutura Terraform. A aplicação gerada inclui práticas recomendadas de segurança através de verificações de segurança do Checkov.

Você pode gerar um novo projeto Terraform de duas maneiras:

Terminal window
pnpm nx g @aws/nx-plugin:terraform#project --name=tf-infra
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
Terminal window
pnpm nx g @aws/nx-plugin:terraform#project --name=tf-infra --dry-run
ParâmetroTipoPadrãoDescrição
name Obrigatóriostring-O nome do projeto.
type application | libraryapplicationSe este é uma lib terraform (módulos reutilizáveis) ou app (implantável).
directory stringpackagesO diretório do novo projeto.
subDirectory string-O subdiretório onde o projeto é colocado. Por padrão, este é o nome do projeto.
preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

O gerador cria diferentes estruturas de arquivos dependendo do tipo de projeto:

type = application

Para projetos de aplicação (--type=application), o gerador cria uma aplicação Terraform completa com gerenciamento de estado remoto:

  • Directorysrc
    • main.tf Main Terraform configuration file
    • providers.tf Provider configuration with S3 backend
    • variables.tf Input variable definitions
    • outputs.tf Output value definitions
    • Directoryenv Environment-specific variable files
      • dev.tfvars Development environment variables
  • Directorybootstrap Bootstrap configuration for remote state
    • main.tf S3 bucket and policies for state storage
    • providers.tf AWS provider configuration
    • variables.tf Bootstrap variable definitions
  • Directoryscripts Node helpers run by the nx bootstrap and init targets
    • aws-config.ts Resolves account + region via the AWS SDK credential chain
    • bootstrap.ts Pulls/pushes the bootstrap tfstate and runs terraform apply
    • init.ts Runs terraform init with the S3 backend config
  • project.json Project configuration and build targets
type = library

Para projetos de biblioteca (--type=library), o gerador cria uma estrutura mais simples para módulos Terraform reutilizáveis:

  • Directorysrc
    • main.tf Main Terraform module file
  • project.json Project configuration and build targets

Você pode começar a escrever sua infraestrutura Terraform dentro de src/main.tf, por exemplo:

src/main.tf
locals {
account_id = data.aws_caller_identity.current.account_id
aws_region = data.aws_region.current.id
}
resource "null_resource" "print_info" {
# triggers = {
# always_run = timestamp()
# }
provisioner "local-exec" {
command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
}
}
# Declare your infrastructure here
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Se você quiser executar um módulo de um projeto separado (lib), você pode fazer isso da seguinte forma:

module "lib_module" {
source = "../../path/to/my-lib/src"
}

Isso atualizará automaticamente o grafo Nx para adicionar uma dependência entre sua aplicação consumidora e sua lib.

Configure variáveis específicas do ambiente nos arquivos src/env/*.tfvars.

Para adicionar novos ambientes, crie um novo arquivo src/env/<environment>.tfvars com as variáveis específicas do ambiente e adicione novas entradas para apply, destroy, init, plan no project.json para a nova configuração de ambiente. Por exemplo, vamos supor que queremos adicionar um ambiente prod:

# Production environment variables
environment = "prod"
region = "us-west-2"
type = application

Bootstrap de Estado Remoto (Somente Projetos Application)

Seção intitulada “Bootstrap de Estado Remoto (Somente Projetos Application)”

Antes de implantar sua infraestrutura, você precisará fazer o bootstrap do backend de estado remoto. Isso cria um bucket S3 para armazenar seus arquivos de estado Terraform:

Terminal window
pnpm nx bootstrap tf-infra

Os targets disponíveis dependem do tipo do seu projeto:

Você pode validar sua configuração Terraform usando o target validate:

Terminal window
pnpm nx validate tf-infra

Formate seu código Terraform usando o target fmt:

Terminal window
pnpm nx fmt tf-infra

Execute verificações de segurança em sua infraestrutura usando Checkov com o target test:

Terminal window
pnpm nx test tf-infra

Você encontrará os resultados dos testes de segurança na pasta dist raiz, em dist/packages/<my-terraform-project>/checkov.

type = application

Os seguintes targets estão disponíveis apenas para projetos do tipo application:

Antes de aplicar mudanças, você pode ver o que o Terraform fará executando o target plan:

Terminal window
pnpm nx plan tf-infra

Isso criará um arquivo de plano em dist/packages/<my-terraform-project>/terraform/dev.tfplan.

Inicialize seu diretório de trabalho Terraform com o target init:

Terminal window
pnpm nx run tf-infra:init

Após planejar, você pode implantar sua infraestrutura na AWS usando o target apply:

Terminal window
pnpm nx apply tf-infra

Recupere valores de saída da sua configuração Terraform:

Terminal window
pnpm nx output tf-infra

Quando você precisar derrubar sua infraestrutura, use o target destroy:

Terminal window
pnpm nx destroy tf-infra

Para limpar os recursos de bootstrap (bucket S3 para armazenamento de estado):

Terminal window
pnpm nx bootstrap-destroy tf-infra

Para mais informações sobre Terraform, consulte a Documentação do Terraform e a Documentação do AWS Provider.