🪷 Diagrams: Crea diagrammi di Architetture Cloud con Python

  


Diagrams è una libreria Python open-source che consente di creare diagrammi di infrastruttura cloud in modo programmatico. Invece di disegnare manualmente architetture su strumenti come Lucidchart, Draw.io o Miro, con Diagrams puoi scrivere codice Python per generare automaticamente diagrammi visivi chiari, aggiornabili e versionabili via Git.

👉 Sito ufficiale: https://diagrams.mingrammer.com/

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

Perché usare Diagrams

  • Automatizzabile: Puoi generare diagrammi dinamicamente in base ai tuoi ambienti.
  • Versionabile: I diagrammi sono creati da codice, quindi perfetti per Git.
  • Supporto Multi-Cloud: AWS, Azure, GCP, Kubernetes, On-prem, SaaS e molto altro.
  • Facile da usare: Sintassi leggibile e intuitiva.
  • Perfetto per DevOps/SRE/Cloud Architects.

🚀 Installazione

# Installa Graphviz (Ubuntu/Debian)
sudo apt install graphviz

# Oppure su macOS
brew install graphviz

# Oppure su Windows tramite download dell'installer
https://graphviz.gitlab.io/download/

# Poi installa Diagrams
pip install diagrams

🛠️ Primo esempio: Diagramma AWS semplice

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("Web Service", show=True):
    ELB("lb") >> EC2("web") >> RDS("userdb")

📌 Questo genererà un diagramma con un Load Balancer collegato a un'istanza EC2, a sua volta collegata a un database RDS.

fonte https://diagrams.mingrammer.com/docs/getting-started/installation


🌐 Esempi per Provider Cloud

Di seguito una lista di script per iniziare a prendere confidenza con la libreria.

🧱 Cluster e Gruppi

from diagrams import Cluster, Diagram
from diagrams.k8s.compute import Pod
from diagrams.k8s.network import Ingress
from diagrams.k8s.group import Namespace

with Diagram("Kubernetes Namespace", show=False):
    ns = Namespace("Prod")

    with Cluster("Ingress Controller"):
        ingress = Ingress("nginx")

    with Cluster("Namespace: Prod"):
        pod1 = Pod("backend")
        pod2 = Pod("frontend")

    ingress >> [pod1, pod2]

🟡 AWS Microservizi

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.network import ELB
from diagrams.aws.database import Dynamodb
from diagrams.aws.general import Client

with Diagram("Microservizi AWS", show=False):
    client = Client("utente")

    with Cluster("VPC"):
        lb = ELB("load balancer")

        with Cluster("ECS Cluster"):
            service1 = ECS("servizio 1")
            service2 = ECS("servizio 2")

        db = Dynamodb("dynamo")

        client >> lb >> [service1, service2]
        [service1, service2] >> db

🔵 GCP Data Pipeline

from diagrams import Diagram
from diagrams.gcp.analytics import BigQuery
from diagrams.gcp.storage import GCS
from diagrams.gcp.compute import Functions

with Diagram("Pipeline dati GCP", show=False):
    storage = GCS("Raw Data")
    fn = Functions("Processing")
    bq = BigQuery("Data Warehouse")

    storage >> fn >> bq

🟣 Azure Web App

from diagrams import Diagram
from diagrams.azure.compute import FunctionApps
from diagrams.azure.web import WebApps
from diagrams.azure.database import CosmosDb

with Diagram("Web App Azure", show=False):
    web = WebApps("Web Frontend")
    functions = FunctionApps("API")
    db = CosmosDb("DB")

    web >> functions >> db

🎨 Personalizzazione & Opzioni Avanzate

  • show=False: Non apre automaticamente l'immagine.
  • direction="LR": Cambia la direzione del diagramma (LR, TB, RL…).
  • outformat="png": Specifica il formato di output.
  • filename="nome_output": Imposta il nome del file.
with Diagram("Personalizzato", direction="LR", outformat="svg", filename="custom", show=False):
    ...

🧩 Ampio Supporto di Provider

Diagrams supporta tantissimi provider e servizi:

  • AWS, Azure, GCP
  • Kubernetes
  • Alibaba Cloud
  • On-prem (server, storage, router)
  • SaaS (GitHub, Jenkins, Slack, etc.)
  • Custom Icons (puoi usare immagini personalizzate!)

Consulta la lista completa:
👉 https://diagrams.mingrammer.com/docs/nodes


Esempio con icone personalizzate

from diagrams import Diagram, Node

class CustomNode(Node):
    _provider = "custom"
    _icon_dir = "./custom_icons"
    fontcolor = "#ffffff"

    def __init__(self, label: str, icon: str):
        super().__init__(label, icon)

with Diagram("Icone Personalizzate", show=False):
    CustomNode("Tool", "mylogo.png")

🔁 Automazione

Puoi integrare Diagrams in:

  • Script CI/CD per generare diagrammi aggiornati
  • Documentazione tecnica automatica
  • Pipeline GitHub Actions o Jenkins

📦 Struttura Progetto Consigliata

infra-diagrams/
├── diagrams/
│   ├── aws_arch.py
│   ├── gcp_data_pipeline.py
├── custom_icons/
│   └── mylogo.png
├── README.md

📝 Conclusione

Diagrams è uno strumento potente per chi lavora con infrastrutture cloud e vuole mantenere la documentazione allineata, chiara e automatica. È una delle soluzioni più eleganti per colmare il gap tra codice e rappresentazione visuale.


🔗 Risorse Utili


Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment