diagram-as-code
Diagrama AWS em YAML versionado no Git, com saída PNG, PDF ou draw.io e editor web
git clone https://github.com/fernando-moretes/tool-diagram-as-code.gitcerca de 5 min · áudio gerado ao tocar
Este repositório é o meu fork do awslabs/diagram-as-code: um CLI em Go que transforma YAML em diagrama de arquitetura AWS, ao qual acrescentei exportação nativa para draw.io e um editor web hospedado em dac.moretes.com.
Por que este fork existe
Diagrama de arquitetura desenhado à mão tem um problema que ninguém orça: ele envelhece no dia seguinte à revisão. O custo dele não é desenhar, é manter o desenho fiel ao que está em produção a cada mudança de VPC, de subnet ou de balanceador. Depois de anos revisando arquitetura, o padrão que vejo se repetir é o mesmo: o PNG no Confluence descreve o sistema de seis meses atrás e ninguém sabe dizer quando ele deixou de ser verdade.
O projeto original da awslabs resolve a parte central disso. Você descreve recursos e ligações em YAML legível, o arquivo vai para o Git junto do código, e o CLI awsdac gera a imagem seguindo as diretrizes de ícones da AWS. O diagrama passa a ter diff, revisão em pull request e histórico.
O fork nasceu de duas lacunas que eu tinha no dia a dia. PNG não se edita: quando alguém precisa ajustar uma seta para uma apresentação, o PNG obriga a regenerar ou redesenhar. Por isso acrescentei a exportação .drawio, que vira a fonte editável. Nem todo mundo instala um CLI: para quem só quer testar um YAML, o editor web em dac.moretes.com gera o diagrama no navegador, sem instalação local.
O que o repositório entrega
awsdac em Go: YAML de entrada, PNG de saída por padrão, sem navegador headless nem GUI, o que o deixa leve para rodar em container de CI.--drawio ou -o saida.drawio gera o arquivo editável; o pipeline vive em internal/ctl/drawio.go e drawio_assets.go.pkg/diagram permite embutir a geração em outra ferramenta de IaC ou de IA.-c desenha a partir de um template e -d gera o YAML no formato dac para você refinar.Os dois caminhos até o diagrama
O mesmo motor em Go atende o CLI local e o editor web. O .drawio é a fonte editável; PNG e PDF podem ser derivados dele quando o binário do draw.io está disponível.
- awsdac CLI · Go
- Definition files · ícones AWS / custom
- CloudFormation · -c / -d (beta)
- Editor Monaco · dac.moretes.com
- Vercel Function · handler Go
- PNG · padrão
- .drawio · fonte editável
- PDF · --pdf
Como funciona por dentro
O YAML descreve três coisas: os definition files, que dizem quais ícones e estilos existem; os recursos, organizados em hierarquia (canvas, nuvem, região, VPC, subnet, serviço); e os links entre eles. O CLI lê a hierarquia, calcula o tamanho de cada grupo a partir dos filhos e posiciona tudo sem que você informe coordenada. É isso que torna o arquivo revisável em pull request: o diff mostra "entrou um NAT Gateway na subnet pública", não "o retângulo andou 40 pixels".
Definition files: por padrão vêm do repositório oficial. Carregar de outra URL exige --allow-untrusted-definitions, e a trava existe por um motivo concreto: o arquivo de definição decide o que é desenhado, então uma URL qualquer é entrada não confiável no seu pipeline. O mesmo mecanismo permite diagramas fora da AWS, basta escrever outro arquivo de definição.
Templates: com -t, o YAML é processado pelo text/template do Go antes do render. Na prática, isso deixa um único arquivo gerar o diagrama de dev, hml e prod variando contas, regiões ou número de instâncias.
draw.io como fonte: no fork, o .drawio gerado é o artefato de referência. PNG e PDF podem ser exportados a partir dele quando o binário drawio está instalado, o que vale para CLI local e ambientes que não são serverless. No editor web, o backend roda como Vercel Function em Go, e o cmd/api-dev sobe o mesmo handler localmente para testar sem a Vercel CLI.
Instalar e gerar o primeiro diagrama
- 1
Escolha o caminho de instalação
O README recomenda
npm install -g awsdac(Node.js 14+), que baixa o binário certo para o seu sistema e CPU; no macOS também hábrew install awsdac. Se você precisa da exportação.drawiodeste fork, compile a partir do código: é o caminho em que você sabe exatamente qual binário está rodando. - 2
Compile a partir do código
Pré-requisito: Go 1.21+ (Node.js 18+ só para o editor web). Clone o repositório e rode
make build, que produz./awsdac(ouawsdac.exeno Windows). Confira com./awsdac --version. - 3
Parta de um exemplo
A pasta
examples/tem modelos prontos.awsdac examples/alb-ec2.yamlgeraoutput.png. Copie o YAML, troque recursos e ligações, e gere de novo até o desenho bater com o que está em produção. - 4
Gere o formato que você vai manter
Use
-opara nomear a saída,-fpara sobrescrever sem confirmação (necessário em CI),--drawiopara o arquivo editável e--pdfpara documento.--widthe--heightredimensionam a imagem. - 5
Ou não instale nada
Abra dac.moretes.com, escolha um modelo, edite o YAML no Monaco, alterne entre PNG e draw.io e baixe o resultado com um clique.
git clone https://github.com/fernando-moretes/tool-diagram-as-code.git
cd tool-diagram-as-code
make build
./awsdac --version
# PNG (padrão / default)
./awsdac examples/alb-ec2.yaml -o alb-ec2.png -f
# draw.io editável / editable draw.io
./awsdac examples/alb-ec2.yaml --drawio -o alb-ec2.drawio -f
# PDF
./awsdac examples/alb-ec2.yaml --pdf -o alb-ec2.pdf -f
# [beta] a partir de CloudFormation / from CloudFormation
./awsdac template.yaml -c -o from-cfn.png
./awsdac template.yaml -d -o from-cfn.dac.yamlDuas coisas que falham sem avisar
CloudFormation em beta: -c e -d são ponto de partida, não diagrama final. Template grande gera desenho que precisa de ajuste manual, então prefira -d e versione o YAML resultante. Caminho antigo do repositório: o README ainda cita github.com/fernandofatech/diagram-as-code, de antes da migração para a org fernando-moretes. O GitHub redireciona o clone, mas go install depende do module path declarado no go.mod; se ele falhar, compile pelo clone.
Onde ele entra no fluxo de trabalho
O uso que mais rende não é gerar um diagrama bonito uma vez, é gerar o mesmo diagrama em todo merge. Como o binário não depende de navegador headless, ele roda num container de CI em segundos: o pipeline chama awsdac arquitetura.yaml -o docs/arquitetura.png -f e publica a imagem junto da documentação. Se o YAML mudou e a imagem não, o build mostra.
Junto do IaC: o YAML do diagrama mora no mesmo repositório do Terraform ou do CloudFormation. Quem altera a rede na mesma PR altera o desenho, e o revisor vê as duas coisas lado a lado.
Para apresentação: gere o .drawio, abra no draw.io e faça o acabamento visual ali. O YAML continua sendo a verdade estrutural; o .drawio é a camada editável para quem não vai abrir um terminal.
Como biblioteca: se você tem uma ferramenta própria, um agente de IA que propõe arquitetura, por exemplo, o pkg/diagram permite gerar o desenho sem chamar o CLI como processo externo.
Perguntas frequentes
Qual a diferença para o upstream da awslabs?
O motor é o mesmo. O fork acrescenta exportação .drawio nativa, PNG/PDF derivados do .drawio quando o binário existe, o pacote público pkg/diagram, o servidor local cmd/api-dev e o editor web hospedado na Vercel.
Serve para diagrama que não é AWS?
Sim, desde que você escreva um definition file com os ícones e estilos. Lembre que carregar definição de URL fora do repositório oficial exige --allow-untrusted-definitions.
Preciso instalar algo para usar o editor web?
Não. O editor em dac.moretes.com roda no navegador e o render acontece numa Vercel Function em Go.
Ele lê meu ambiente AWS para desenhar?
Não. Ele desenha a partir do YAML ou, em beta, de um template CloudFormation. Não há chamada à sua conta AWS.
Referências
Para quem é
Use este fork quando o diagrama precisa acompanhar o código: o time já versiona IaC no Git, quer o desenho revisado na mesma PR e precisa de um .drawio editável para quem não usa terminal. Use o upstream da awslabs se PNG basta e você prefere seguir só o projeto mantido pela AWS. Para um desenho único de apresentação, sem intenção de manter, o editor web resolve sem instalar nada, e uma ferramenta visual pura talvez seja mais rápida.
Deep dives de arquitetura, AWS, IA e mercado: direto no seu email. Grátis.
Sem spam · cancele quando quiser