Terraform Graph

Image: Infra as Code

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:


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á!!


--- --- IMPORTANTE --- ---
As opiniões aqui expressas são pessoais e de responsabilidade única e exclusiva do autor, elas não refletem necessariamente a posição das empresas que eu trabalho(ei) e/ou presto(ei) serviço.