Diagrama as code com ChatGPT

Image: Infra as Code

Não teve uma empresa que eu tenha passado que a atividade de fazer o diagramas de arquitetura não fosse um problema, que não fosse uma atividade preterida lá para o fim do projeto e se possível não fazer. Sem a menor sombra de dúvida essa é uma atividade que é sempre deixada para depois. Mas eu vou contar um segredo, não ter o desenho é um erro imenso para qualquer time de infraestrutura, eu te explico porque:

Ter um diagrama de arquitetura de um produto é fundamental por várias razões, a primeira delas é saber o que tipo de infraestrutura vai ser construída, não se pode sair correndo igual a um louco sem direção. Um diagrama fornece uma representação visual da estrutura e dos componentes do sistema, facilitando a comunicação entre diferentes partes interessadas, como desenvolvedores, gerentes de projeto, time DevOps e partes não técnicas.

Além do lado técnico ter um diagrama de arquitetura permite identificar potenciais pontos de falha e gargalos antes que o sistema esteja em produção, ajuda a identificar dependências entre os componentes do sistema, e, possibilita a implementação de estratégias de escalabilidade além de da suporte aos times de Governança e Compliance.

O Estagiário de luxo

Espero ter te convencido que ter diagramas de arquitetura é importante por que “Seus problemas acabaram!!!”. Hoje temos um estagiário de luxo, chamado de ChatGPT (Generative Pre-trained Transformer) pode nos dar uma mãozinha para ajudar muito, mas muito mesmo com essa atividade que é bem importante para quem constroem infraestruturas.

Espero ter te convencido que ter diagramas de arquitetura é importante por que “Seus problemas acabaram!!!”. Hoje temos um estagiário de luxo, o ChatGPT pode nos dar uma mãozinha para ajudar muito com essa atividade que é bem importante para quem constroem infraestruturas. Veja o que é possível fazer com ele te ajudar a tornar a sua vida fácil, extremamente fácil, veja:

Infraestrutura simples

Prompt 1

Eu tenho uma arquitetura com o kubernetes para executar os  micro serviços, 
que se conectam a um banco de dados MySql e filas para enviar mensagens.

Utilizando a biblioteca Diagram do Python faça o diagrama.

Resultado 1

 1#! /usr/bin/python3
 2 
 3from diagrams import Diagram, Cluster
 4from diagrams.k8s.compute import Pod
 5from diagrams.k8s.network import Service
 6from diagrams.onprem.database import MySQL
 7from diagrams.onprem.queue import RabbitMQ
 8
 9with Diagram("Arquitetura com Kubernetes, MySQL e RabbitMQ", show=False):
10    with Cluster("Kubernetes Cluster"):
11        svc = Service("Service")
12        pod1 = Pod("Microserviço 1")
13        pod2 = Pod("Microserviço 2")
14        pod3 = Pod("Microserviço 3")
15        svc >> [pod1, pod2, pod3]
16
17    db = MySQL("Banco de Dados MySQL")
18    queue = RabbitMQ("Filas de Mensagens")
19
20    # Relacionamentos
21    [pod1, pod2, pod3] >> db
22    [pod1, pod2, pod3] >> queue
23
24 

Diagrama 1

Image: Infra as Code

Infraestrutura um pouco mais complexa

Prompt 2

Eu tenho uma  arquitetura com o kubernetes para micro executar os
micro serviços um banco de dados MySql e filas para enviar mensagem
pelo RabbitMQ. Os microserviços guardam artefatos num bucket S3.  Os 
micro serviços utilizam o Redis como cache.

Utilizando a biblioteca Diagram em Python faça o diagrama

Resultado 2

 1#! /usr/bin/python3
 2
 3from diagrams import Diagram, Cluster
 4from diagrams.k8s.compute import Pod, Deployment
 5from diagrams.k8s.network import Service
 6from diagrams.onprem.database import MySQL
 7from diagrams.onprem.queue import RabbitMQ
 8from diagrams.aws.storage import S3
 9from diagrams.onprem.inmemory import Redis
10from diagrams.k8s.group import Namespace
11
12with Diagram("Arquitetura Kubernetes com MySQL, RabbitMQ, S3 e Redis", show=False):
13    with Cluster("Kubernetes Cluster"):
14        with Cluster("Namespace: Microservices"):
15            svc = Service("Service")
16            pod1 = Pod("Microserviço 1")
17            pod2 = Pod("Microserviço 2")
18            pod3 = Pod("Microserviço 3")
19            svc >> [pod1, pod2, pod3]
20
21    db = MySQL("Banco de Dados MySQL")
22    queue = RabbitMQ("Filas de Mensagens")
23    cache = Redis("Redis Cache")
24    storage = S3("Bucket S3")
25
26    # Relacionamentos
27    [pod1, pod2, pod3] >> db
28    [pod1, pod2, pod3] >> queue
29    [pod1, pod2, pod3] >> cache
30    [pod1, pod2, pod3] >> storage
31
32 

Diagrama 2

Image: Infra as Code

Prompt 2.1

Pedi para utilizar os ícones da AWS.

Refaça o exemplo anterior utilizando o provider AWS
 1#! /usr/bin/python3
 2
 3from diagrams import Diagram, Cluster
 4from diagrams.aws.compute import EKS
 5from diagrams.aws.database import RDS, ElasticacheRedis
 6from diagrams.aws.integration import SQS
 7from diagrams.aws.storage import S3
 8from diagrams.aws.network import ELB
 9
10with Diagram("Arquitetura AWS com EKS, RDS, SQS, S3 e Redis", show=False):
11    with Cluster("AWS Cloud"):
12        lb = ELB("Load Balancer")
13
14        with Cluster("EKS Cluster"):
15            svc = EKS("Service")
16            pod1 = EKS("Microservice 1")
17            pod2 = EKS("Microservice 2")
18            pod3 = EKS("Microservice 3")
19            svc >> [pod1, pod2, pod3]
20
21        db = RDS("MySQL (RDS)")
22        queue = SQS("RabbitMQ (Amazon MQ)")
23        cache = ElasticacheRedis("Redis (ElastiCache)")
24        storage = S3("S3 Bucket")
25
26        # Relacionamentos
27        lb >> svc
28        [pod1, pod2, pod3] >> db
29        [pod1, pod2, pod3] >> queue
30        [pod1, pod2, pod3] >> cache
31        [pod1, pod2, pod3] >> storage
32
33 

Diagrama 2.1

Image: Infra as Code

Conclusão

Eu já tinha falado de diagrama-as-code num post passado, foi uma das primeiras postagens do blog, mas este post é bem diferente. A diferença do post antigo para este de agora, é que por meio de um prompt eu descrevo a arquitetura e peço para criar o código, no post passado eu falava como codificar cada caixa, cada linha uma a uma.

Saber descrever a arquitetura e ter o diagrama as code é uma vantagem incrível em termos de qualidade do trabalho, mas não é a coisa principal. Você vai precisar ser específico na pergunta para conseguir uma resposta melhor do ChatGPT, para fazer uma pergunta melhor, você vai precisar conhecer mais da infraestrutura. Você vai precisar estudar mais e mais para compreender a complexidade e o funcionamento dos sistemas, é nesse ponto que você vai ganhar conhecimento e melhorar como profissional. Os resultados do nosso estagiário de luxo são bem, bem, bem convincentes, em alguns momentos eu precisei ajustar uma ou duas linhas de código mas foi muito mais simples e mais rápido do que criar algo do zero.

Para fechar, não existe mais desculpas para deixar de fazer atividade de criação de diagramas, ela não precisam mais ser a última coisa a ser feita no projeto, e com as dicas dadas neste post ficou moleza ter um diagramazinho mesmo que simples, né?? 😉

Abraços!

Vida longa e próspera a todos!!

Referências

MENTORIA

Curtiu o blog? Quer trocar uma ideia comigo sobre algum post?

Marca Aqui! É um papo gratuito oferecido para quem é leitor do blog, podemos falar de temas como: DevOps, SRE e carreira em TI.


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.