{"id":4028,"date":"2024-03-01T10:25:50","date_gmt":"2024-03-01T10:25:50","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?p=4028"},"modified":"2024-03-01T10:25:52","modified_gmt":"2024-03-01T10:25:52","slug":"cloud-native-microservices-teil2","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/","title":{"rendered":"Cloud-native Microservices in Monorepos &#8211; Teil 2"},"content":{"rendered":"\n<p>Nachdem wir in <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil1\/\">Teil 1<\/a> die Vorteile und Herausforderungen von Microservices in Monorepos diskutiert haben, konzentrieren wir uns nun darauf, wie Nx diese Struktur f\u00fcr AWS CDK-basierte Anwendungen unterst\u00fctzt.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Was ist Nx?<\/h2>\n\n\n\n<p><a href=\"https:\/\/nx.dev\/\">Nx<\/a> ist ein JavaScript basiertes Buildsystem f\u00fcr Monorepos. Es erm\u00f6glicht die effiziente Ausf\u00fchrung aller Aufgaben wie Build und Test \u00fcber mehrere Projekte in einem Monorepo, unabh\u00e4ngig davon, ob NPM, Yarn oder PNPM als Paketmanager verwendet wird. Nx bietet auch einen vollst\u00e4ndig integrierten Modus, der keine separaten package.json Dateien f\u00fcr jedes Projekt ben\u00f6tigt. Dies erm\u00f6glicht eine tiefere Integration und ist besonders interessant f\u00fcr UI-Anwendungen mit AngularJS oder React.<\/p>\n\n\n\n<p>Beginnen wir mit einem einfachen Beispiel. Wenn wir das Build-Skript f\u00fcr Service A ausf\u00fchren wollen, k\u00f6nnen wir dies wie folgt tun:<\/p>\n\n\n\n<p><code>npx nx build service-a<\/code><\/p>\n\n\n\n<p>Nun gibt es in unserem Beispiel Repository (<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil1\/\">siehe Abbildung 1, Teil 1<\/a>) auch die Services B und C. Wenn wir das Build-Skript f\u00fcr alle Projekte im Repo ausf\u00fchren wollen, gehen wir wie folgt vor:<\/p>\n\n\n\n<p><code>npx nx run-many -t build<\/code><\/p>\n\n\n\n<p>Es ist interessant zu sehen, dass dies schneller funktioniert, als wenn wir es einzeln ausf\u00fchren w\u00fcrden. Das liegt daran, dass Nx sie parallel ausf\u00fchrt, wenn unsere Services so konzipiert sind, dass sie zur Build-Zeit unabh\u00e4ngig voneinander sind (was sie bei einem guten Design auch sein sollten).<\/p>\n\n\n\n<p>Die St\u00e4rke von Nx zeigt sich besonders im Zusammenspiel mit der Versionsverwaltung des Git-Repositories. Es ist m\u00f6glich, nur die Target Scripts der Projekte und deren Abh\u00e4ngigkeiten auszuf\u00fchren, bei denen im Vergleich zwischen Head und Base \u00c4nderungen festgestellt wurden. Angenommen, es gibt nur \u00c4nderungen im Service B in einem Branch f\u00fcr einen Pull Request zum Basis-Branch &#8222;dev&#8220;. Im folgenden Beispiel w\u00fcrde das Build-Skript nur f\u00fcr Service B ausgef\u00fchrt werden. Die Scripts der anderen Projekte werden nicht ausgef\u00fchrt.<\/p>\n\n\n\n<p><code>npx nx affected -t build<\/code><\/p>\n\n\n\n<p>Kehren wir zum Beispiel-Repository aus <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil1\/\">Teil 1<\/a> zur\u00fcck. Die package.json jedes Service enth\u00e4lt das entsprechende CDK deploy Skript. F\u00fcr Service A sieht dieses vereinfacht so aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"name\": \"service-a \",<br>\"version\": \"0.1.0\",<br>\"scripts\": {<br><br>&nbsp;&nbsp; \"<strong>deploy<\/strong>\": \"cdk deploy ServiceAStack \u2026\",<br>},&nbsp;<br>\"dependencies\": {<br>&nbsp;&nbsp;&nbsp; \"custom-lib\": \"*\"<br>}<\/code><\/pre>\n\n\n\n<p>Zus\u00e4tzlich haben wir eine Abh\u00e4ngigkeit zu einer benutzerdefinierten Bibliothek, die von allen drei Services verwendet wird. Angenommen, wir nehmen eine \u00c4nderung an dieser Bibliothek vor und f\u00fchren anschlie\u00dfend folgenden Befehl aus:<\/p>\n\n\n\n<p><code>npx nx affected -t deploy<\/code><br><br>In diesem Fall werden die Deployment-Skripte aller drei Services ausgef\u00fchrt. Dies geschieht, weil sich die Bibliothek ge\u00e4ndert hat und somit indirekt alle drei Services betroffen sind. Nx ber\u00fccksichtigt also den Abh\u00e4ngigkeitsgraphen zwischen den einzelnen Projekten innerhalb des Monorepos. Um hier den \u00dcberblick zu behalten, bietet Nx eine n\u00fctzliche Visualisierung aller im Repository enthaltenen Module und deren Abh\u00e4ngigkeiten. Mit dem Befehl<\/p>\n\n\n\n<p><code>npx nx graph<\/code><\/p>\n\n\n\n<p>wird lokal eine WebApp gestartet, mit deren Hilfe die Modulstrukturen und deren Abh\u00e4ngigkeiten untereinander im Browser untersucht werden k\u00f6nnen.<\/p>\n\n\n\n<p>Das alles zusammen ist sehr m\u00e4chtig, wenn man bedenkt, dass f\u00fcr praktisch jede Aufgabe wie Build, Unit Tests, Code Style Checks, Integrationstests, Audit, Deployment und vieles mehr in den Projekten entsprechende Target-Skripte in der package.json definiert werden k\u00f6nnen. Durch die konsistente Benennung dieser Skripte \u00fcber die Projekte hinweg k\u00f6nnen f\u00fcr jede dieser Aufgaben separate automatisierte Workflows (z.B. mit GitHub Actions) bereitgestellt werden. Diese sind so allgemeing\u00fcltig, dass sie nicht einmal angepasst werden m\u00fcssen, wenn weitere Projekte wie Services oder Bibliotheken hinzugef\u00fcgt werden. Damit haben wir ein effektives Mittel, um m\u00f6glichen Problemen eines monolithischen CI\/CD Prozesses zu begegnen.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Nx und AWS CDK: Passt das zusammen?<\/h2>\n\n\n\n<p>Mit AWS CDK steht uns ein Framework f\u00fcr Infrastructure as Code zur Verf\u00fcgung, das es erm\u00f6glicht, die gesamte serverlose Infrastruktur in TypeScript zu definieren. Bei der Strukturierung wird empfohlen, sowohl den Infrastrukturcode als auch den Businesscode in einer Applikation zu vereinen. Jeder Service wird somit zu einer separaten CDK-Applikation mit eigenen Stacks.<\/p>\n\n\n\n<p>Nx erm\u00f6glicht die einfache Organisation von AWS CDK-Applikationen in separaten Paketen. Dieses Zusammenspiel erm\u00f6glicht eine \u00fcbersichtliche und gut organisierte Entwicklung von Cloud-Anwendungen, bei der AWS CDK die Infrastrukturaspekte effizient handhabt und Nx die Flexibilit\u00e4t bietet, die verschiedenen Teile der Anwendung in einem Monorepo zu verwalten.<\/p>\n\n\n\n<p>F\u00fcr unser Beispiel-Repository w\u00fcrde dies stark reduziert wie folgt aussehen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>monorepo\/<br>\u251c\u2500\u2500 apps\/<br>\u2502 \u251c\u2500\u2500 <strong>service-a\/<\/strong><br>\u2502 \u2502 \u251c\u2500\u2500 bin\/<br>\u2502 \u2502 \u2502 \u2514\u2500\u2500 service-a-app.ts<br>\u2502 \u2502 \u251c\u2500\u2500 lib\/<br>\u2502 \u2502 \u2502 \u2514\u2500\u2500 service-a-stack.ts<br>\u2502 \u2502 \u251c\u2500\u2500 cdk.json<br>\u2502 \u2502 \u2514\u2500\u2500 package.json<br>\u2502 \u251c\u2500\u2500 <strong>service-b\/<\/strong><br>\u2502 \u2502 \u2514\u2500\u2500 \u2026<br>\u2502 \u251c\u2500\u2500 <strong>service-c\/<\/strong><br>\u2502 \u2502 \u2514\u2500\u2500 \u2026<br>\u2502 \u2514\u2500\u2500 <strong>ui\/<\/strong><br>\u2502&nbsp;&nbsp; \u2514\u2500\u2500 \u2026<br>\u251c\u2500\u2500 libs\/<br>\u2502 \u2514\u2500\u2500 <strong>custom-lib\/<\/strong><br>\u2502&nbsp;&nbsp; \u251c\u2500\u2500 index.ts<br>\u2502&nbsp;&nbsp; \u2514\u2500\u2500 package.json<br>\u251c\u2500\u2500 nx.json<br>\u2514\u2500\u2500 package.json<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>In dieser Struktur gibt es auf der obersten Ebene zwei verschiedene Workspaces. Einen f\u00fcr alle Applikationen (service-a, service-b, service-c und ui) unterhalb des apps-Ordners. Jede Applikation folgt der empfohlenen Struktur f\u00fcr eine einzelne CDK-Applikation. Der zweite Workspace libs enth\u00e4lt die gemeinsame Bibliothek custom-lib mit ihrer eigenen Struktur und package.json. Die Datei nx.json dient zur Konfiguration von Nx und enth\u00e4lt lediglich Standardeinstellungen f\u00fcr das gesamte Monorepo.<\/p>\n\n\n\n<p>Diese Struktur kann beliebig um weitere Services, Libraries und ganze Workspaces erweitert werden, indem einfach neue Packages hinzugef\u00fcgt werden.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">CI\/CD leicht gemacht<\/h2>\n\n\n\n<p>In der bisherigen Struktur haben wir das Monorepo f\u00fcr eine Architektur aus mehreren Cloud-Native Microservices definiert, die als separate CDK-Applikationen existieren. Nx erm\u00f6glicht uns eine effiziente Verwaltung dieser Anwendungen.<\/p>\n\n\n\n<p>Allerdings reicht es in der Praxis oft nicht aus, ein Deployment-Skript nur f\u00fcr ausgew\u00e4hlte Services effizient auszuf\u00fchren. Ein g\u00e4ngiger Ansatz ist es, die einzelnen CDK-Stacks der Applikationen \u00fcber eine AWS CodePipeline zu erstellen und in die gew\u00fcnschten Ziel-Accounts der verschiedenen Stages bereitzustellen. Dieser Ansatz ist mit dem Monorepo-Ansatz vereinbar, f\u00fchrt jedoch dazu, dass f\u00fcr jede Service-Applikation eine separate Pipeline verwaltet werden muss. Dieses Vorgehen \u00e4hnelt einem Multi-Repo-Ansatz, und der Verwaltungsaufwand w\u00e4chst mit der Anzahl der Services.<\/p>\n\n\n\n<p>Eine alternative Variante besteht darin, eine einzige Pipeline aufzubauen, die alle Stacks aller Services erstellt, testet und bereitstellt. Dabei besteht jedoch das Risiko eines monolithischen, zeitaufw\u00e4ndigen CI\/CD-Prozesses, wie im <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil1\/\">Teil 1<\/a><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-warning-color\"> <\/mark>beschrieben. Zus\u00e4tzlich gehen die Vorteile von Nx verloren, da AWS CodePipeline bisher keine Integration daf\u00fcr bietet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"826\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/Grafik_02_wenig_Weissraum.svg.svg\" alt=\"\" class=\"wp-image-4043\" style=\"width:800px\"\/><figcaption class=\"wp-element-caption\"><em>Abbildung 2: Monorepo CI\/CD<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Daher m\u00f6chten wir an dieser Stelle eine weitere Variante betrachten, die in Abbildung 2 dargestellt ist. Mit diesem Ansatz versuchen wir, die oben genannten M\u00f6glichkeiten zu kombinieren. Insbesondere w\u00e4hrend der Entwicklung profitieren wir stark vom Monorepo-Ansatz in Verbindung mit Nx und k\u00f6nnen viele Entwicklungsschritte automatisieren. Da wir GitHub als Repository verwenden, k\u00f6nnen viele Aufgaben f\u00fcr unser Monorepo als GitHub Actions implementiert werden, unter anderem das Deployment der einzelnen Service CDK Stacks in einen AWS Dev-Account. All dies basiert auf dem Nx affected-Feature und erm\u00f6glicht so eine sehr automatisierte und effiziente Entwicklungsumgebung.<\/p>\n\n\n\n<p>F\u00fcr das Deployment der Gesamtapplikation in die weiteren notwendigen Stages (QA, STG, PROD) haben wir im Monorepo zus\u00e4tzlich ein Pipeline-Projekt aufgesetzt, das alle notwendigen Stacks verbindet und konfiguriert, in welche Ziel-Accounts diese je nach Stage deployt werden sollen. Dabei ist uns die atomare und native Bereitstellung innerhalb des AWS Kosmos \u00fcber eine AWS CodePipeline wichtiger als die Effizienz.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Schlussfolgerung<\/h2>\n\n\n\n<p>Unsere Betrachtung hat gezeigt, dass der Entwicklungsprozess von mehreren Microservices in Monorepos mit Nx auch f\u00fcr CDK-Applikationen sehr effizient sein kann. Insbesondere einzelne Teams profitieren von den klaren Vorteilen des vereinfachten Dependency Managements, der erleichterten Zusammenarbeit und der einfachen M\u00f6glichkeit, umfangreiche Refactorings durchzuf\u00fchren, was Monorepos zu einer attraktiven Option macht. Bei team\u00fcbergreifenden Projekten h\u00e4ngt der Erfolg stark davon ab, wie gut die Teams zusammenarbeiten k\u00f6nnen. Eine effektive Abstimmung auf gemeinsame Richtlinien und Patterns ist entscheidend.<\/p>\n\n\n\n<p>Trotz der offensichtlichen Vorteile von Monorepos bleibt die Gestaltung von CI\/CD-Prozessen eine Herausforderung. Durch den geschickten Einsatz geeigneter Werkzeuge k\u00f6nnen jedoch schlanke und klare Prozesse geschaffen werden. Der Monorepo-Ansatz in Kombination mit den richtigen Werkzeugen kann eine vielversprechende M\u00f6glichkeit bieten, die Entwicklung und Bereitstellung von Cloud-nativen Microservices effizient zu gestalten. Dabei gilt es, die Vorteile zu maximieren und m\u00f6gliche Herausforderungen gezielt anzugehen.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.<\/p>\n","protected":false},"author":168,"featured_media":4045,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[656],"tags":[221,304,771,772,773,774],"topics":[770,775],"class_list":["post-4028","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-manufacturing-solutions","tag-microservices","tag-web","tag-architektur","tag-cloud-native","tag-aws-cdk","tag-nx","topics-manufacturing-solutions","topics-cloud-native-microservices-in-monorepos"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ZEISS Digital Innovation Blog - Cloud-native Microservices in Monorepos - Teil 2<\/title>\n<meta name=\"description\" content=\"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloud-native Microservices in Monorepos - Teil 2\" \/>\n<meta property=\"og:description\" content=\"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-01T10:25:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-01T10:25:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Paul Weinhold\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Cloud-native Microservices in Monorepos - Teil 2\" \/>\n<meta name=\"twitter:description\" content=\"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:site\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Weinhold\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/\",\"name\":\"ZEISS Digital Innovation Blog - Cloud-native Microservices in Monorepos - Teil 2\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg\",\"datePublished\":\"2024-03-01T10:25:50+00:00\",\"dateModified\":\"2024-03-01T10:25:52+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/beacf4167b069c5be695e0ab1e2024a4\"},\"description\":\"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloud-native Microservices in Monorepos &#8211; Teil 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/beacf4167b069c5be695e0ab1e2024a4\",\"name\":\"Paul Weinhold\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/Foto_Paul_Weinhold_s-e1707316957477-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/Foto_Paul_Weinhold_s-e1707316957477-150x150.jpg\",\"caption\":\"Paul Weinhold\"},\"description\":\"Paul Weinhold arbeitet als Senior-Software Developer bei der ZEISS Digital Innovation. Er verf\u00fcgt \u00fcber langj\u00e4hrige Erfahrung im Bereich Spring, Java und in der Umsetzung von Microservice Architekturen. Aktuell arbeitet er an Manufacturing L\u00f6sungen basierend auf Amazon Cloud Services.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/paulweinhold\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ZEISS Digital Innovation Blog - Cloud-native Microservices in Monorepos - Teil 2","description":"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/","og_locale":"de_DE","og_type":"article","og_title":"Cloud-native Microservices in Monorepos - Teil 2","og_description":"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/","og_site_name":"Digital Innovation Blog","article_publisher":"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/","article_published_time":"2024-03-01T10:25:50+00:00","article_modified_time":"2024-03-01T10:25:52+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg","type":"image\/jpeg"}],"author":"Paul Weinhold","twitter_card":"summary_large_image","twitter_title":"Cloud-native Microservices in Monorepos - Teil 2","twitter_description":"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.","twitter_image":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg","twitter_creator":"@ZEISS_di","twitter_site":"@ZEISS_di","twitter_misc":{"Verfasst von":"Paul Weinhold","Gesch\u00e4tzte Lesezeit":"7\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/","name":"ZEISS Digital Innovation Blog - Cloud-native Microservices in Monorepos - Teil 2","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg","datePublished":"2024-03-01T10:25:50+00:00","dateModified":"2024-03-01T10:25:52+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/beacf4167b069c5be695e0ab1e2024a4"},"description":"Diese Serie beleuchtet die Implementierung von Microservice-Architekturen mit Monorepos und Serverless Cloud-Anwendungen. Teil 2 zeigt, wie das Buildsystem Nx in diesem Kontext eingesetzt werden kann und hebt die Vorteile von Monorepos im Zusammenspiel mit der passenden CI\/CD-Struktur hervor.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/cloud-native-microservices-teil2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/"},{"@type":"ListItem","position":2,"name":"Cloud-native Microservices in Monorepos &#8211; Teil 2"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/beacf4167b069c5be695e0ab1e2024a4","name":"Paul Weinhold","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/Foto_Paul_Weinhold_s-e1707316957477-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/Foto_Paul_Weinhold_s-e1707316957477-150x150.jpg","caption":"Paul Weinhold"},"description":"Paul Weinhold arbeitet als Senior-Software Developer bei der ZEISS Digital Innovation. Er verf\u00fcgt \u00fcber langj\u00e4hrige Erfahrung im Bereich Spring, Java und in der Umsetzung von Microservice Architekturen. Aktuell arbeitet er an Manufacturing L\u00f6sungen basierend auf Amazon Cloud Services.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/paulweinhold\/"}]}},"author_meta":{"display_name":"Paul Weinhold","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/paulweinhold\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2024\/02\/headerbild_blog_aws-600x338.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Manufacturing Solutions<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Manufacturing Solutions<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Microservices<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">web<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Architektur<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Cloud-native<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">AWS CDK<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Nx<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Microservices<\/span>","<span class=\"advgb-post-tax-term\">web<\/span>","<span class=\"advgb-post-tax-term\">Architektur<\/span>","<span class=\"advgb-post-tax-term\">Cloud-native<\/span>","<span class=\"advgb-post-tax-term\">AWS CDK<\/span>","<span class=\"advgb-post-tax-term\">Nx<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 2\u00a0Jahren ago","modified":"Updated 2\u00a0Jahren ago"},"absolute_dates":{"created":"Posted on M\u00e4rz 1, 2024","modified":"Updated on M\u00e4rz 1, 2024"},"absolute_dates_time":{"created":"Posted on M\u00e4rz 1, 2024 10:25 a.m.","modified":"Updated on M\u00e4rz 1, 2024 10:25 a.m."},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/4028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/users\/168"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/comments?post=4028"}],"version-history":[{"count":6,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/4028\/revisions"}],"predecessor-version":[{"id":4074,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/4028\/revisions\/4074"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media\/4045"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media?parent=4028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/categories?post=4028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/tags?post=4028"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/topics?post=4028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}