Die meisten von Ihnen haben inzwischen von "Infrastruktur als Code" gehört. Aber der Aufbau von Cloud-Infrastrukturen ist mehr als das Codieren von Infrastruktur. In diesem Blog zeige ich Ihnen, wie ich mir das Leben leichter mache, indem ich Infrastrukturdiagramme aus Code generiere. Wenn Sie meine früheren Blogs über Commit-Nachrichten auf die richtige Art und Weise gelesen haben. werden Sie nicht überrascht sein, dass ich es dem Leser gerne einfach mache. Wenn Sie neu in einem Team sind oder mit einem bestimmten Repository, das Ihr Team pflegt, nicht vertraut sind. Es ist hilfreich, wenn die README.md des Repositorys Ihnen hilft zu verstehen, was das Repository tut.
Ein Bild sagt mehr als tausend Worte!
Schöne Diagramme helfen Ihnen sehr! Aber oft werden sie entweder in einem Programm erstellt, das Sie nicht beherrschen. Oder Sie haben keinen Zugang oder keine Lizenz dafür. Das macht es schwieriger, die Bilder auf dem neuesten Stand zu halten. Und es ist einfacher, sie überhaupt nicht zu aktualisieren. Indem wir die Diagramme auf die gleiche Weise verwalten wie unsere Infrastruktur. Wir erhalten auch die gleichen Vorteile! Nicht nur, dass Sie bei einer Änderung an Ihrer Infrastruktur das Image im selben Commit aktualisieren können. Das macht es für den Reviewer einfacher. Denn neben der Codeänderung sieht er auch eine visuelle Darstellung der Änderung.
Wie funktioniert das?
Genug von der Theorie, wie machen Sie das? In Python gibt es ein Paket namens diagrams. Auf der
mkdir diagrams-as-code
cd diagrams-as-code
poetry init
poetry add diagrams
Sobald Sie das getan haben, können wir eine Datei namens grouped_workers.py:
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("Grouped Workers", show=False, direction="TB", filename="images/grouped_workers"):
ELB("lb") >> [EC2("worker1"),
EC2("worker2"),
EC2("worker3"),
EC2("worker4"),
EC2("worker5")] >> RDS("events")
Wie Sie sehen können, ist die Syntax ziemlich einfach. Wir haben 5 Worker, die sich hinter einem Load Balancer befinden. Die Worker können sich mit einer RDS-Datenbank namens
poetry run python grouped_workers.py
Die Ausgabe sieht so aus:
Ziemlich cool, oder? Machen wir noch einen Versuch, wir erstellen eine Datei namens clustered_web_services.py:
from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, RDS
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53
with Diagram("Clustered Web Services", show=False, filename="images/clustered_web_services"):
dns = Route53("dns")
lb = ELB("lb")
with Cluster("Services"):
svc_group = [ECS("web1"),
ECS("web2"),
ECS("web3")]
with Cluster("DB Cluster"):
db_primary = RDS("userdb")
db_primary - [RDS("userdb ro")]
memcached = ElastiCache("memcached")
dns >> lb >> svc_group
svc_group >> db_primary
svc_group >> memcached
Dieses Beispiel ist also ein wenig komplexer. Wir haben nun Route53 eingeführt und einen Caching-Mechanismus hinzugefügt. Um die Gruppierung zu verdeutlichen, haben wir die Option
poetry run python clustered_web_services.py
Wir erhalten die folgende Ausgabe:

Fazit
Sie werden die gleichen Vorteile von "Infrastruktur als Code" erhalten. Wenn Sie Ihre "Diagramme als Code" verwalten. Die Versionskontrolle ist sofort einsatzbereit. Denn Sie kombinieren die Änderung des Infrastruktur-Codes. Mit der Änderung von Diagrammen als Code machen Sie sich und Ihren Teamkollegen das Leben sehr viel leichter. Foto von Luca Bravo auf Unsplash.
Verfasst von

Joris Conijn
Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.
Contact
