TERRAFORM SERIES: LAB … Working on AWS: Destroy e Outputs
Já sabemos como criar recursos na nuvem … Mas, e se quisermos excluí-los? Será que é tão fácil quanto? Fortuitamente, a resposta é sim 🙂 E melhor, existem três formas para isso. São elas:
- Apagando o bloco correspondente no código-fonte. Em seguida,
terraform apply
; - Comentando o bloco. Imediatamente após,
terraform apply
; - Ou ainda,
terraform destroy nome_ref
>_ Apagando
Se você utiliza controle de versão de código, por exemplo GIT, não haverá grandes consequências no fato de ir até lá e deletar o recurso, pois entende-se que a qualquer momento a ação poderá ser desfeita, bastando apenas restaurar o commit anterior (na programação, muitas vezes chamada de rollback) Sendo assim, retorne ao VScode e simule a exclusão de dois recursos: o bucket S3 e a máquina dev4
Primeiro, selecione o trecho que delimita tal recurso:


Depois, pressione a tecla DELETE para excluí-los do arquivo:

E por fim, para efeitos de teste e visualização (ou melhor, sem aplicar nada ainda): o bom e velho terraform plan

>_ Comentando
Analogamente ao que fizemos no seção anterior, e permanecendo a mesma justificativa, a única diferença aqui é o atalho Ctrl+Shift+A (ou menu Edit > Toggle Block Comment
) para comentar um bloco inteiro:

>_ terraform destroy -target
Terceiro, e talvez o mais simples de todos, o comando terraform destroy
com parâmetro -target
terraform destroy -target aws_instance.dev4

Percebam que caso eu transmita somente a referência (ou seja, o dito recurso) a sua dependência não necessariamente será excluída. Sendo assim, ao invés de dev4, devo passar como argumento o bucket S3:
terraform destroy -target aws_s3_bucket.dev4

Vejam só: agora sim! Tanto o recurso principal quanto a dependência serão excluídos automaticamente. Confirme com YES e depois ENTER.

Então, o que temos a partir deste ponto é … Nada nessa mão:

E igualmente, nada nesta outra:

>_ Exibindo informações: OUTPUTS
Lógica simples, podemos ter acesso a qualquer informação de um dado recurso X, usando o comando terraform output
Para isso, crie um novo arquivo chamado outputs.tf e edite o mesmo conforme o seguinte:
output "ips" { value = "${aws_instance.dev6.public_ip}" }
Quase pronto! Como se trata de uma instância em execução, o comando output ainda não tem gravado essa informação, pois a infraestrutura já foi provisionada e será a primeira vez que rodaremos o mesmo. Portanto, antes disso, execute outro chamado terraform refresh

Magnífico não?! 😮 Pois é, e dá pra melhorar ainda mais, acrescentando/especificando uma variável única (do tipo “saída”) para cada item (correspondência: recurso = informação) Observem:
output "dev6" { value = "${aws_instance.dev6.public_ip}" } output "dev5" { value = "${aws_instance.dev5.public_ip}" }
