Aller au contenu

Générer à partir du code

Copiez les exemples de code prêts à l’emploi de cette page et collez-les dans l’outil Generate from Code de LetDraw pour produire un diagramme en quelques secondes. L’outil détecte automatiquement le format ; pour plus de détails, consultez la page Generate from Code.

Comment l’utiliser : ouvrez More tools (⋯) -> Generate from Code dans la barre d’outils du bas, copiez le bloc de code de l’un des exemples ci-dessous, collez-le, puis appuyez sur Add. Le petit schéma au-dessus de chaque exemple est un aperçu de la structure produite par ce code ; lors de la copie, copiez uniquement le bloc de code situé en dessous.

Tous les exemples reposent sur le même scénario e-commerce (shopping).

Transforme les instructions CREATE TABLE et leurs relations de clés étrangères en un diagramme ER (entité-association).

La structure produite par ce code :

Customers
└─< Orders
├─< Payments
└─< OrderDetails >─ Products >─ Categories
( ─< one-to-many relationship (1 → N) ; >─ foreign key (N → 1) )
-- ===========================================
-- E-COMMERCE DATABASE SCHEMA
-- PostgreSQL
-- ===========================================
-- ===========================
-- CATEGORIES
-- ===========================
CREATE TABLE categories (
category_id SERIAL PRIMARY KEY,
category_name VARCHAR(100) NOT NULL,
description TEXT
);
-- ===========================
-- PRODUCTS
-- ===========================
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
category_id INT NOT NULL,
product_name VARCHAR(200) NOT NULL,
description TEXT,
price NUMERIC(10,2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
CONSTRAINT fk_products_category
FOREIGN KEY (category_id)
REFERENCES categories(category_id)
);
-- ===========================
-- CUSTOMERS
-- ===========================
CREATE TABLE customers (
customer_id SERIAL PRIMARY KEY,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
phone VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- ===========================
-- ORDERS
-- ===========================
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_id INT NOT NULL,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
total_amount NUMERIC(10,2) DEFAULT 0,
status VARCHAR(30) DEFAULT 'Pending',
CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
);
-- ===========================
-- ORDER DETAILS
-- ===========================
CREATE TABLE order_details (
detail_id SERIAL PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
unit_price NUMERIC(10,2) NOT NULL,
CONSTRAINT fk_orderdetails_order
FOREIGN KEY (order_id)
REFERENCES orders(order_id),
CONSTRAINT fk_orderdetails_product
FOREIGN KEY (product_id)
REFERENCES products(product_id)
);
-- ===========================
-- PAYMENTS
-- ===========================
CREATE TABLE payments (
payment_id SERIAL PRIMARY KEY,
order_id INT NOT NULL,
payment_method VARCHAR(50) NOT NULL,
payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
amount NUMERIC(10,2) NOT NULL,
status VARCHAR(30) DEFAULT 'Completed',
CONSTRAINT fk_payments_order
FOREIGN KEY (order_id)
REFERENCES orders(order_id)
);

Transforme les objets tels que Deployment, Service, Ingress et PVC, ainsi que les liens entre eux (label / selector / reference), en un diagramme d’architecture.

La structure produite par ce code :

Internet
└─ Ingress
├─ frontend-svc ── frontend Pods
├─ api-svc ─────── api Pods ── postgres-svc ── postgres Pod ── PVC → PV
└─ admin-svc ───── admin Pods
ServiceAccount → Role → RoleBinding
###########################################################
# Namespace
###########################################################
apiVersion: v1
kind: Namespace
metadata:
name: shopping
---
###########################################################
# Service Account
###########################################################
apiVersion: v1
kind: ServiceAccount
metadata:
name: shopping-sa
namespace: shopping
---
###########################################################
# Role
###########################################################
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: shopping-role
namespace: shopping
rules:
- apiGroups: [""]
resources:
- pods
- services
- configmaps
verbs:
- get
- list
- watch
---
###########################################################
# RoleBinding
###########################################################
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: shopping-rolebinding
namespace: shopping
subjects:
- kind: ServiceAccount
name: shopping-sa
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: shopping-role
---
###########################################################
# Persistent Volume
###########################################################
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
storageClassName: manual
hostPath:
path: /data/postgres
---
###########################################################
# PVC
###########################################################
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
namespace: shopping
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
###########################################################
# PostgreSQL Deployment
###########################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
serviceAccountName: shopping-sa
nodeSelector:
workload: database
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_DB
value: shopping
- name: POSTGRES_USER
value: admin
- name: POSTGRES_PASSWORD
value: password
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-storage
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-pvc
---
###########################################################
# PostgreSQL Service
###########################################################
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
---
###########################################################
# Backend Deployment
###########################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: shopping-api
spec:
replicas: 3
selector:
matchLabels:
app: shopping-api
template:
metadata:
labels:
app: shopping-api
spec:
serviceAccountName: shopping-sa
nodeSelector:
workload: application
containers:
- name: api
image: company/shopping-api:v1
env:
- name: DB_HOST
value: postgres-service
- name: DB_PORT
value: "5432"
ports:
- containerPort: 8080
---
###########################################################
# Backend Service
###########################################################
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: shopping-api
ports:
- port: 80
targetPort: 8080
---
###########################################################
# Frontend Deployment
###########################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: shopping-web
spec:
replicas: 2
selector:
matchLabels:
app: shopping-web
template:
metadata:
labels:
app: shopping-web
spec:
serviceAccountName: shopping-sa
nodeSelector:
workload: frontend
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
###########################################################
# Frontend Service
###########################################################
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
selector:
app: shopping-web
ports:
- port: 80
targetPort: 80
---
###########################################################
# Admin Deployment
###########################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-panel
spec:
replicas: 1
selector:
matchLabels:
app: admin
template:
metadata:
labels:
app: admin
spec:
serviceAccountName: shopping-sa
containers:
- name: admin
image: company/admin-panel:v1
ports:
- containerPort: 8081
---
###########################################################
# Admin Service
###########################################################
apiVersion: v1
kind: Service
metadata:
name: admin-service
spec:
selector:
app: admin
ports:
- port: 80
targetPort: 8081
---
###########################################################
# Ingress
###########################################################
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shopping-ingress
spec:
ingressClassName: nginx
rules:
- host: shop.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /admin
pathType: Prefix
backend:
service:
name: admin-service
port:
number: 80

