Pular para o conteúdo
fernando.moretes.com
BlogEstudosCursosE-booksOpen SourcePodcasts
Loading…
Fernando Azevedo

Arquiteto de TI Especialista

Arquitetura, AWS, IA em produção, sistemas financeiros e FinOps, escritos a partir do que foi operado, com os números.

  • LinkedIn
  • GitHub
  • E-mail

Conteúdo

  • Blog
  • Estudos de arquitetura
  • Cursos
  • E-books
  • Open Source
  • Podcasts
  • Assuntos
  • Trilhas

Ferramentas

  • Well-Architected self-check
  • Arquitetura deste site
  • Números públicos
  • Histórico de estudo

Sobre

  • Comunidade
  • IA Builder
  • Perfil
  • Currículo (CV)
  • Trabalhe comigo
  • Media kit
  • RSS do blog
  • RSS dos estudos
  • Artigos narrados (podcast)
  • llms.txt
  • Termos, privacidade e uso de IA

(c) 2026 Fernando Francisco Azevedo

Open Source/diagram-as-code
Go fork

diagram-as-code

Diagrama AWS em YAML versionado no Git, com saída PNG, PDF ou draw.io e editor web

1Apache-2.0Atualizado em 7 de out. de 2026000 visualizações00 reproduções
Compartilhar:LinkedInWhatsAppXBaixar em Markdown
#architecture#diagram-as-code#moretes#portfolio
Ver no GitHub Site
git clone https://github.com/fernando-moretes/tool-diagram-as-code.git
Ouvir guia

cerca 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

CLI 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.
Layout automático de grupos: posição e tamanho de VPC, subnet e demais grupos são ajustados pelo próprio CLI, você descreve hierarquia e não coordenada.
Exportação draw.io (do fork): --drawio ou -o saida.drawio gera o arquivo editável; o pipeline vive em internal/ctl/drawio.go e drawio_assets.go.
Editor web (do fork): Monaco para o YAML, alternância PNG/draw.io, modelos prontos (ALB+EC2, VPC+NAT, ALB+AutoScaling, Multi-Region) e backend Go em Vercel Functions.
Uso como biblioteca: o pacote público pkg/diagram permite embutir a geração em outra ferramenta de IaC ou de IA.
CloudFormation em beta: -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.

💻 Local / CI
  • awsdac CLI · Go
  • Definition files · ícones AWS / custom
  • CloudFormation · -c / -d (beta)
▲ Vercel: editor web
  • Editor Monaco · dac.moretes.com
  • Vercel Function · handler Go
📤 Saída
  • 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. 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 .drawio deste fork, compile a partir do código: é o caminho em que você sabe exatamente qual binário está rodando.

  2. 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 (ou awsdac.exe no Windows). Confira com ./awsdac --version.

  3. 3

    Parta de um exemplo

    A pasta examples/ tem modelos prontos. awsdac examples/alb-ec2.yaml gera output.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. 4

    Gere o formato que você vai manter

    Use -o para nomear a saída, -f para sobrescrever sem confirmação (necessário em CI), --drawio para o arquivo editável e --pdf para documento. --width e --height redimensionam a imagem.

  5. 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.

Quickstart a partir do código, com as saídas que o fork acrescenta
bash
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.yaml

Duas 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

GitHub: fernando-moretes/tool-diagram-as-codeEditor web: dac.moretes.comUpstream: awslabs/diagram-as-codeAWS Architecture Icons

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.

Curte open source e arquitetura? Receba mais.

Deep dives de arquitetura, AWS, IA e mercado: direto no seu email. Grátis.

Sem spam · cancele quando quiser

Guia gerado com IA a partir do repositório e do README. · Fonte

Continue lendo

Pythonmcp-aws-solution-architectServidor MCP bilíngue com 5 ferramentas determinísticas para arquitetura AWSLer HCLaws-ai-reference-architecturesSeis arquiteturas de IA na AWS com decisões, custo S/M/L e TerraformLer TypeScriptqueue-advisor-pricing-appCompare custo e encaixe de SQS, Kinesis, EventBridge e MSK antes de decidirLer