Genereren uit code
Kopieer de kant-en-klare codevoorbeelden op deze pagina en plak ze in de tool Genereren uit code van LetDraw om in seconden een diagram te produceren. De tool detecteert het formaat automatisch; zie voor details de pagina Genereren uit code.
Hoe het te gebruiken: open More tools (⋯) -> Generate from Code in de onderste werkbalk, kopieer het codeblok uit een van de onderstaande voorbeelden, plak het en druk op Add. Het kleine schema boven elk voorbeeld is een preview van de structuur die die code produceert; kopieer bij het kopiëren alleen het codeblok eronder.
Alle voorbeelden zijn opgebouwd rond hetzelfde e-commerce (winkel)-scenario.
SQL (PostgreSQL-schema)
Section titled “SQL (PostgreSQL-schema)”Zet CREATE TABLE-statements en hun foreign-key-relaties om in een ER
(entity-relationship)-diagram.
De structuur die deze code produceert:
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));Kubernetes (manifest)
Section titled “Kubernetes (manifest)”Zet objecten zoals Deployment, Service, Ingress en PVC, en de verbanden ertussen (label / selector / referentie), om in een architectuurdiagram.
De structuur die deze code produceert:
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: v1kind: Namespacemetadata: name: shopping
---
############################################################ Service Account###########################################################
apiVersion: v1kind: ServiceAccountmetadata: name: shopping-sa namespace: shopping
---
############################################################ Role###########################################################
apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: name: shopping-role namespace: shopping
rules:
- apiGroups: [""] resources: - pods - services - configmaps verbs: - get - list - watch
---
############################################################ RoleBinding###########################################################
apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: 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: v1kind: PersistentVolume
metadata: name: postgres-pv
spec:
capacity: storage: 20Gi
accessModes: - ReadWriteOnce
storageClassName: manual
hostPath: path: /data/postgres
---
############################################################ PVC###########################################################
apiVersion: v1kind: PersistentVolumeClaim
metadata: name: postgres-pvc namespace: shopping
spec:
storageClassName: manual
accessModes: - ReadWriteOnce
resources: requests: storage: 20Gi
---
############################################################ PostgreSQL Deployment###########################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata: name: postgres-service
spec:
selector: app: postgres
ports:
- port: 5432 targetPort: 5432
---
############################################################ Backend Deployment###########################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata: name: api-service
spec:
selector:
app: shopping-api
ports:
- port: 80
targetPort: 8080
---
############################################################ Frontend Deployment###########################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata: name: frontend-service
spec:
selector:
app: shopping-web
ports:
- port: 80
targetPort: 80
---
############################################################ Admin Deployment###########################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata: name: admin-service
spec:
selector:
app: admin
ports:
- port: 80
targetPort: 8081
---
############################################################ Ingress###########################################################
apiVersion: networking.k8s.io/v1kind: 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: 80Docker Compose
Section titled “Docker Compose”Zet services en hun afhankelijkheden (depends_on, networks, environment) om in een
servicediagram.
De structuur die deze code produceert:
Browser └─ Frontend (Nginx) └─ API Service ├─ Authentication ├─ Payment ── RabbitMQ ├─ Redis ├─ PostgreSQL ├─ MinIO └─ Elasticsearch ── Kibanaversion: "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:Helm (template + values)
Section titled “Helm (template + values)”Zet de resources van een Helm Chart en de verbanden tussen values.yaml en de
templates om in een resourcediagram.
De structuur die deze code produceert:
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: v1kind: ServiceAccountmetadata: name: {{ $app }}-sa
---
############################################################### ConfigMap##############################################################
apiVersion: v1kind: ConfigMapmetadata: name: {{ $app }}-config
data:
DB_HOST: postgres-service
DB_PORT: "5432"
REDIS_HOST: redis-service
---
############################################################### Secret##############################################################
apiVersion: v1kind: Secret
metadata: name: {{ $app }}-secret
type: Opaque
stringData:
DB_USER: admin
DB_PASSWORD: password
---
############################################################### PVC##############################################################
apiVersion: v1kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
############################################################### PostgreSQL Deployment##############################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata:
name: postgres-service
spec:
selector:
app: postgres
ports:
- port: 5432
---
############################################################### Backend Deployment##############################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata:
name: api-service
spec:
selector:
app: shopping-api
ports:
- port: 80
targetPort: 8080
---
############################################################### Frontend Deployment##############################################################
apiVersion: apps/v1kind: 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: v1kind: Service
metadata:
name: frontend-service
spec:
selector:
app: shopping-web
ports:
- port: 80
---
############################################################### Ingress##############################################################
apiVersion: networking.k8s.io/v1kind: 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.comTerraform (Azure)
Section titled “Terraform (Azure)”Zet resources en de afhankelijkheden ertussen (impliciete afhankelijkheden) om in een resourcediagram.
De structuur die deze code produceert:
Resource Group ├─ Virtual Network │ └─ Subnet │ ├─ Network Security Group ── NSG Association │ ├─ Public IP │ └─ Network Interface ── Linux VM └─ Storage Accountterraform { 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"}