Transforme les services et leurs dépendances (depends_on, networks, environment) en un diagramme de services.

La structure produite par ce code :

Browser
└─ Frontend (Nginx)
└─ API Service
├─ Authentication
├─ Payment ── RabbitMQ
├─ Redis
├─ PostgreSQL
├─ MinIO
└─ Elasticsearch ── Kibana
version: "3.9"
services:
####################################################
# Frontend
####################################################
frontend:
image: shopping/frontend:1.0
container_name: frontend
ports:
- "80:80"
depends_on:
- api
environment:
API_URL: http://api:8080
networks:
- shopping-network
####################################################
# Backend API
####################################################
api:
image: shopping/api:1.0
container_name: api
ports:
- "8080:8080"
depends_on:
- postgres
- redis
- rabbitmq
- auth
environment:
DB_HOST: postgres
DB_PORT: 5432
DB_NAME: shopping
DB_USER: admin
DB_PASSWORD: password
REDIS_HOST: redis
AUTH_URL: http://auth:8081
PAYMENT_URL: http://payment:8082
RABBITMQ_HOST: rabbitmq
STORAGE_ENDPOINT: http://minio:9000
networks:
- shopping-network
####################################################
# Authentication Service
####################################################
auth:
image: shopping/auth-service:1.0
container_name: auth
ports:
- "8081:8081"
depends_on:
- postgres
- redis
environment:
DB_HOST: postgres
REDIS_HOST: redis
networks:
- shopping-network
####################################################
# Payment Service
####################################################
payment:
image: shopping/payment-service:1.0
container_name: payment
ports:
- "8082:8082"
depends_on:
- rabbitmq
environment:
RABBITMQ_HOST: rabbitmq
networks:
- shopping-network
####################################################
# PostgreSQL
####################################################
postgres:
image: postgres:16
container_name: postgres
restart: always
environment:
POSTGRES_DB: shopping
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- shopping-network
####################################################
# Redis
####################################################
redis:
image: redis:7
container_name: redis
ports:
- "6379:6379"
networks:
- shopping-network
####################################################
# RabbitMQ
####################################################
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
ports:
- "5672:5672"
- "15672:15672"
networks:
- shopping-network
####################################################
# MinIO
####################################################
minio:
image: minio/minio
container_name: minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio-data:/data
networks:
- shopping-network
####################################################
# Elasticsearch
####################################################
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: elasticsearch
environment:
discovery.type: single-node
xpack.security.enabled: "false"
ports:
- "9200:9200"
volumes:
- elastic-data:/usr/share/elasticsearch/data
networks:
- shopping-network
####################################################
# Kibana
####################################################
kibana:
image: docker.elastic.co/kibana/kibana:8.15.0
container_name: kibana
depends_on:
- elasticsearch
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ports:
- "5601:5601"
networks:
- shopping-network
####################################################
# Networks
####################################################
networks:
shopping-network:
driver: bridge
####################################################
# Volumes
####################################################
volumes:
postgres-data:
minio-data:
elastic-data:

Transforme les ressources d’un Helm Chart et les liens entre values.yaml et les templates en un diagramme de ressources.

La structure produite par ce code :

