TERRAFORM SERIES: LAB … Working on AWS: (editor) VSCode, (diretório) HELLO-INFRA e (sintaxe) MAIN.tf

Bem-vindos de volta! Quase lá … Hoje iremos visualizar a praticidade de uma infraestrutura quando a mesma é tratada como código-fonte. Às vezes chamada de programação, lógica, ou algoritmo, o fato é que para nós não basta apenas o mero exercício de enxergá-la. Quero dizer, vê-la na forma de produto final, um tipo de resultado, e pronto, acabou. Não, não é bem assim. E creio que a maioria já saiba disso. Também precisamos entendê-la, compreender a sua natureza, seu comportamento. E talvez o mais importante, o método utilizado para construí-la. Além das regras do jogo, é claro. Por exemplo, para fixar qualquer prego tenho que bater o martelo com a extremidade cuja superfície de contato é sempre a maior, e orientada diretamente para o alvo. Pois do contrário, estaria usando a ponta errada, sendo esta outra responsável pela extração, e não fixação do prego.

Analogias à parte, vamos ao que interessa 😁 (…)

>_ VS CODE : INSTALL .TERRAFORM & .GITHUB

Pule esta seção caso já o conheça e tenha instalado em sua máquina, mas Visual Studio Code trata-se de um editor de código desenvolvido pela Microsoft e que foi abraçado pela comunidade de programadores mundo afora, principalmente nos últimos anos. Evidentemente que a adoção dele (ou não) fica livre, aberta e cabe tão somente a você escolhe-lo ou quem sabe optar por outra solução. Notepad++, Geany, Sublime Text, Atom, e tantos outros, são exemplos de IDEs e editores voltados totalmente para a arte de programar. Sendo assim, depois que baixá-lo do site, disponível em https://code.visualstudio.com/download, realize o processo de instalação. Ao final abra-o e dirija-se até a loja de extensões, comumente nomeada de Marketplace. Primeiro procure por ‘GitHub‘, para configurar e sincronizar sua conta com repositórios. E por último busque por ‘Terraform‘, para ter em mãos algumas das features mais legais quando se está criando arquivos de configuração para a nuvem.

.GITHUB

Figura 01. canto inferior esquerdo
Figura 02. canto superior
Figura 03. nova aba p/ autorizar
Figura 04. botão autorizar
Figura 05. canto inferior direito
Figura 06. barra lateral, menu explorer
Figura 07. autorizar clone, permissões repositório
Figura 08. clone repo
Figura 09. fonte confiável: sim ou não? YES
Figura 10. abrir nova pasta
Figura 11. pasta aberta, contudo ainda vazia

.TERRAFORM

Figura 12. barra lateral, marketplace
Figura 13. pesquisar por terraform, instalar hashicorp terraform
Figura 14. menu explorer, botão novo arquivo
Figura 15. arquivo main.tf

>_ code : SYNTAX EXPLAINED

https://raw.githubusercontent.com/vicrlda/terraform-aws/master/main.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region  = "us-east-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-045137e8d34668746"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleAppServerInstance"
  }
}

Explicando em partes, e percorrendo linha por linha:

terraform {

Sinal do início de um bloco terraform. Este tipo sempre deverá conter configurações, inclusive (e principalmente) os provedores a serem utilizados na infraestrutura.

required_providers {

Bloco dedicado aos provedores e suas respectivas definições, como por exemplo: versão, repositório, etc. Existe também a possibilidade de restrições, a exemplo de “forçar” o Terraform a trabalhar com uma versão X do provedor pois já foi identificado pela sua equipe que a Y, mais atual e recém-lançada, “quebraria” a infra dada as próprias configurações atuais. Omissão desse parâmetro resulta sempre na última e mais nova versão do provedor. Tenha cuidado!

source  = "hashicorp/aws"

Nome, apelido, e tipo de provedor a ser baixado pelo Terraform. Tudo é feito e instalado via registro, chamado de Terraform Registry

version = "~> 3.27"

Versão escolhida daquele provedor

required_version = ">= 0.14.9"

Informa qual é a versão mínima do Terraform a ser trabalhada, ou seja, toda essa configuração que está sendo elaborada apenas é garantida em versões iguais ou superiores a esta especificada.

provider "aws" {

Seção referente ao bloco provider com todos os parâmetros desejados para o mesmo.

profile = "default"

O atributo profile do provedor aws refere-se ao usuário informado durante a execução do comando aws configure Tais credenciais ficam armazenadas em um arquivo de configuração separado, que foi criado justamente quando você configurou a AWS CLI (seguindo as instruções do post anterior) Isso é feito para que NUNCA, JAMAIS tenha que passar segredos em texto plano dentro de um arquivo terraform (.tf)

region  = "us-east-2"

ID de região na AWS para criar as instâncias alvo (máquinas EC2)

resource "aws_instance" "app_server" {

Blocos do tipo resource definem os componentes lógicos e físicos para sua infraestrutura. Eles são aceitos somente se antes, na declaração do bloco, constar tanto o tipo do recurso (aws_instance) quanto o nome para o mesmo (app_server)

ami           = "ami-045137e8d34668746"
instance_type = "t2.micro"

Argumento(s) usado(s) para incluir a imagem de um UBUNTU dentro de uma máquina T2.MICRO Atenção! pois o código de referência de qualquer imagem muda conforme a região escolhida. No meu caso, estou sempre trabalhando em Ohio, ou seja, us-east-2 , portanto, ami-045137e8d34668746 Para encontrar a sua basta visitar esse link https://cloud-images.ubuntu.com/locator/ec2/

>_ AWS : RUNNING TERRAFORM . . .

Inicializando o diretório

terraform init
Figura 16. criado um arquivo tipo “trava” chamado .terraform.lock.hcl
Figura 17. instante zero: pasta local

Formatando e validando a configuração

terraform fmt
Figura 18. formato válido e pronto para uso
Figura 19. instante um: pasta local

Criando infraestrutura

terraform apply
Figura 20. aws console: ANTES
Figura 21. aws console: DEPOIS
Figura 22. vs code: saída do comando no terminal

Listando o estado

terraform show
Figura 23. vs code: detalhes e informações da máquina
Figura 24. instante dois: pasta local

CURTA, COMPARTILHE, COMENTE

>_ REFERÊNCIAS:

https://visualstudio.microsoft.com/pt-br/vs/github/

https://learn.hashicorp.com/tutorials/terraform/aws-build

Deixe uma resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.