Pular para o conteúdo

Infraestrutura Terraform

O Terraform é uma ferramenta de software de infraestrutura como código de código aberto que permite criar, alterar e melhorar 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 do Checkov.

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

  1. Instale o Nx Console VSCode Plugin se ainda não o fez
  2. Abra o console Nx no VSCode
  3. Clique em Generate (UI) na seção "Common Nx Commands"
  4. Procure por @aws/nx-plugin - terraform#project
  5. Preencha os parâmetros obrigatórios
    • name: tf-infra
  6. Clique em Generate
Parâmetro Tipo Padrão Descrição
name Obrigatório string - The name of the project.
type string application Whether this is a terraform lib (re-usable modules) or app (deployable).
directory string packages The directory of the new project.

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

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

  • Directorysrc
    • main.tf Arquivo principal de configuração do Terraform
    • providers.tf Configuração de provedores com backend S3
    • variables.tf Definições de variáveis de entrada
    • outputs.tf Definições de valores de saída
    • Directoryenv Arquivos de variáveis específicas do ambiente
      • dev.tfvars Variáveis do ambiente de desenvolvimento
  • Directorybootstrap Configuração de bootstrap para estado remoto
    • main.tf Bucket S3 e políticas para armazenamento de estado
    • providers.tf Configuração do provedor AWS
    • variables.tf Definições de variáveis do bootstrap
  • project.json Configuração do projeto e targets de build

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

  • Directorysrc
    • main.tf Arquivo principal do módulo Terraform
  • project.json Configuração do projeto e targets de build

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 sua infraestrutura aqui
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Se você quiser executar um módulo de um projeto separado (biblioteca), pode fazê-lo da seguinte forma:

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

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

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

Para adicionar novos ambientes, crie um novo arquivo src/env/<ambiente>.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:

# Variáveis de ambiente de produção
environment = "prod"
region = "us-west-2"

Bootstrap de Estado Remoto (Apenas Projetos de Aplicação)

Seção intitulada “Bootstrap de Estado Remoto (Apenas Projetos de Aplicação)”

Para projetos de aplicação, antes de implantar sua infraestrutura, você precisará executar o bootstrap do backend de estado remoto. Isso cria um bucket S3 para armazenar seus arquivos de estado do Terraform:

Terminal window
pnpm nx run tf-infra:bootstrap

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 run tf-infra:validate

Formate seu código Terraform usando o target fmt:

Terminal window
pnpm nx run tf-infra:fmt

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

Terminal window
pnpm nx run tf-infra:test

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

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

Antes de aplicar alterações, você pode ver o que o Terraform fará executando o target plan:

Terminal window
pnpm nx run tf-infra:plan

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

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

Terminal window
pnpm nx run tf-infra:init

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

Terminal window
pnpm nx run tf-infra:apply

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

Terminal window
pnpm nx run tf-infra:output

Quando precisar desmontar sua infraestrutura, use o target destroy:

Terminal window
pnpm nx run tf-infra:destroy

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

Terminal window
pnpm nx run tf-infra:bootstrap-destroy

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