values.yaml
└─ Helm Template Engine
└─ shopping-release
├─ ConfigMap ────┐
├─ Secret ───────┼─ shopping-api Deployment ── api-service ── Ingress (/api)
├─ ServiceAccount ┘
├─ shopping-web Deployment ── frontend-service ── Ingress (/)
└─ postgres Deployment ── postgres-pvc ── PV
{{- $app := .Values.app.name }}
##############################################################
# ServiceAccount
##############################################################
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ $app }}-sa
---
##############################################################
# ConfigMap
##############################################################
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ $app }}-config
data:
DB_HOST: postgres-service
DB_PORT: "5432"
REDIS_HOST: redis-service
---
##############################################################
# Secret
##############################################################
apiVersion: v1
kind: Secret
metadata:
name: {{ $app }}-secret
type: Opaque
stringData:
DB_USER: admin
DB_PASSWORD: password
---
##############################################################
# PVC
##############################################################
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
##############################################################
# PostgreSQL Deployment
##############################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
serviceAccountName: {{ $app }}-sa
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: {{ $app }}-secret
key: DB_USER
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: {{ $app }}-secret
key: DB_PASSWORD
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: postgres-pvc
---
##############################################################
# PostgreSQL Service
##############################################################
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres
ports:
- port: 5432
---
##############################################################
# Backend Deployment
##############################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: shopping-api
spec:
replicas: {{ .Values.api.replicaCount }}
selector:
matchLabels:
app: shopping-api
template:
metadata:
labels:
app: shopping-api
spec:
serviceAccountName: {{ $app }}-sa
containers:
- name: api
image: "{{ .Values.api.image }}:{{ .Values.api.tag }}"
envFrom:
- configMapRef:
name: {{ $app }}-config
- secretRef:
name: {{ $app }}-secret
ports:
- containerPort: 8080
---
##############################################################
# Backend Service
##############################################################
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: shopping-api
ports:
- port: 80
targetPort: 8080
---
##############################################################
# Frontend Deployment
##############################################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: shopping-web
spec:
replicas: {{ .Values.web.replicaCount }}
selector:
matchLabels:
app: shopping-web
template:
metadata:
labels:
app: shopping-web
spec:
serviceAccountName: {{ $app }}-sa
containers:
- name: nginx
image: "{{ .Values.web.image }}:{{ .Values.web.tag }}"
env:
- name: API_URL
value: http://api-service
---
##############################################################
# Frontend Service
##############################################################
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
selector:
app: shopping-web
ports:
- port: 80
---
##############################################################
# Ingress
##############################################################
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shopping-ingress
spec:
ingressClassName: nginx
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
values.yaml:
app:
name: shopping
api:
image: company/shopping-api
tag: v1.4.2
replicaCount: 3
web:
image: company/shopping-web
tag: v2.1.0
replicaCount: 2
ingress:
host: shop.example.com

Transforme les ressources et les dépendances entre elles (dépendances implicites) en un diagramme de ressources.

La structure produite par ce code :

Resource Group
├─ Virtual Network
│ └─ Subnet
│ ├─ Network Security Group ── NSG Association
│ ├─ Public IP
│ └─ Network Interface ── Linux VM
└─ Storage Account
terraform {
required_version = ">=1.6"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>4.0"
}
}
}
provider "azurerm" {
features {}
}
#########################################
# Resource Group
#########################################
resource "azurerm_resource_group" "rg" {
name = "rg-demo-prod"
location = "West Europe"
}
#########################################
# Virtual Network
#########################################
resource "azurerm_virtual_network" "vnet" {
name = "demo-vnet"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
address_space = ["10.10.0.0/16"]
}
#########################################
# Subnet
#########################################
resource "azurerm_subnet" "subnet" {
name = "application-subnet"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = ["10.10.1.0/24"]
}
#########################################
# Network Security Group
#########################################
resource "azurerm_network_security_group" "nsg" {
name = "application-nsg"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
security_rule {
name = "SSH"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
security_rule {
name = "HTTP"
priority = 110
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "80"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
#########################################
# NSG Association
#########################################
resource "azurerm_subnet_network_security_group_association" "assoc" {
subnet_id = azurerm_subnet.subnet.id
network_security_group_id = azurerm_network_security_group.nsg.id
}
#########################################
# Public IP
#########################################
resource "azurerm_public_ip" "pip" {
name = "vm-public-ip"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
allocation_method = "Static"
sku = "Standard"
}
#########################################
# Network Interface
#########################################
resource "azurerm_network_interface" "nic" {
name = "vm-nic"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.pip.id
}
}
#########################################
# Linux VM
#########################################
resource "azurerm_linux_virtual_machine" "vm" {
name = "demo-vm"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
size = "Standard_B2s"
admin_username = "azureuser"
disable_password_authentication = false
admin_password = "Password123!"
network_interface_ids = [
azurerm_network_interface.nic.id
]
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts"
version = "latest"
}
}
#########################################
# Storage Account
#########################################
resource "azurerm_storage_account" "storage" {
name = "demostorage123456"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}