top of page

Baixe grátis nossos e-books

Explore o mundo da Engenharia de Software e Data de forma mais eficiente e acessível com nossos eBooks!

  • Foto do escritorJP

Acessando e modificando Terraform State



Antes de começar a falar sobre o acesso aos estados, é necessário explicar o que são os estados ou State. O que são os States?


O que é o Terraform State?


O Terraform State é uma forma do Terraform gerenciar a infra, configurações e os recursos criados afim de manter um mapeamento do que já existe e controlar a atualização e criação de novos recursos.


Um exemplo básico é quando criamos um Bucket S3, um EC2 ou uma SQS via Terraform. Todos estes recursos são mapeados no estado e passam a ser gerenciados pelo Terraform.

 

Localização do State


Local


Por padrão o Terraform aloca o estado localmente no arquivo terraform.tfsate. Utilizar o State localmente pode funcionar bem para um estudo específico no qual não exista a necessidade em compartilhar o State entre times.


Remote


Ao contrário do Local, quando temos times compartilhando dos mesmos recursos, a utilização do State de forma remota se torna imprescindível. O Terraform provê suporte para que o State possa ser compartilhado de forma remota. Não entraremos em detalhes em como configurar, mas é possível manter o State no Amazon S3, Azure Blob Storage, Google Cloud Storage, Alibaba Cloud OSS e entre outras nuvens.


O State é representado pelo arquivo terraform.tfsate, um arquivo no formato JSON, segue um exemplo de um Bucket S3 mapeando no State:

{
  "version": 4,
  "terraform_version": "0.12.3",
  "serial": 3,
  "lineage": "853d8b-6ee1-c1e4-e27e-e10",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "aws_s3_bucket",
      "name": "s3_bucket_xpto",
      "provider": "provider.aws",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "acceleration_status": "",
            "acl": "private",
            "arn": "arn:aws:s3:::bucket.xpto",
            "bucket": "bucket.xpto",
            "bucket_domain_name": "bucket.xpto",
            "bucket_prefix": null,
            "bucket_regional_domain_name": "bucket.xpto",
            "cors_rule": [],
            "force_destroy": false,
            "grant": [],
            "hosted_zone_id": "Z3NHGSIKTF",
            "id": "bucket.xpto",
            "lifecycle_rule": [],
            "logging": [],
            "object_lock_configuration": [],
            "policy": null,
            "region": "us-east-1",
            "replication_configuration": [],
            "request_payer": "BucketOwner",
            "server_side_encryption_configuration": [],
            "tags": {
              "Environment": "staging"
            },
            "versioning": [
              {
                "enabled": false,
                "mfa_delete": false
              }
            ],
            "website": [],
            "website_domain": null,
            "website_endpoint": null
          },
          "private": "UJbhV=="
        }
      ]
    }
  ]
}
 

Acessando e alterando o State


Apesar do State estar alocado em um arquivo JSON, não é recomendado a alteração direta no arquivo. O Terraform provê a utilização do comando Terraform state executado via CLI para que pequenas modificações sejam efetuadas.


Através do CLI, podemos executar comandos afim de manipular o State, segue o uso:

terraform state <subcommand> [options] [args]

Sub-comandos:


list Lista os recursos no estado

mv Move um item no estado

pull Extrai o estado atual e lista o resultado no stdout

push Atualiza um estado remoto de um arquivo de estado local

rm Remove instância do estado

show Mostra recursos do estado


1. Listando os recursos do State


Comando:


terraform state list


O comando acima possibilita listar os recursos que estão sendo gerenciados pelo State


Exemplo:

$ terraform state list
aws_s3_bucket.s3_bucket
aws_sqs_queue.sqs-xpto

No exemplo acima, temos um Bucket S3 e um SQS que foram criados via terraform e que estão sendo gerenciados pelo State.


2. Visualizando um recurso e seus atributos


Comando:


terraform state show [options] ADDRESS


O comando acima possibilita mostrar em detalhes um recurso específico e seus atributos


Exemplo:

$ terraform state show aws_sqs_queue.sqs-xpto
# aws_sqs_queue.sqs-xpto:
resource "aws_sqs_queue" "sqs-xpto" {
    arn                               = "arn:aws:sqs:sqs-xpto"
    content_based_deduplication       = false
    delay_seconds                     = 90
    fifo_queue                        = false
    id                                = "https://sqs-xpto"
    kms_data_key_reuse_period_seconds = 300
    max_message_size                  = 262144
    message_retention_seconds         = 345600
    name                              = "sqs-xpto"
    receive_wait_time_seconds         = 10
    tags                              = {
        "Environment" = "staging"
    }
    visibility_timeout_seconds        = 30
}

3. Removendo recursos do State


Comando:


terraform state rm [options] ADDRESS...


O comando acima remove um ou mais items do State. Diferente de um terraform destroy, que remove o recurso do State e os objetos remotos criados na nuvem.


Exemplo:

$ terraform state rm aws_sqs_queue.sqs-xpto
 

Material de estudo


Se quer aprender mais sobre o assunto e alcançar um alto nível de conhecimento, recomendo fortemente a leitura do(s) seguinte(s) livro(s):


Terraform: Up & Running: Writing Infrastrucutre as Code (Versão Inglês) é um livo focado em como utilizar Terraform e seus benefícios. O autor buscou fazer comparações com diversas outras ferramentas IAC (Infrastructure as code) como Ansible e Cloudformation (IAC nativa da AWS) e principalmente de como criar e provisionar diferentes recursos para múltiplos serviços de nuvem. Atualmente, Terraform é a ferramenta mais utilizada em projetos de Software para a criação e gerenciamento de recursos no serviços de nuvem como AWS, Azure, Google cloud e vários outros. Se você quer ser um engenheiro completo, recomendo fortemente aprender sobre o tema.













Amazon AWS: Descomplicando a computação na nuvem é um livro para aqueles que estão começando na AWS e querem entender o funcionamento e a dinâmicas dos serviços como S3, EC2, ElasticCache, Route 53, SNS, Cloudwatch e muito mais.














AWS Cookbook (Versão Inglês) é um guia prático contendo 70 receitas detalhadas sobre os recursos da AWS e como resolver diferentes desafios. É um livro bem escrito e de fácil entendimento cobrindo os principais serviços da AWS através de exemplos práticos. A AWS ou Amazon Web Services é o serviço de nuvem mais utilizando atualmente em todo o mundo, caso queira entender mais sobre o tema para ficar bem posicionado no mercado, recomendo fortemente o estudo.













E aí, Curtiu? Até mais!



Posts recentes

Ver tudo
bottom of page