Crie e remova seu primeiro recurso AWS

AWSBeginner
Pratique Agora

Introdução

Sua equipe precisa de armazenamento privado para relatórios. Neste laboratório, você criará o primeiro bucket com o Terraform, comparará sua configuração com a AWS e o estado do Terraform e, em seguida, revisará e executará sua destruição. Um relatório de referência separado pertence a outra equipe e deve permanecer inalterado.

Você já deve compreender recursos do Terraform, init, plan, apply, estado e destroy, além de se sentir à vontade para editar arquivos e consultar o S3 com a AWS CLI. O Terraform, o provedor AWS e o acesso pela CLI estão preparados. Use o Terminal para executar comandos e o AWS View para observar o armazenamento; não é necessário ter uma conta pessoal da AWS nem chaves de acesso. Cada laboratório começa de forma independente.

Relação com certificações

Certificação Tarefa do exame Prática
Cloud Practitioner (CLF-C02) Tarefa 3.1 Usar infraestrutura como código para uma implantação repetível e consultas pela CLI para inspeção.
Developer – Associate (DVA-C02) Tarefa 3.3, Habilidade 3.3.4 Prática básica de implementação e implantação de uma definição de recurso em IaC.
DevOps Engineer – Professional (DOP-C02) Tarefa 2.1 Prática básica de definição de um recurso e gerenciamento de sua criação e exclusão com IaC.

Visão conceitual: a configuração do Terraform gerencia um bucket S3 por meio do mapeamento no estado, enquanto um bucket de referência separado é preservado.

Crie o bucket de relatórios

Nesta etapa, você conectará uma definição de recurso do Terraform à conta AWS atual e criará um bucket privado para relatórios.

Primeiro, entre no diretório raiz preparado e consulte sua região e a identidade do chamador. Um diretório raiz contém uma configuração independente do Terraform com seu próprio estado. A conta do chamador informa onde as solicitações do provedor operam; o ARN identifica quem faz as solicitações.

cd /home/labex/project/first-aws-resource
aws configure get region
aws sts \
  get-caller-identity
terraform version

A região é us-east-1. O Terraform informa a versão 1.17.2. O acesso preparado é separado de qualquer conta pessoal da AWS.

O arquivo provider.tf fornecido seleciona o provedor AWS na versão 6.14.0, configura a conexão preparada e fixa a versão 1.17.2 do Terraform. O provedor traduz operações de recursos em solicitações à API da AWS. Sua configuração é fornecida para que você possa se concentrar no gerenciamento de recursos.

Crie main.tf com a configuração a seguir. cat e <<'EOF' escrevem tudo até o EOF de fechamento no arquivo indicado. aws_s3_bucket é o tipo de recurso AWS; reports é o rótulo local do Terraform. Juntos, formam o endereço aws_s3_bucket.reports. O atributo bucket é o nome do bucket na AWS, que é diferente desse endereço. As tags registram a finalidade do recurso.

cat > main.tf <<'EOF'
resource "aws_s3_bucket" "reports" {
  bucket = "terraform-first-reports"
  tags = {
    Project = "TerraformReports"
  }
}

output "report_bucket" {
  value = aws_s3_bucket.reports.id
}
EOF

Inicialize este diretório raiz e valide sua configuração:

terraform init
terraform validate

init instala o provedor na versão fixada a partir do cache preparado e grava .terraform.lock.hcl. Mantenha esse arquivo de bloqueio de dependências junto à configuração de um projeto real: ele registra o provedor escolhido e as somas de verificação dos pacotes. Ele é diferente do estado do Terraform, que mapeia endereços de recursos para os IDs dos recursos implantados. Como o cache está preparado para este ambiente Linux, init pode avisar que as somas de verificação do arquivo de bloqueio cobrem apenas linux_amd64; a inicialização ainda é concluída. Um projeto usado em outras plataformas também precisa das somas de verificação dessas plataformas.

Revise o plano antes de criar qualquer recurso:

terraform plan

Espere Plan: 1 to add, 0 to change, 0 to destroy. Alguns atributos exibem (known after apply) porque a AWS os atribui ou retorna durante a criação. Confirme o nome do bucket e a tag do projeto. Um plano apresenta as ações previstas; ele não cria o bucket.

Aplique a configuração e digite yes na solicitação de confirmação:

terraform apply

