[{"data":1,"prerenderedAt":1424},["ShallowReactive",2],{"/de-de/blog/gitlab-as-your-aws-control-plane":3,"navigation-de-de":654,"banner-de-de":1088,"footer-de-de":1095,"blog-post-authors-de-de-Javier Urones Monteserín, Clober|Péter Bozsó":1351,"blog-related-posts-de-de-gitlab-as-your-aws-control-plane":1379,"blog-share-wrapper-de-de":1404,"next-steps-de-de":1414},{"id":4,"title":5,"authors":6,"body":9,"category":632,"date":633,"description":634,"extension":635,"externalUrl":636,"faq":636,"featured":637,"heroImage":638,"meta":639,"navigation":640,"path":641,"seo":642,"slug":646,"stem":647,"tags":648,"template":652,"updatedDate":636,"__hash__":653},"blogPosts/de-de/blog/gitlab-as-your-aws-control-plane.md","Von OpenTofu zu Argo CD: GitLab als Control Plane für AWS",[7,8],"Javier Urones Monteserín, Clober","Péter Bozsó",{"type":10,"value":11,"toc":621},"minimark",[12,16,32,37,40,43,66,69,95,98,140,143,146,163,166,192,206,209,212,215,222,260,278,281,292,299,302,314,317,323,326,329,332,335,341,344,347,350,391,394,397,400,403,409,412,415,447,456,459,462,473,476,479,482,485,491,494,518,521,524,544,547,553,556,560,563,578,596,600],[13,14,15],"p",{},"Cloud-Umgebungen zu konfigurieren ist aufwendig: Netzwerke, Subscriptions, Services und alle Komponenten der darunterliegenden Infrastruktur wollen berücksichtigt werden. Ein manuelles Setup ist fehleranfällig, uneinheitlich und schwer zu reproduzieren.",[13,17,18,19,25,26,31],{},"Dieses Tutorial zeigt, wie sich eine vollständig automatisierte Cloud-Umgebung aufsetzen lässt, mit GitLab als Schaltzentrale. Die gesamte Cloud-Infrastruktur ist als Code definiert, liegt in GitLab und wird mit ",[20,21,24],"a",{"href":22,"rel":23},"https://opentofu.org/",[],"OpenTofu"," über GitLab-CI/CD-Pipelines auf AWS ausgerollt. Darüber hinaus übernehmen dieselben Pipelines den Build und das Deployment einer echten Webanwendung, nach GitOps-Praktiken mit ",[20,27,30],{"href":28,"rel":29},"https://argoproj.github.io/cd/",[],"Argo CD",".",[33,34,36],"h2",{"id":35},"warum-infrastructure-as-code-und-gitops-wichtig-sind","Warum Infrastructure as Code und GitOps wichtig sind",[13,38,39],{},"Zunächst lohnt der Blick darauf, warum Infrastructure as Code (IaC) und GitOps wichtig sind und wie GitLab diese Praktiken auf einer Plattform zusammenführt.",[13,41,42],{},"IaC sorgt dafür, dass Umgebungen drei Eigenschaften mitbringen:",[44,45,46,54,60],"ul",{},[47,48,49,53],"li",{},[50,51,52],"strong",{},"Reproduzierbar",": Dieselbe Konfiguration lässt sich überall ausrollen.",[47,55,56,59],{},[50,57,58],{},"Versioniert",": Jede Änderung wird in einem Versionskontrollsystem (VCS) nachvollzogen, üblicherweise in Git.",[47,61,62,65],{},[50,63,64],{},"Automatisiert",": Kein menschliches Eingreifen nötig.",[13,67,68],{},"GitOps führt diese Prinzipien in den Anwendungslebenszyklus weiter. Statt Änderungen manuell auf Kubernetes-Cluster (oder andere Infrastruktur) anzuwenden, liegt der gewünschte Zustand der Anwendungen in Git. Ein GitOps-Operator wie Argo CD sorgt fortlaufend dafür, dass der Cluster dem Stand im Repository entspricht. Das bringt:",[44,70,71,77,83,89],{},[47,72,73,76],{},[50,74,75],{},"Konsistenz"," zwischen Umgebungen",[47,78,79,82],{},[50,80,81],{},"Schnellere Wiederherstellung"," durch Rollbacks, die nicht mehr verlangen als das Zurücknehmen eines Commits",[47,84,85,88],{},[50,86,87],{},"Bessere Zusammenarbeit",", weil Teams Änderungen über Merge Requests prüfen und freigeben",[47,90,91,94],{},[50,92,93],{},"Mehr Sicherheit"," durch Deployments, für die Entwicklungsteams keinen direkten Zugriff auf den Cluster brauchen",[13,96,97],{},"GitLab vereint alle Fähigkeiten, die dieser Ansatz verlangt:",[44,99,100,110,120,130],{},[47,101,102,109],{},[50,103,104],{},[20,105,108],{"href":106,"rel":107},"https://docs.gitlab.com/user/get_started/get_started_managing_code/",[],"Source Code Management",": Infrastruktur- und Anwendungscode an einem Ort führen.",[47,111,112,119],{},[50,113,114],{},[20,115,118],{"href":116,"rel":117},"https://docs.gitlab.com/ci/",[],"CI/CD-Pipelines",": Bereitstellung mit OpenTofu und Deployments mit Kubernetes-Manifesten automatisieren.",[47,121,122,129],{},[50,123,124],{},[20,125,128],{"href":126,"rel":127},"https://docs.gitlab.com/user/infrastructure/iac/terraform_state/",[],"Terraform-States",": State-Dateien der Infrastruktur sicher speichern und verwalten.",[47,131,132,139],{},[50,133,134],{},[20,135,138],{"href":136,"rel":137},"https://docs.gitlab.com/user/packages/container_registry/",[],"Container Registry",": Container-Images neben Code und Pipelines bauen, ablegen und verwalten.",[13,141,142],{},"Mit GitLab läuft alles über eine Plattform, von der Bereitstellung der Cloud-Infrastruktur bis zur Auslieferung der Anwendung.",[13,144,145],{},"Für dieses Tutorial sind nötig:",[44,147,148,151,154,157,160],{},[47,149,150],{},"Grundkenntnisse in GitLab-CI/CD-Pipelines und Git",[47,152,153],{},"Vertrautheit mit IaC (Terraform oder OpenTofu) und GitOps",[47,155,156],{},"Ein AWS-Konto",[47,158,159],{},"Ein Kubernetes-Cluster (EKS wird im Tutorial bereitgestellt)",[47,161,162],{},"Ein Dockerfile für die Beispiel-Webanwendung",[13,164,165],{},"Das Tutorial enthält Anleitungen für folgende Schritte:",[44,167,168,174,180,186],{},[47,169,170],{},[20,171,173],{"href":172},"#eine-vollst%C3%A4ndige-aws-umgebung-mit-opentofu-bereitstellen","Eine vollständige AWS-Umgebung mit OpenTofu bereitstellen",[47,175,176],{},[20,177,179],{"href":178},"#kubernetes-werkzeuge-automatisch-konfigurieren","Kubernetes-Werkzeuge automatisch konfigurieren",[47,181,182],{},[20,183,185],{"href":184},"#eine-beispiel-webanwendung-mit-argo-cd-nach-gitops-prinzipien-ausrollen","Eine Beispiel-Webanwendung mit Argo CD nach GitOps-Prinzipien ausrollen",[47,187,188],{},[20,189,191],{"href":190},"#eine-beispiel-webanwendung-mit-gitlab-cicd-bauen-und-paketieren","Eine Beispiel-Webanwendung mit GitLab CI/CD bauen und paketieren",[13,193,194,195,200,201,31],{},"Wie sich dieses Beispiel in der eigenen GitLab-Umgebung nachbauen lässt, steht weiter unten. Der Quellcode des ",[20,196,199],{"href":197,"rel":198},"https://gitlab.com/gitlab-partners-public/satec/aws-summit-2025-demo",[],"Beispiels"," liegt in der ",[20,202,205],{"href":203,"rel":204},"https://gitlab.com/gitlab-partners-public/satec",[],"SATEC Public Demo Group",[33,207,173],{"id":208},"eine-vollständige-aws-umgebung-mit-opentofu-bereitstellen",[13,210,211],{},"Der erste Schritt ist die Bereitstellung der Cloud-Infrastruktur mit OpenTofu, dem Open-Source-Fork von Terraform. Netzwerkkomponenten lassen sich damit deklarativ definieren und ein Amazon-EKS-Cluster anlegen.",[13,213,214],{},"Damit dieser Vorgang reproduzierbar und sicher bleibt, setzen wir auf CI/CD-Variablen in GitLab statt auf fest verdrahtete Werte. Über diese Variablen lässt sich die AWS-Umgebung pipelineübergreifend dynamisch konfigurieren.",[13,216,217,218,221],{},"Folgende Umgebungsvariablen sind erforderlich und werden unter ",[50,219,220],{},"Settings > CI/CD > Variables"," in der übergeordneten Gruppe angelegt, damit alle Projekte sie erben:",[44,223,224,230,236,242,248,254],{},[47,225,226,229],{},[50,227,228],{},"TF_VAR_region",": AWS-Region, in der die Infrastruktur entsteht (etwa eu-west-1)",[47,231,232,235],{},[50,233,234],{},"TF_VAR_instance_type",": EC2-Instanztyp für die Worker Nodes (etwa t3.medium)",[47,237,238,241],{},[50,239,240],{},"TF_VAR_instance_count",": Anzahl der Worker Nodes im Cluster",[47,243,244,247],{},[50,245,246],{},"TF_VAR_cluster_name",": Name des bereitzustellenden EKS-Clusters",[47,249,250,253],{},[50,251,252],{},"AWS_ACCESS_KEY_ID",": AWS-Access-Key für die Authentifizierung",[47,255,256,259],{},[50,257,258],{},"AWS_SECRET_ACCESS_KEY",": AWS-Secret-Key für die Authentifizierung",[13,261,262,263,267,268,271,272,277],{},"Alle Variablen sind in GitLab als ",[264,265,266],"em",{},"protected"," definiert, sensible wie der AWS Secret Access Key zusätzlich als ",[264,269,270],{},"masked",", sodass sie nur in sicheren CI/CD-Kontexten sichtbar werden. Die Sicherheit lässt sich weiter erhöhen, indem man ",[20,273,276],{"href":274,"rel":275},"https://docs.gitlab.com/ci/variables/#cicd-variable-security",[],"diesem Tutorial zu CI/CD-Variablen"," folgt. Die Trennung von Code und Konfiguration macht die Pipeline flexibel und unabhängig von der jeweiligen Umgebung.",[13,279,280],{},"Ist das konfiguriert, läuft die OpenTofu-Pipeline automatisch und erledigt Folgendes:",[44,282,283,286,289],{},[47,284,285],{},"Netzwerkressourcen bereitstellen (VPC, Subnetze, Gateways, Routing-Tabellen)",[47,287,288],{},"EKS-Control-Plane und Worker-Node-Gruppen bereitstellen",[47,290,291],{},"Die Pipeline auslösen, die Argo CD und CertManager in den neuen Cluster ausrollt",[13,293,294],{},[295,296],"img",{"alt":297,"src":298},"So läuft die Bereitstellung der Infrastruktur ab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786721848/raobe2rbwouolxuakbdl.png",[13,300,301],{},"Das Diagramm oben zeigt, wie die Bereitstellung der Infrastruktur abläuft.",[303,304,305,308,311],"ol",{},[47,306,307],{},"Eine GitLab-Pipeline startet aus dem Infrastruktur-Repository, in dem die Terraform- beziehungsweise OpenTofu-Konfigurationsdateien liegen.",[47,309,310],{},"GitLab CI/CD führt die OpenTofu-Befehle aus und verwaltet die State-Datei über das integrierte Terraform-State-Backend sicher in GitLab.",[47,312,313],{},"OpenTofu verbindet sich über die konfigurierten Provider mit AWS und legt alle nötigen Ressourcen an: VPC, Subnetze, Gateways, Load Balancer und das über mehrere Availability Zones verteilte Amazon-EKS-Cluster.",[13,315,316],{},"Am Ende dieser Phase stehen AWS-Umgebung und Kubernetes-Cluster vollständig bereit und sind betriebsfähig.",[13,318,319],{},[295,320],{"alt":321,"src":322},"AWS-Umgebung und Kubernetes-Cluster vollständig bereitgestellt","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786721902/z6fbu78rw9xprgkrju9p.png",[13,324,325],{},"Den Abschluss dieses Vorgangs bildet ein Post-Deploy-Schritt: Er löst eine zweite GitLab-Pipeline in einem eigenen Repository aus, die Argo CD und CertManager über den Helm Provider automatisch in den neuen EKS-Cluster ausrollt.",[33,327,179],{"id":328},"kubernetes-werkzeuge-automatisch-konfigurieren",[13,330,331],{},"Stehen AWS-Infrastruktur und EKS-Cluster, folgt als nächster Schritt die Konfiguration der Kubernetes-Werkzeuge, die für den Betrieb der Umgebung nötig sind: Argo CD, CertManager und der Ingress NGINX Controller.",[13,333,334],{},"Dieser Vorgang läuft vollständig automatisiert über eine zweite GitLab-Pipeline in einem separaten Repository.",[13,336,337],{},[295,338],{"alt":339,"src":340},"Zweite GitLab-Pipeline in einem separaten Repository","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786721969/tgupmzi9q557f0nivgb7.png",[13,342,343],{},"Die zweite Pipeline wird automatisch aus der Infrastruktur-Pipeline heraus gestartet, über einen Trigger-Job, sobald die OpenTofu-Bereitstellung erfolgreich abgeschlossen ist.",[13,345,346],{},"In der Praxis heißt das: Diese Kernkomponenten werden als Teil desselben durchgängigen Workflows ausgerollt, ohne manuelle Schritte. Das Deployment selbst übernimmt OpenTofu über den Helm Provider, mit dem sich Helm-Charts deklarativ als Code über GitLab verwalten lassen.",[13,348,349],{},"Vereinfacht sieht der Ablauf so aus:",[303,351,352,358,381,384],{},[47,353,354,357],{},[50,355,356],{},"Die erste Pipeline"," stellt den EKS-Cluster bereit und löst über einen GitLab-Trigger-Job die zweite aus.",[47,359,360,363,364],{},[50,361,362],{},"Die zweite Pipeline"," nutzt OpenTofu mit dem Helm Provider, um:",[44,365,366,369,372,375],{},[47,367,368],{},"die Kubeconfig aus dem EKS-Cluster zu laden,",[47,370,371],{},"Argo CD zu installieren (für die GitOps-Verwaltung),",[47,373,374],{},"CertManager zu installieren (für die automatische Verwaltung von TLS-Zertifikaten),",[47,376,377,378],{},"den Ingress NGINX Controller zu installieren (für das Routing des Ingress-Verkehrs). ",[264,379,380],{},"(Hinweis: Der Ingress NGINX Controller wird im Kubernetes-Ökosystem abgekündigt. Für neue Deployments empfiehlt sich, Alternativen wie Traefik oder einen Ansatz über ein API-Gateway zu prüfen.)",[47,382,383],{},"Jedes Helm-Release ist in der OpenTofu-Konfiguration definiert, sodass Upgrades und Rollbacks über gewöhnliche Änderungen am Infrastrukturcode laufen.",[47,385,386,387,390],{},"Zuletzt startet ",[50,388,389],{},"eine dritte Pipeline",", die die Beispiel-Webanwendung ausrollt. Diese Pipeline wendet die Argo-CD-Anwendungsmanifeste an, die die Webanwendung und die zugehörigen Ressourcen definieren.",[33,392,185],{"id":393},"eine-beispiel-webanwendung-mit-argo-cd-nach-gitops-prinzipien-ausrollen",[13,395,396],{},"Sind alle Kubernetes-Kernkomponenten installiert (Argo CD, CertManager und Ingress NGINX Controller), beginnt die letzte Phase der Automatisierung. Dieser Schritt läuft automatisch an, sobald die Installation der Helm-Charts abgeschlossen ist.",[13,398,399],{},"Eine dritte GitLab-Pipeline startet und rollt eine Beispiel-Webanwendung über Argo CD in den neu erstellten EKS-Cluster aus.",[13,401,402],{},"Das Diagramm unten zeigt den Gesamtablauf:",[13,404,405],{},[295,406],{"alt":407,"src":408},"GitLab verbindet sich mit der von OpenTofu erzeugten Kubeconfig zum Cluster und wendet die Argo-CD-Anwendungsmanifeste an, die den gewünschten Zustand der Webanwendung definieren","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786722029/aw36utqgxlj6ipmw6rgj.png",[13,410,411],{},"In dieser Phase verbindet sich GitLab mit der von OpenTofu erzeugten Kubeconfig zum Cluster und wendet die Argo-CD-Anwendungsmanifeste an, die den gewünschten Zustand der Webanwendung definieren.",[13,413,414],{},"Die Pipeline:",[44,416,417,423,429,435,441],{},[47,418,419,422],{},[50,420,421],{},"lädt und aktualisiert die Kubeconfig",", um sich mit dem EKS-Cluster zu verbinden,",[47,424,425,428],{},[50,426,427],{},"aktualisiert Zugangsdaten und Repository-Angaben"," dynamisch über CI/CD-Variablen,",[47,430,431,434],{},[50,432,433],{},"erstellt den Kubernetes-Namespace"," für die Anwendung (aws-summit-app),",[47,436,437,440],{},[50,438,439],{},"wendet die Argo-CD-Manifeste an"," (repository.yaml, application.yaml, cluster-issuer.yaml),",[47,442,443,446],{},[50,444,445],{},"erstellt ein Container-Registry-Secret",", damit die Anwendung Images über einen Access Token sicher aus GitLab ziehen kann.",[13,448,449,450,455],{},"Das alles läuft automatisch über ",[20,451,454],{"href":452,"rel":453},"https://about.gitlab.com/de-de/blog/ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation/",[],"GitLab CI/CD",", ohne manuelles Eingreifen.",[13,457,458],{},"Sind die Manifeste angewendet, erkennt der Argo-CD-Controller sie und synchronisiert den Anwendungszustand mit dem Repository, wodurch die Beispiel-Webseite in den EKS-Cluster ausgerollt wird.",[13,460,461],{},"Das Ergebnis ist eine voll betriebsfähige Kubernetes-Umgebung, in der:",[44,463,464,467,470],{},[47,465,466],{},"die Infrastruktur mit OpenTofu bereitgestellt ist,",[47,468,469],{},"die Cluster-Werkzeuge deklarativ mit Helm installiert sind,",[47,471,472],{},"die Anwendungen per GitOps über Argo CD ausgerollt und verwaltet werden.",[13,474,475],{},"So entstehen durchgängige Automatisierung, Nachvollziehbarkeit und Reproduzierbarkeit, alles über GitLab gesteuert.",[33,477,191],{"id":478},"eine-beispiel-webanwendung-mit-gitlab-cicd-bauen-und-paketieren",[13,480,481],{},"Bevor Argo CD die Anwendung ausrollt, muss sie gebaut, containerisiert und in der GitLab Container Registry veröffentlicht werden.",[13,483,484],{},"Dafür sorgt eine eigene CI/CD-Pipeline, die einer GitOps-Repository-Struktur folgt: Quellcode und Kubernetes-Manifeste liegen in getrennten Repositorys.",[13,486,487],{},[295,488],{"alt":489,"src":490},"Eine eigene CI/CD-Pipeline, die einer GitOps-Repository-Struktur folgt","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786722075/nqscss5qee8sdydrej0d.png",[13,492,493],{},"Die GitLab-Gruppe ist dabei in zwei Bereiche gegliedert:",[44,495,496,507],{},[47,497,498,501,502],{},[50,499,500],{},"Apps/"," enthält die Quellcode-Repositorys der Anwendungen.",[44,503,504],{},[47,505,506],{},"Beispiel: aws-summit-app/web enthält den Quellcode der Beispiel-Webseite.",[47,508,509,512,513],{},[50,510,511],{},"Deployments/"," enthält die Repositorys mit den Kubernetes-Manifesten je Anwendung.",[44,514,515],{},[47,516,517],{},"Beispiel: aws-summit-app/web unter Deployments definiert die Kubernetes-Manifeste, mit denen die Webseite ausgerollt wird (deployment.yaml, ingress.yaml, service.yaml und weitere).",[13,519,520],{},"Diese Trennung ermöglicht einen sauberen GitOps-Ablauf, denn Anwendungscode und Deployment-Konfigurationen sind voneinander unabhängig und bleiben über die Automatisierung dennoch synchron.",[13,522,523],{},"Die CI/CD-Pipeline im Anwendungs-Repository automatisiert diese Aufgaben:",[44,525,526,532,538],{},[47,527,528,531],{},[50,529,530],{},"Bauen und paketieren:"," Die Pipeline kompiliert den Quellcode und baut das Docker-Image anhand des mitgelieferten Dockerfile.",[47,533,534,537],{},[50,535,536],{},"In der GitLab Container Registry veröffentlichen:"," Das Image wird automatisch getaggt und in die integrierte GitLab Container Registry geschoben.",[47,539,540,543],{},[50,541,542],{},"Deployment-Manifeste aktualisieren:"," Ist das Image veröffentlicht, führt die Pipeline einen Job aus, der die Image-Referenz im zugehörigen Deployment-Repository aktualisiert (unter Deployments/aws-summit-app/web).",[13,545,546],{},"Das geschieht automatisch, indem der neue Image-Tag committet oder ein Merge Request erstellt wird.",[13,548,549],{},[295,550],{"alt":551,"src":552},"Den neuen Image-Tag committen oder einen Merge Request erstellen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786722113/zdh3bk63swvxibhaw5m9.png",[13,554,555],{},"Sobald Commit oder Merge Request vorliegen, erkennt Argo CD die Änderung im Deployment-Repository und synchronisiert die aktualisierten Manifeste mit dem Kubernetes-Cluster. Damit ist die neue Anwendungsversion ohne manuelles Eingreifen ausgerollt.",[33,557,559],{"id":558},"fazit","Fazit",[13,561,562],{},"Dieses Tutorial hat gezeigt, wie sich eine vollständig automatisierte Cloud-Umgebung mit GitLab als Dreh- und Angelpunkt aufbauen lässt und damit die eingangs gesetzten Ziele erreicht: eine Infrastruktur, die reproduzierbar, versioniert und automatisiert ist. Aus der Kombination von OpenTofu für die Bereitstellung, GitLab CI/CD für die Pipeline-Orchestrierung und Argo CD für die GitOps-basierte Auslieferung ergibt sich ein Lebenszyklus, der sich vollständig über eine Plattform verwalten lässt, von den Cloud-Ressourcen bis zur laufenden Anwendung.",[13,564,565,566,571,572,577],{},"Als GitLab-Partner mit ausgewiesener Erfahrung in Cloud-Infrastruktur und DevSecOps-Praktiken unterstützt ",[20,567,570],{"href":568,"rel":569},"https://www.clober.tech/",[],"Clober"," (Gruppe ",[20,573,576],{"href":574,"rel":575},"https://www.satec.es/en",[],"SATEC",") Organisationen dabei, vergleichbare automatisierte Umgebungen passend zum eigenen Bedarf umzusetzen.",[13,579,580],{},[264,581,582,583,571,586,589,590,595],{},"Hinweis: Dieser Beitrag beruht auf einer Live-Demo, die das DevSecOps-Team von ",[20,584,570],{"href":568,"rel":585},[],[20,587,576],{"href":574,"rel":588},[],") 2025 auf dem ",[20,591,594],{"href":592,"rel":593},"https://aws.amazon.com/de/events/summits/madrid/",[],"AWS Summit Madrid"," gezeigt hat.",[33,597,599],{"id":598},"ressourcen","Ressourcen",[44,601,602,609,615],{},[47,603,604],{},[20,605,608],{"href":606,"rel":607},"https://docs.gitlab.com/ci/components/",[],"GitLab-CI/CD-Komponenten",[47,610,611],{},[20,612,614],{"href":136,"rel":613},[],"GitLab Container Registry",[47,616,617],{},[20,618,620],{"href":126,"rel":619},[],"GitLab-verwaltetes Terraform-State-Management",{"title":622,"searchDepth":623,"depth":623,"links":624},"",2,[625,626,627,628,629,630,631],{"id":35,"depth":623,"text":36},{"id":208,"depth":623,"text":173},{"id":328,"depth":623,"text":179},{"id":393,"depth":623,"text":185},{"id":478,"depth":623,"text":191},{"id":558,"depth":623,"text":559},{"id":598,"depth":623,"text":599},"engineering","2026-08-18","AWS-Infrastruktur und App-Auslieferung durchgängig automatisieren: OpenTofu stellt EKS bereit, GitLab CI/CD baut, Argo CD deployt per GitOps.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773865762/yti4ngyppos6amxsv0dj.png",{},true,"/de-de/blog/gitlab-as-your-aws-control-plane",{"config":643,"title":644,"description":645},{"noIndex":637},"GitLab als Control Plane für AWS","AWS-Infrastruktur und App-Auslieferung durchgängig automatisieren: OpenTofu stellt EKS bereit, GitLab CI/CD baut und paketiert, Argo CD deployt per GitOps.","gitlab-as-your-aws-control-plane","de-de/blog/gitlab-as-your-aws-control-plane",[649,650,651],"AWS","GitOps","partners","BlogPost","-rKlDN2WNo4SUeJiMDcRVrwp_kENA_NfcLNWvw59Ss8",{"logo":655,"freeTrial":660,"sales":665,"login":670,"items":675,"search":1004,"minimal":1039,"duo":1058,"switchNav":1067,"pricingDeployment":1078},{"config":656},{"href":657,"dataGaName":658,"dataGaLocation":659},"/de-de/","gitlab logo","header",{"text":661,"config":662},"Kostenlose Testversion anfordern",{"href":663,"dataGaName":664,"dataGaLocation":659},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":666,"config":667},"Demo anfordern",{"href":668,"dataGaName":669,"dataGaLocation":659},"/request-a-demo/","sales",{"text":671,"config":672},"Anmelden",{"href":673,"dataGaName":674,"dataGaLocation":659},"https://gitlab.com/users/sign_in/","sign in",[676,762,850,855,928,982],{"text":677,"left":640,"config":678,"menu":680},"Plattform",{"dataNavLevelOne":679},"platform",{"type":681,"link":682,"columns":686,"feature":751},"lists",{"text":683,"config":684},"Die Plattform erkunden",{"href":685,"dataGaName":679,"dataGaLocation":659},"/de-de/platform/",[687,710,733],{"title":688,"items":689},"Ausführung und Workflows",[690,695,700,705],{"text":691,"config":692},"CI/CD",{"href":693,"dataGaLocation":659,"dataGaName":694},"/de-de/solutions/continuous-integration/","ci/cd",{"text":696,"config":697},"Quellcodeverwaltung",{"href":698,"dataGaLocation":659,"dataGaName":699},"/de-de/solutions/source-code-management/","source code management",{"text":701,"config":702},"Agile Delivery",{"href":703,"dataGaLocation":659,"dataGaName":704},"/de-de/solutions/agile-delivery/","agile delivery",{"text":706,"config":707},"Artefaktverwaltung",{"href":708,"dataGaLocation":659,"dataGaName":709},"/de-de/artifact-central/","artifact management",{"title":711,"items":712},"Sicherheit und Governance",[713,718,723,728],{"text":714,"config":715},"Anwendungssicherheitstests",{"href":716,"dataGaLocation":659,"dataGaName":717},"/de-de/solutions/application-security-testing/","application security testing",{"text":719,"config":720},"Governance und Compliance",{"href":721,"dataGaLocation":659,"dataGaName":722},"/de-de/solutions/software-compliance/","governance and compliance",{"text":724,"config":725},"Secrets-Management",{"href":726,"dataGaLocation":659,"dataGaName":727},"/de-de/gitlab-secrets-manager/","secrets management",{"text":729,"config":730},"Lieferkettensicherheit",{"href":731,"dataGaLocation":659,"dataGaName":732},"/de-de/solutions/supply-chain/","supply chain security",{"title":734,"items":735},"Kontext und KI",[736,741,746],{"text":737,"config":738},"Agentische Orchestrierung",{"href":739,"dataGaLocation":659,"dataGaName":740},"/de-de/gitlab-duo-agent-platform/","agentic orchestration",{"text":742,"config":743},"Kontextgraph",{"href":744,"dataGaLocation":659,"dataGaName":745},"/de-de/gitlab-orbit/","context graph",{"text":747,"config":748},"Sichtbarkeit und Messung",{"href":749,"dataGaLocation":659,"dataGaName":750},"/de-de/solutions/visibility-measurement/","visibility and measurement",{"config":752,"title":755,"text":756,"link":757},{"background":753,"textColor":754},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Warum GitLab","Eine Plattform für Schnelligkeit und Kontrolle im gesamten Software-Lebenszyklus.",{"text":758,"config":759},"Mehr erfahren",{"href":760,"dataGaName":761,"dataGaLocation":659},"/de-de/why-gitlab/","why gitlab",{"text":763,"left":640,"config":764,"menu":766},"Lösungen",{"dataNavLevelOne":765},"solutions",{"type":681,"link":767,"columns":771,"feature":841},{"text":768,"config":769},"Alle Lösungen anzeigen",{"href":770,"dataGaName":765,"dataGaLocation":659},"/de-de/solutions/",[772,790,808],{"title":773,"items":774},"Ergebnisse",[775,780,785],{"text":776,"config":777},"DevOps-Modernisierung",{"href":778,"dataGaLocation":659,"dataGaName":779},"/de-de/assessments/devops-modernization-assessment/","devops modernization",{"text":781,"config":782},"Sicherheitsmodernisierung",{"href":783,"dataGaLocation":659,"dataGaName":784},"/de-de/assessments/security-modernization-assessment/","security modernization",{"text":786,"config":787},"KI-Modernisierung",{"href":788,"dataGaLocation":659,"dataGaName":789},"/de-de/assessments/ai-modernization-assessment/","ai modernization",{"title":791,"items":792},"Nach Größe",[793,798,803],{"text":794,"config":795},"Große Unternehmen",{"href":796,"dataGaLocation":659,"dataGaName":797},"/de-de/enterprise/","enterprise",{"text":799,"config":800},"Kleine Unternehmen",{"href":801,"dataGaLocation":659,"dataGaName":802},"/de-de/small-business/","small business",{"text":804,"config":805},"Start-ups",{"href":806,"dataGaLocation":659,"dataGaName":807},"/de-de/solutions/startups/","startups",{"title":809,"items":810},"Branchen",[811,816,821,826,831,836],{"text":812,"config":813},"Finanzdienstleistungen",{"href":814,"dataGaLocation":659,"dataGaName":815},"/de-de/solutions/finance/","financial services",{"text":817,"config":818},"Öffentlicher Sektor",{"href":819,"dataGaLocation":659,"dataGaName":820},"/de-de/solutions/public-sector/","public sector",{"text":822,"config":823},"Telekommunikation",{"href":824,"dataGaLocation":659,"dataGaName":825},"/de-de/solutions/telecommunications/","telecommunications",{"text":827,"config":828},"Automobilindustrie",{"href":829,"dataGaLocation":659,"dataGaName":830},"/de-de/solutions/automotive/","automotive",{"text":832,"config":833},"Bildungswesen",{"href":834,"dataGaLocation":659,"dataGaName":835},"/de-de/solutions/education/","education",{"text":837,"config":838},"Luft- und Raumfahrt",{"href":839,"dataGaLocation":659,"dataGaName":840},"/de-de/solutions/aerospace/","aerospace",{"config":842,"title":843,"text":844,"link":845},{"background":753,"textColor":754},"GitLab-Sicherheitsstandard","Mehr dazu, wie du deine Software Factory stärkst und KI-Agenten Autonomie gewinnen lässt, ohne an Sicherheit einzubüßen.",{"text":846,"config":847},"Standard entdecken",{"href":848,"dataGaName":849,"dataGaLocation":659},"/gitlab-security-standard/","gitlab security standard",{"text":851,"config":852},"Preise",{"href":853,"dataGaName":854,"dataGaLocation":659,"dataNavLevelOne":854},"/de-de/pricing/","pricing",{"text":599,"config":856,"menu":858},{"dataNavLevelOne":857},"resources",{"type":681,"link":859,"columns":863,"feature":919},{"text":860,"config":861},"Alle Ressourcen anzeigen",{"href":862,"dataGaName":857,"dataGaLocation":659},"/de-de/resources/",[864,892],{"title":865,"items":866},"Entdecken",[867,872,877,882,887],{"text":868,"config":869},"Dokumentation",{"href":870,"dataGaName":871,"dataGaLocation":659},"https://docs.gitlab.com/","docs",{"text":873,"config":874},"GitLab University",{"href":875,"dataGaName":876,"dataGaLocation":659},"https://university.gitlab.com/","university",{"text":878,"config":879},"Demo-Reihe",{"href":880,"dataGaName":881,"dataGaLocation":659},"/de-de/gitlab-technical-demo-series/","demo series",{"text":883,"config":884},"Demo-Hub",{"href":885,"dataGaName":886,"dataGaLocation":659},"/de-de/demo-hub/","demo hub",{"text":888,"config":889},"Dienste",{"href":890,"dataGaName":891,"dataGaLocation":659},"/de-de/services/","services",{"title":893,"items":894},"Vernetzen",[895,900,905,910,914],{"text":896,"config":897},"Blog",{"href":898,"dataGaName":899,"dataGaLocation":659},"/de-de/blog/","blog",{"text":901,"config":902},"Community",{"href":903,"dataGaName":904,"dataGaLocation":659},"/community/","community",{"text":906,"config":907},"Kunden",{"href":908,"dataGaName":909,"dataGaLocation":659},"/de-de/customers/","customers",{"text":911,"config":912},"Partner",{"href":913,"dataGaName":651,"dataGaLocation":659},"/de-de/partners/",{"text":915,"config":916},"Veranstaltungen",{"href":917,"dataGaName":918,"dataGaLocation":659},"/events/","events",{"config":920,"title":921,"text":922,"link":923},{"background":753,"textColor":754},"Neues bei GitLab","Über die neuesten Funktionen und Verbesserungen auf dem Laufenden bleiben.",{"text":924,"config":925},"Aktuelle Nachrichten",{"href":926,"dataGaName":927,"dataGaLocation":659},"/de-de/whats-new/","whats new",{"text":929,"config":930,"menu":932},"Unternehmen",{"dataNavLevelOne":931},"company",{"type":681,"columns":933},[934],{"items":935},[936,941,947,952,957,962,967,972,977],{"text":937,"config":938},"Über",{"href":939,"dataGaName":940,"dataGaLocation":659},"/de-de/company/","about",{"text":942,"config":943,"footerGa":946},"Karriere",{"href":944,"dataGaName":945,"dataGaLocation":659},"/jobs/","jobs",{"dataGaName":945},{"text":948,"config":949},"Presse",{"href":950,"dataGaName":951,"dataGaLocation":659},"/press/","press",{"text":953,"config":954},"Handbuch",{"href":955,"dataGaName":956,"dataGaLocation":659},"https://handbook.gitlab.com/","handbook",{"text":958,"config":959},"Geschäftsführung",{"href":960,"dataGaName":961,"dataGaLocation":659},"/company/team/e-group/","leadership",{"text":963,"config":964},"Investor Relations",{"href":965,"dataGaName":966,"dataGaLocation":659},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":968,"config":969},"Trust Center",{"href":970,"dataGaName":971,"dataGaLocation":659},"/de-de/security/","trust center",{"text":973,"config":974},"AI Transparency Center",{"href":975,"dataGaName":976,"dataGaLocation":659},"/de-de/ai-transparency-center/","ai transparency center",{"text":978,"config":979},"Newsletter",{"href":980,"dataGaName":981,"dataGaLocation":659},"/company/contact/#contact-forms","newsletter",{"text":983,"config":984,"menu":985},"Kontakt",{"dataNavLevelOne":931},{"type":681,"columns":986},[987],{"items":988},[989,994,999],{"text":990,"config":991},"Vertrieb kontaktieren",{"href":992,"dataGaName":993,"dataGaLocation":659},"/de-de/sales/","talk to sales",{"text":995,"config":996},"Support-Portal",{"href":997,"dataGaName":998,"dataGaLocation":659},"https://support.gitlab.com/hc/en-us","support portal",{"text":1000,"config":1001},"Kundenportal",{"href":1002,"dataGaName":1003,"dataGaLocation":659},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1005,"login":1006,"suggestions":1013},"Schließen",{"text":1007,"link":1008},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1009,"config":1010},"gitlab.com",{"href":673,"dataGaName":1011,"dataGaLocation":1012},"search login","search",{"text":1014,"default":1015},"Vorschläge",[1016,1019,1023,1025,1030,1035],{"text":1017,"config":1018},"GitLab Duo Agent Platform",{"href":739,"dataGaName":1017,"dataGaLocation":1012},{"text":1020,"config":1021},"Codevorschläge (KI)",{"href":739,"dataGaName":1022,"dataGaLocation":1012},"Code Suggestions (AI)",{"text":691,"config":1024},{"href":693,"dataGaName":691,"dataGaLocation":1012},{"text":1026,"config":1027},"GitLab auf AWS",{"href":1028,"dataGaName":1029,"dataGaLocation":1012},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1031,"config":1032},"GitLab auf Google Cloud",{"href":1033,"dataGaName":1034,"dataGaLocation":1012},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":1036,"config":1037},"Warum GitLab?",{"href":760,"dataGaName":1038,"dataGaLocation":1012},"Why GitLab?",{"freeTrial":1040,"mobileIcon":1045,"desktopIcon":1050,"secondaryButton":1053},{"text":1041,"config":1042},"Kostenlos testen",{"href":1043,"dataGaName":664,"dataGaLocation":1044},"https://gitlab.com/-/trials/new/","nav",{"altText":1046,"config":1047},"GitLab-Symbol",{"src":1048,"dataGaName":1049,"dataGaLocation":1044},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1046,"config":1051},{"src":1052,"dataGaName":1049,"dataGaLocation":1044},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1054,"config":1055},"Erste Schritte",{"href":1056,"dataGaName":1057,"dataGaLocation":1044},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1059,"mobileIcon":1063,"desktopIcon":1065},{"text":1060,"config":1061},"Mehr über GitLab Duo erfahren",{"href":739,"dataGaName":1062,"dataGaLocation":1044},"gitlab duo",{"altText":1046,"config":1064},{"src":1048,"dataGaName":1049,"dataGaLocation":1044},{"altText":1046,"config":1066},{"src":1052,"dataGaName":1049,"dataGaLocation":1044},{"button":1068,"mobileIcon":1073,"desktopIcon":1075},{"text":1069,"config":1070},"/Option",{"href":1071,"dataGaName":1072,"dataGaLocation":1044},"#contact","switch",{"altText":1046,"config":1074},{"src":1048,"dataGaName":1049,"dataGaLocation":1044},{"altText":1046,"config":1076},{"src":1077,"dataGaName":1049,"dataGaLocation":1044},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1079,"mobileIcon":1084,"desktopIcon":1086},{"text":1080,"config":1081},"Zurück zur Preisübersicht",{"href":853,"dataGaName":1082,"dataGaLocation":1044,"icon":1083},"back to pricing","GoBack",{"altText":1046,"config":1085},{"src":1048,"dataGaName":1049,"dataGaLocation":1044},{"altText":1046,"config":1087},{"src":1052,"dataGaName":1049,"dataGaLocation":1044},{"title":1089,"button":1090,"config":1093},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":758,"config":1091},{"href":744,"dataGaName":1092,"dataGaLocation":659},"orbit",{"layout":1094,"disabled":637},"release",{"data":1096},{"text":1097,"source":1098,"edit":1104,"contribute":1109,"config":1114,"items":1119,"minimal":1340},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1099,"config":1100},"Quelltext der Seite anzeigen",{"href":1101,"dataGaName":1102,"dataGaLocation":1103},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1105,"config":1106},"Diese Seite bearbeiten",{"href":1107,"dataGaName":1108,"dataGaLocation":1103},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1110,"config":1111},"Beteilige dich",{"href":1112,"dataGaName":1113,"dataGaLocation":1103},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1115,"facebook":1116,"youtube":1117,"linkedin":1118},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1120,1165,1222,1265,1307],{"title":851,"links":1121,"subMenu":1136},[1122,1126,1131],{"text":1123,"config":1124},"Tarife anzeigen",{"href":853,"dataGaName":1125,"dataGaLocation":1103},"view plans",{"text":1127,"config":1128},"Vorteile von Premium",{"href":1129,"dataGaName":1130,"dataGaLocation":1103},"/de-de/pricing/premium/","why premium",{"text":1132,"config":1133},"Vorteile von Ultimate",{"href":1134,"dataGaName":1135,"dataGaLocation":1103},"/de-de/pricing/ultimate/","why ultimate",[1137],{"title":983,"links":1138},[1139,1141,1143,1145,1150,1155,1160],{"text":990,"config":1140},{"href":992,"dataGaName":669,"dataGaLocation":1103},{"text":995,"config":1142},{"href":997,"dataGaName":998,"dataGaLocation":1103},{"text":1000,"config":1144},{"href":1002,"dataGaName":1003,"dataGaLocation":1103},{"text":1146,"config":1147},"Status",{"href":1148,"dataGaName":1149,"dataGaLocation":1103},"https://status.gitlab.com/","status",{"text":1151,"config":1152},"Nutzungsbedingungen",{"href":1153,"dataGaName":1154,"dataGaLocation":1103},"/terms/","terms of use",{"text":1156,"config":1157},"Datenschutzerklärung",{"href":1158,"dataGaName":1159,"dataGaLocation":1103},"/de-de/privacy/","privacy statement",{"text":1161,"config":1162},"Cookie-Einstellungen",{"dataGaName":1163,"dataGaLocation":1103,"id":1164,"isOneTrustButton":640},"cookie preferences","ot-sdk-btn",{"title":677,"links":1166,"subMenu":1180},[1167,1170,1172,1174,1176,1178],{"text":1168,"config":1169},"Plattform entdecken",{"href":685,"dataGaName":679,"dataGaLocation":1103},{"text":737,"config":1171},{"href":739,"dataGaName":740,"dataGaLocation":1103},{"text":691,"config":1173},{"href":693,"dataGaName":694,"dataGaLocation":1103},{"text":742,"config":1175},{"href":744,"dataGaName":745,"dataGaLocation":1103},{"text":724,"config":1177},{"href":726,"dataGaName":727,"dataGaLocation":1103},{"text":755,"config":1179},{"href":760,"dataGaName":761,"dataGaLocation":1103},[1181],{"title":1182,"links":1183},"Themen",[1184,1188,1192,1197,1202,1207,1212,1217],{"text":691,"config":1185},{"href":1186,"dataGaName":1187,"dataGaLocation":1103},"/de-de/topics/ci-cd/","cicd",{"text":650,"config":1189},{"href":1190,"dataGaName":1191,"dataGaLocation":1103},"/de-de/topics/gitops/","gitops",{"text":1193,"config":1194},"DevOps",{"href":1195,"dataGaName":1196,"dataGaLocation":1103},"/de-de/topics/devops/","devops",{"text":1198,"config":1199},"Versionskontrolle",{"href":1200,"dataGaName":1201,"dataGaLocation":1103},"/de-de/topics/version-control/","version control",{"text":1203,"config":1204},"DevSecOps",{"href":1205,"dataGaName":1206,"dataGaLocation":1103},"/de-de/topics/devsecops/","devsecops",{"text":1208,"config":1209},"Cloud-nativ",{"href":1210,"dataGaName":1211,"dataGaLocation":1103},"/de-de/topics/cloud-native/","cloud native",{"text":1213,"config":1214},"KI für das Programmieren",{"href":1215,"dataGaName":1216,"dataGaLocation":1103},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1218,"config":1219},"Agentische KI",{"href":1220,"dataGaName":1221,"dataGaLocation":1103},"/de-de/topics/agentic-ai/","agentic ai",{"title":763,"links":1223},[1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1245,1248,1250,1253,1257,1261],{"text":776,"config":1225},{"href":778,"dataGaName":779,"dataGaLocation":1103},{"text":781,"config":1227},{"href":783,"dataGaName":784,"dataGaLocation":1103},{"text":786,"config":1229},{"href":788,"dataGaName":789,"dataGaLocation":1103},{"text":812,"config":1231},{"href":814,"dataGaName":815,"dataGaLocation":1103},{"text":817,"config":1233},{"href":819,"dataGaName":820,"dataGaLocation":1103},{"text":822,"config":1235},{"href":824,"dataGaName":825,"dataGaLocation":1103},{"text":827,"config":1237},{"href":829,"dataGaName":830,"dataGaLocation":1103},{"text":832,"config":1239},{"href":834,"dataGaName":835,"dataGaLocation":1103},{"text":837,"config":1241},{"href":839,"dataGaName":840,"dataGaLocation":1103},{"text":1243,"config":1244},"Enterprise",{"href":796,"dataGaName":797,"dataGaLocation":1103},{"text":1246,"config":1247},"Kleinunternehmen",{"href":801,"dataGaName":802,"dataGaLocation":1103},{"text":804,"config":1249},{"href":806,"dataGaName":807,"dataGaLocation":1103},{"text":650,"config":1251},{"href":1252,"dataGaName":1191,"dataGaLocation":1103},"/de-de/solutions/gitops/",{"text":1254,"config":1255},"Analyse der Softwarezusammensetzung (SCA)",{"href":731,"dataGaName":1256,"dataGaLocation":1103},"software composition analysis",{"text":1258,"config":1259},"Wertstrommanagement",{"href":749,"dataGaName":1260,"dataGaLocation":1103},"value stream management",{"text":1262,"config":1263},"Alle Lösungen",{"href":770,"dataGaName":1264,"dataGaLocation":1103},"all solutions",{"title":599,"links":1266},[1267,1272,1277,1279,1281,1283,1285,1287,1289,1291,1294,1296,1298,1300,1303],{"text":1268,"config":1269},"Installieren",{"href":1270,"dataGaName":1271,"dataGaLocation":1103},"/de-de/install/","install",{"text":1273,"config":1274},"Kurzanleitungen",{"href":1275,"dataGaName":1276,"dataGaLocation":1103},"/de-de/get-started/","quick setup checklists",{"text":868,"config":1278},{"href":870,"dataGaName":871,"dataGaLocation":1103},{"text":873,"config":1280},{"href":875,"dataGaName":876,"dataGaLocation":1103},{"text":878,"config":1282},{"href":880,"dataGaName":881,"dataGaLocation":1103},{"text":883,"config":1284},{"href":885,"dataGaName":886,"dataGaLocation":1103},{"text":888,"config":1286},{"href":890,"dataGaName":891,"dataGaLocation":1103},{"text":896,"config":1288},{"href":898,"dataGaName":899,"dataGaLocation":1103},{"text":901,"config":1290},{"href":903,"dataGaName":904,"dataGaLocation":1103},{"text":1292,"config":1293},"Kund(inn)en",{"href":908,"dataGaName":909,"dataGaLocation":1103},{"text":911,"config":1295},{"href":913,"dataGaName":651,"dataGaLocation":1103},{"text":915,"config":1297},{"href":917,"dataGaName":918,"dataGaLocation":1103},{"text":978,"config":1299},{"href":980,"dataGaName":981,"dataGaLocation":1103},{"text":1301,"config":1302},"Neuerungen",{"href":926,"dataGaName":927,"dataGaLocation":1103},{"text":1304,"config":1305},"Alle Ressourcen",{"href":862,"dataGaName":1306,"dataGaLocation":1103},"all resources",{"title":929,"links":1308},[1309,1311,1313,1315,1317,1319,1321,1323,1325,1330,1335],{"text":937,"config":1310},{"href":939,"dataGaName":931,"dataGaLocation":1103},{"text":942,"config":1312},{"href":944,"dataGaName":945,"dataGaLocation":1103},{"text":948,"config":1314},{"href":950,"dataGaName":951,"dataGaLocation":1103},{"text":953,"config":1316},{"href":955,"dataGaName":956,"dataGaLocation":1103},{"text":958,"config":1318},{"href":960,"dataGaName":961,"dataGaLocation":1103},{"text":963,"config":1320},{"href":965,"dataGaName":966,"dataGaLocation":1103},{"text":968,"config":1322},{"href":970,"dataGaName":971,"dataGaLocation":1103},{"text":973,"config":1324},{"href":975,"dataGaName":976,"dataGaLocation":1103},{"text":1326,"config":1327},"Nachhaltigkeit",{"href":1328,"dataGaName":1329,"dataGaLocation":1103},"/sustainability/","Sustainability",{"text":1331,"config":1332},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1333,"dataGaName":1334,"dataGaLocation":1103},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1336,"config":1337},"Transparenzerklärung zu moderner Sklaverei",{"href":1338,"dataGaName":1339,"dataGaLocation":1103},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1341},[1342,1345,1348],{"text":1343,"config":1344},"Terms",{"href":1153,"dataGaName":1154,"dataGaLocation":1103},{"text":1346,"config":1347},"Cookies",{"dataGaName":1163,"dataGaLocation":1103,"id":1164,"isOneTrustButton":640},{"text":1349,"config":1350},"Datenschutz",{"href":1158,"dataGaName":1159,"dataGaLocation":1103},[1352,1366],{"id":1353,"title":1354,"body":636,"config":1355,"content":1357,"description":636,"extension":1360,"meta":1361,"navigation":640,"path":1362,"seo":1363,"stem":1364,"__hash__":1365},"blogAuthors/en-us/blog/authors/javier-urones-montesern-clober.yml","Javier Urones Montesern Clober",{"template":1356},"BlogAuthor",{"name":7,"config":1358},{"headshot":1359},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1786716301/m4ef0w9sgufwnsnjmip7.jpg","yml",{},"/en-us/blog/authors/javier-urones-montesern-clober",{},"en-us/blog/authors/javier-urones-montesern-clober","nOElEDg3yb2BENyQahBvRi_wTQHyakdSMJfSxFLyLPQ",{"id":1367,"title":1368,"body":636,"config":1369,"content":1370,"description":636,"extension":1360,"meta":1374,"navigation":640,"path":1375,"seo":1376,"stem":1377,"__hash__":1378},"blogAuthors/en-us/blog/authors/pter-bozs.yml","Pter Bozs",{"template":1356},{"name":8,"config":1371},{"headshot":1372,"ctfId":1373},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666384/Blog/Author%20Headshots/pbozso_headshot.png","4i1NVYip0RqxRnbpZ9deKp",{},"/en-us/blog/authors/pter-bozs",{},"en-us/blog/authors/pter-bozs","M3DsNH5-3AKaaKicmGt_Gqj-Vp7wbz2QaGO8u57CB04",[1380,1388,1396],{"title":1381,"description":1382,"heroImage":1383,"category":632,"date":1384,"authors":1385,"slug":1387,"externalUrl":636},"Zwei Eingangstüren: Zugriffskontrolle auf Modulebene in Django","Angemeldet heißt nicht berechtigt – wie sich Zugriffsrechte in einer Django-App pro Modul durchsetzen lassen, statt nur den Login zu prüfen.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097663/Blog/Hero%20Images/Blog/Hero%20Images/Workflow%201800x945_2gQoQIbY9NvjLFpXtsxtXy_1750097663612.png","2026-10-05",[1386],"Donovan Felton","module-level-access-in-a-django-grc-app",{"title":1389,"description":1390,"heroImage":1391,"category":632,"date":1392,"authors":1393,"slug":1395,"externalUrl":636},"Wie GitLab den Code pro agentischem Flow um 45 % senkte","Wie die Flow Registry aus YAML-Konfigurationen voll funktionsfähige LangGraph-Flows kompiliert – und so die Skalierbarkeit verbessert.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-09-22",[1394],"Mikolaj Wawrzyniak","how-gitlab-reduced-code-per-agentic-flow-ratio",{"title":1397,"description":1398,"heroImage":1399,"category":632,"date":1400,"authors":1401,"slug":1403,"externalUrl":636},"Co-Create: GitLab gemeinsam mit unseren Nutzer(inne)n bauen","Wie GitLab-Nutzer(innen) mit uns zusammengearbeitet haben, um in der ersten Jahreshälfte 2026 praktische Produktverbesserungen zu entwickeln.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-09-10",[1402],"Isa Huerga","co-create-h1-2026",{"header":1405,"text":1406,"button":1410,"disclaimer":1413},"Kostenlose 30-tägige\n\nGitLab-Testversion starten\n",[1407,1408,1409],"GitLab Duo Agent Platform nutzen","Unsere fortschrittlichsten Funktionen ausprobieren","Komplexe Aufgaben mit KI automatisieren",{"text":1041,"config":1411},{"href":1412,"dataGaName":664,"dataGaLocation":899},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/blog/","Keine Kreditkarte erforderlich.",{"header":1415,"blurb":1416,"button":1417,"secondaryButton":1422},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1418,"config":1419},"Kostenlosen Test starten",{"href":1420,"dataGaName":664,"dataGaLocation":1421},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":990,"config":1423},{"href":992,"dataGaName":669,"dataGaLocation":1421},1791952231917]