TERRAFORM SERIES: Final … Working on AWS: (backend) Colaborando em Equipe

Uma andorinha só não faz verão … Antigo ditado popular brasileiro. Mas, que tenta trazer consigo a mensagem do POST de hoje … Tanto no âmbito pessoal (família, amigos) quanto profissional (colegas, superiores, subordinados) ninguém, absolutamente ninguém (sim, isso inclui você e eu!!!), está sozinho ou totalmente independente. A palavra da moda talvez seja auto-suficiente. E é justamente sobre isso que iremos tratar. Ou deveria dizer “provisionar” ??? (hehehe) Bem, a escolha é sua 😀

Agora sim, falando sério. Quando estamos inseridos em um time de infraestrutura, ou desenvolvimento, ou ambos (no caso de empresas que já adotam o DevOps) é normal ter que compartilhar arquivos e pastas para construção de um determinado projeto. Entretanto, isso não quer dizer que duas pessoas deveriam estar editando o mesmo arquivo de configuração simultaneamente, por exemplo. E por que não Victor? Porque do contrário, o sistema hospedeiro não saberia qual é a porta correta para escutar requisições HTTP: seria a minha porta 80 ou a sua porta 8080? Difícil não? Pois é, meio complicado 🙁

Enfim, do jeito que está, simplesmente não dá. Dessa forma, ou trabalhamos sozinhos no projeto (1 – 1). Ou na melhor das hipóteses, toda vez que alguém pensar em fazer algo, deve gritar para todo mundo ouvir: Ei, vou abrir o arquivo X … Vou renomear a pasta Y … Atenção! Reiniciando o serviço Z, a conexão irá cair momentaneamente … AARGH 😐 Um verdadeiro pesadelo (Ou feira livre né?)

Sendo assim, proponho duas saídas, na esperança de melhorar esse cenário caótico. A) Você deverá implantar localmente algum tipo de versionamento, desde os mais simples, como Git ou SVN, até os mais complexos, como GitLab ou Bitbucket. B) Manter todo o estado da sua infra hospedado diretamente na nuvem da HashiCorp, chamada de Terraform Cloud

Nós vamos de opção “B”, então mãos-a-obra:

>_ Criando uma conta: SIGN UP

Totalmente gratuito, basta cadastrar um e-mail válido, nome de usuário e senha. Ao final, não esqueça de consentir os termos de uso e política de privacidade.

Figura 01. sign up

Siga para sua caixa de entrada e abra o email padrão (típico comportamento esperado nos dias atuais)

Figura 02. inbox
Figura 03. welcome

>_ Criando um workflow do zero: START FROM SCRATCH

Escolha a opção do meio, para simular uma nova infra e definir por conta própria alguns parâmetros. O primeiro deles informa o nome do grupo, chamado aqui de organização

Figura 04. organization

Próxima tela, caímos nos espaços de trabalho (ou workspaces) Esses nada mais são do que as configurações da nossa infra, ou seja, aqueles mesmos arquivos que criamos anteriormente lá no VScode. E sim, nós vamos importá-los para cá (não reinvente a roda!!!) MAS, CONTUDO, PORÉM, TODAVIA, para que isso aconteça é preciso antes gerar um token de acesso. Dirija-se até seu avatar, clique em user settings, em seguida tokens, e por fim, create an API token Dê um nome, salve e copie o HASH

Figura 05. workspaces
Figura 06. settings > tokens > create
Figura 07. description
Figura 08. info hash (CTRL-C + CTRL-V)
Figura 09. list of tokens

Próximo passo, criar o arquivo de referência ao token, localizado imediatamente abaixo da sua /HOME. Seguindo o doc, a recomendação é que seja nomeado como .terraformrc ou terraform.rc E formate o mesmo com esse conteúdo:

credentials "app.terraform.io" {
  token = "Q1lxCm2AFUONng.atlasv1.y1Mg3F4OjzB3Iz4yUJ10DaNU4zu4UqtjuvM5bDqysiniNbYZUUMNOzniBzRVYtjVAsE"
}

Terceira etapa, instruir o TERRAFORM a olhar diretamente para a nuvem e não mais o local do projeto. Para isso, retorne ao VScode e crie um novo arquivo remote-state.tf Depois cole o seguinte

# Using a single workspace:
terraform {
  backend "remote" {
    hostname = "app.terraform.io"
    organization = "vicrldacombr"

    workspaces {
      name = "aws-victor"
    }
  }
}

Quase terminado, agora necessitamos inicializar o diretório novamente, para que as alterações sejam vistas pelo TERRAFORM:

terraform init
Figura 10. new backend “remote”

Aparentemente tudo OK, mas nunca é demais validar as coisas … Volte para a nuvem e TA-DAAAA

Figura 11. novo workspace importado
Figura 12. visão dos recursos presentes

>_ Alterando o estado e visualizando modificações: NEW DEPLOY

Modifique o estado atual da sua infra. Por exemplo, crie simplesmente um novo recurso. Qualquer um: no meu caso aqui, estou pegando um bucket S3. Aproveitando os exemplos anteriores, acompanhe:

resource "aws_s3_bucket" "NEW-deploy" {
  bucket = "novo-item"
  acl = "private"

  tags = {
    Name        = "novo-item"
  }
}
Figura 13. new item
terraform plan && terraform apply
Figura 14. error: no AWS credential found 🙁

Errata: O Terraform CLOUD ainda não possui aquelas mesmas credenciais que você definiu no AWS CLI. Sendo assim, para resgatar ambas você deve abrir o arquivo que fez download anteriormente (no início da série) Feito isso, agora vá para o site do Terraform Cloud e dentro do seu acesso clique na opção Settings, depois em Variables sets e logo após create variable set, escreva um nome pra variável (coloquei o nome do usuário), seleciona a opção Apply to all workspaces in this organization e depois add variable Seleciona a opção Environment variable e no campo “Key” digite AWS_ACCESS_KEY_ID e em “Value” digite o ID da chave, marque a opção Sensitive. Repita o mesmo processo de add variable agora no campo “Key” digite AWS_SECRET_ACCESS_KEY e em “Value” sua chave secreta. Adicionado as duas chaves, finaliza no botão Save variable set.

O resultado em tela será mais ou menos assim:

Figura 15. corrigindo o erro

Agora rode novamente o comando terraform plan para verificar se está tudo certo:

Figura 16. a-ha 🙂 deu certo!

terraform apply e pronto! só aguardar …

Figura 17. YES

Observem que o recurso foi criado e de hoje em diante nós temos o tão sonhado versionamento na infra vigente:

Figura 18. applied
Figura 19. overview
Figura 20. details
Figura 21. versionamento e estados

CURTA, COMPARTILHE, COMENTE 😉

REFERÊNCIAS:

https://www.atlassian.com/git/tutorials/what-is-version-control

https://en.wikipedia.org/wiki/List_of_version-control_software

https://www.softwaretestinghelp.com/version-control-software/

https://app.terraform.io/session

https://www.terraform.io/cli/config/config-file

https://www.terraform.io/cli/cloud

https://www.terraform.io/language/settings/backends/remote

Deixe uma resposta

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