Espere Apply complete! Resources: 1 added, 0 changed, 0 destroyed. O valor de saída report_bucket é terraform-first-reports. No AWS View, o novo bucket vazio aparece ao lado de team-reference-reports. Não altere esse bucket de referência nem seu objeto keep.txt.

AWS View após a criação: o bucket vazio de relatórios gerenciado pelo Terraform aparece ao lado do bucket de referência da equipe, que permanece inalterado.

Use Continue após concluir os comandos. A verificação consulta a AWS e o mapeamento no estado de forma independente; o sucesso de um comando, por si só, não é suficiente.

Compare a configuração, o estado e a AWS

Nesta etapa, você relacionará o endereço de recurso do Terraform ao bucket privado existente e confirmará que a configuração convergiu.

O valor de saída lê o ID do bucket por meio de uma referência ao recurso. state list exibe o endereço gerenciado; state show exibe seus atributos registrados. Esses comandos inspecionam o mapeamento sem alterar a AWS.

terraform output report_bucket
terraform state list
terraform state show aws_s3_bucket.reports

Localize aws_s3_bucket.reports e seu ID terraform-first-reports. Sua configuração expressa o recurso desejado, a AWS contém o recurso e o estado conecta os dois. Uma entrada no estado, por si só, não comprova que o recurso ainda existe.

Consulte a AWS diretamente. get-bucket-location retorna null para a região us-east-1 do S3. A ACL deve conceder acesso apenas ao usuário canônico proprietário; não deve haver nenhuma concessão a grupos públicos. Este laboratório cria um bucket privado e não adiciona uma política de bucket pública.

aws s3api \
  get-bucket-location \
  --bucket terraform-first-reports
aws s3api \
  get-bucket-acl \
  --bucket terraform-first-reports
aws s3api \
  get-bucket-tagging \
  --bucket terraform-first-reports

Confirme que a tag Project é TerraformReports. Verifique se o relatório não relacionado ainda pode ser lido. A expressão --query seleciona apenas seu tamanho em bytes, e o comando mantém o objeto armazenado inalterado.

aws s3api \
  head-object \
  --bucket team-reference-reports \
  --key keep.txt \
  --query ContentLength
terraform plan

O plano deve informar No changes. Isso significa que o provedor não identifica alterações de configuração para os recursos gerenciados. Isso não comprova todas as possíveis propriedades de segurança nem valida os dados dos relatórios; esses aspectos precisam de verificações próprias. Você pode saber mais sobre o estado do Terraform e o controle de acesso do S3.

Remova apenas o recurso gerenciado

Nesta etapa, você revisará e executará um plano de destruição e comprovará que o bucket gerenciado e o mapeamento no estado foram removidos, enquanto o relatório de referência permanece.

terraform plan -destroy apresenta a exclusão prevista dos recursos no estado deste diretório raiz. Isso não significa “excluir todos os buckets da conta”. Leia o endereço e o ID do bucket antes de continuar:

terraform plan -destroy

Espere Plan: 0 to add, 0 to change, 1 to destroy. O bucket de referência não aparece no plano porque este diretório raiz não o gerencia. O bucket de destino está vazio; laboratórios posteriores explicam por que dados armazenados e versões exigem decisões de retenção específicas.

Destrua o bucket gerenciado e digite yes na solicitação de confirmação:

terraform destroy

Espere Destroy complete! Resources: 1 destroyed. Agora inspecione o estado e consulte os buckets restantes:

terraform state list
aws s3api \
  list-buckets \
  --query 'Buckets[].Name'
aws s3api \
  head-object \
  --bucket team-reference-reports \
  --key keep.txt \
  --query ContentLength

A lista do estado está vazia. terraform-first-reports não aparece na listagem bem-sucedida de buckets; team-reference-reports e seu relatório permanecem. Mantenha o acesso à AWS configurado até que a verificação final seja concluída, para que um erro de autenticação não seja confundido com uma exclusão bem-sucedida. A configuração e o arquivo de bloqueio permanecem disponíveis caso você decida criar o recurso novamente.

AWS View após a limpeza: o bucket gerenciado pelo Terraform foi removido e o relatório de referência separado da equipe permanece.

Resumo

Você criou um bucket S3 privado usando um provedor AWS com versão fixada, comparou a configuração e o estado com consultas à AWS, verificou um plano convergente e destruiu apenas o recurso gerenciado. O relatório de referência independente permaneceu intacto. No próximo laboratório, você usará entradas e referências a recursos para gerenciar o conteúdo dos relatórios.