Terraform Graph
Um dos conhecimentos mais necessários e mais utilizados no dia a dia de uma pessoa que atua na área de DevOps, Cloud Engineer, Systems Engineer é a capacidade de fazer debug, “debugar” alguma coisa. Fazer debug significa entender como alguma coisa funciona, significa explicar como alguma coisa funciona, significa mostrar e verificar como algo funciona.
Nas tarefas diárias de um time tecnologia criar infraestruturas com o Terraform tem se tornado algo cada vez mais frequente, com isso, atividades de analisar, discutir melhorias e buscar por falhas em código de Terraform é uma constante.
Modo texto ou modo gráfico
Eu sou muito fã do modo texto, daquela telinha do terminal Linux, mas, uma função pouco explorada do Terraform que eu acho incrível é a sua capacidade de gerar uma saída no formato DOT file, e a partir deste script, você pode gerar um gráfico do seu plano de execução, veja como isso é lindo d+!!
Texto
1$ terraform graph
2
3digraph {
4 compound = "true"
5 newrank = "true"
6 subgraph "root" {
7 "[root] aws_default_vpc.default (expand)" [label = "aws_default_vpc.default", shape = "box"]
8 "[root] aws_eip.prod_web (expand)" [label = "aws_eip.prod_web", shape = "box"]
9 "[root] aws_instance.prod_web (expand)" [label = "aws_instance.prod_web", shape = "box"]
10 "[root] aws_s3_bucket.prod_tf_course (expand)" [label = "aws_s3_bucket.prod_tf_course", shape = "box"]
11 "[root] aws_security_group.prod_web (expand)" [label = "aws_security_group.prod_web", shape = "box"]
12 "[root] provider[\"registry.terraform.io/hashicorp/aws\"]" [label = "provider[\"registry.terraform.io/hashicorp/aws\"]", shape = "diamond"]
13 "[root] aws_default_vpc.default (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/aws\"]"
14 "[root] aws_eip.prod_web (expand)" -> "[root] aws_instance.prod_web (expand)"
15 "[root] aws_instance.prod_web (expand)" -> "[root] aws_security_group.prod_web (expand)"
16 "[root] aws_s3_bucket.prod_tf_course (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/aws\"]"
17 "[root] aws_security_group.prod_web (expand)" -> "[root] provider[\"registry.terraform.io/hashicorp/aws\"]"
18 "[root] provider[\"registry.terraform.io/hashicorp/aws\"] (close)" -> "[root] aws_default_vpc.default (expand)"
19 "[root] provider[\"registry.terraform.io/hashicorp/aws\"] (close)" -> "[root] aws_eip.prod_web (expand)"
20 "[root] provider[\"registry.terraform.io/hashicorp/aws\"] (close)" -> "[root] aws_s3_bucket.prod_tf_course (expand)"
21 "[root] root" -> "[root] provider[\"registry.terraform.io/hashicorp/aws\"] (close)"
22 }
23}
24
25$ terraform graph > prod_DOT.dot
Gráfico
Veja que cada nó do gráfico é uma etapa/função executado pelo Terraform, gerar essa imagem com os fluxos ajuda muiiiiiiito nos nossos “debugs” de cada dia, veja como fica:
1$ sudo apt install graphviz
2$ dot -Tpng prod_DOT.dot >prod_terraform.png

Terraform plan Graphiz - Image: Infra as Code
Também é possível utilizar a versão web do Graphiz e visualizar o resultado.

Terraform plan Graphiz Web - Image: Infra as Code
Você pode até amar o seu terminal em modo texto não tem problema … mas diz aeee se assim não é mais legal?!?! 😍 😍
Abraços!
Vida longa e próspera a todos!!
Referências:
- https://www.terraform.io/
- https://en.wikipedia.org/wiki/DOT_(graph_description_language)
- https://dreampuf.github.io/GraphvizOnline/
Eu adoraria ouvir suas outras histórias e situações semelhantes ao que acabei de escrever neste post, você pode me encontrar em @infraascode_br ou linkedin.com/in/leonardoml/ .
Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!
|
