{"id":2413,"date":"2024-03-01T10:28:53","date_gmt":"2024-03-01T10:28:53","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?p=2413"},"modified":"2024-03-01T10:28:54","modified_gmt":"2024-03-01T10:28:54","slug":"cloud-native-microservices-part2","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/","title":{"rendered":"Cloud-native microservices in monorepos  &#8211; Part 2"},"content":{"rendered":"\n<p>After we discussed the advantages and challenges of microservices in monorepos in <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part1\/\">Part 1<\/a>, now we will look at how Nx supports this structure for AWS CDK-based applications.<\/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\">What is Nx?<\/h2>\n\n\n\n<p><a href=\"https:\/\/nx.dev\/\">Nx <\/a>is a JavaScript-based build system for monorepos. It enables the efficient execution of all tasks such as build and test across multiple projects in a monorepo, regardless of whether NPM, Yarn, or PNPM is used as the package manager. Nx also offers a fully integrated mode that does not require separate package.json files for each project. This enables deeper integration and is particularly interesting for UI applications with AngularJS or React.<\/p>\n\n\n\n<p>Let\u2019s start with a simple example. If we want to run the build script for service A, we can do this as follows:<\/p>\n\n\n\n<p><code>npx nx build service-a<\/code><\/p>\n\n\n\n<p>Now in our example repository (see <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part1\/\">Figure 1, Part 1<\/a>), there are also services B and C. If we want to execute the build script for all projects in the repo, we proceed as follows:<\/p>\n\n\n\n<p><code>npx nx run-many -t build<\/code><\/p>\n\n\n\n<p>It is interesting to see that this works faster than if we were to do it individually. This is because Nx runs them in parallel, if our services are designed to be independent of each other at build time (which they also should be if they are well designed).<\/p>\n\n\n\n<p>The advantage of Nx is particularly evident in its interaction with the version management of the Git repository. It is possible to execute only the target scripts of the projects and their dependencies for which changes were detected in the comparison between head and base. Let\u2019s assume there are only changes in service B in a branch for a pull request to the base branch \u201cdev\u201d. In the following example, the build script would only be executed for service B. The scripts for the other project are not executed.<\/p>\n\n\n\n<p><code>npx nx affected -t build<\/code><\/p>\n\n\n\n<p>Now let\u2019s return to the example repository from <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part1\/\">Part 1<\/a>. The package.json of each service contains the corresponding CDK deploy script. For service A, it looks like this in simplified form:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"name\": \"service-a \",<br>\"version\": \"0.1.0\",<br>\"scripts\": {<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<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>In addition, we have a dependency on a user-defined library that is used by all three services. Suppose that we make a change to this library and then execute the following command:<\/p>\n\n\n\n<p><code>npx nx affected -t deploy<\/code><br><\/p>\n\n\n\n<p>In this case, the deployment scripts are executed for all three services. This happens because the library has changed and therefore all three services are indirectly affected. Nx therefore considers the dependency graph between the individual projects within the monorepo. Nx offers a useful visualization of all modules contained in a repository and their dependencies to help keep track of everything. The command<\/p>\n\n\n\n<p><code>npx nx graph<\/code><\/p>\n\n\n\n<p>is used to start a webapp locally, which can be utilized to examine the module structures and their dependencies in a browser.<\/p>\n\n\n\n<p>All of this together is very powerful when you consider that corresponding target scripts can be defined in the package.json for practically every task in the projects, such as build, unit tests, code style checks, integration tests, audit, deployment, and much more. Consistent naming of these scripts across projects means that separate automated workflows (e.g. with GitHub Actions) can be provided for each of these tasks. These are universally valid to the extent that they do not even need to be adapted when additional projects, such as services or libraries, are added. This gives us an effective way of dealing with some potential problems of a monolithic CI\/CD process.<\/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 and AWS CDK: Do they go together?<\/h2>\n\n\n\n<p>AWS CDK provides us with a framework for infrastructure as code that enables the entire serverless infrastructure to be defined in TypeScript. When structuring, it is recommended to combine both the infrastructure code and the business code in one application. This means that each service will become a separate CDK application with its own stacks.<\/p>\n\n\n\n<p>Nx enables the simple organization of AWS CDK applications in separate packages. This interaction allows for clear and well-organized development of cloud applications, with AWS CDK efficiently handling the infrastructure aspects and Nx providing the flexibility to manage the different parts of the application in a monorepo.<\/p>\n\n\n\n<p>For our example repository, a greatly reduced version would look like as follows:<\/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 this structure, there are two different workspaces at the top level. One for all applications (service a, service b, service c, and ui) below the apps folder. Each application follows the recommended structure for an individual CDK application. The second workspace libs contains the shared library custom-lib with its own structure and package.json. The nx.json file serves to configure Nx and contains only the default settings for the entire monorepo.<\/p>\n\n\n\n<p>This structure can be expanded as required with additional services, libraries, and the entire workspaces, by simply adding new packages<\/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 made easy<\/h2>\n\n\n\n<p>In the previous structure, we defined the monorepo for an architecture of multiple cloud-native microservices that exist as separate CDK applications. Nx enables efficient management of these applications.<\/p>\n\n\n\n<p>However, in reality, it is often not enough to execute a deployment script efficiently for selected services only. A common approach is to create the individual CDK stacks of the applications via an AWS CodePipeline and deploy them to the desired target accounts of the various stages. This approach is compatible with the monorepo approach, but will mean that a separate pipeline has to be managed for each service application. This procedure is similar to a multi-repo approach, and the workload increases with the number of services.<\/p>\n\n\n\n<p>An alternative option is to build a single pipeline that creates, tests, and deploys all stacks of all services. However, there is a risk of a monolithic, time-consuming CI\/CD process, as described in <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part1\/\">Part 1<\/a>. And in addition, the advantages of Nx are lost because AWS CodePipeline does not yet offer any integration for this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"826\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/Grafik_02_wenig_Weisraum.svg.svg\" alt=\"\" class=\"wp-image-2408\"\/><\/figure>\n\n\n\n<p><em>Figure 2: Monorepo CI\/CD<\/em><em><\/em><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>So at this point, we would like to consider another option, which is shown in Figure 2. With this approach, we attempt to combine the options outlined above. During the development in particular, we benefit greatly from the monorepo approach in combination with Nx and can automate many of the development steps. As we use GitHub as repository, many tasks for our monorepo can be implemented as GitHub Actions, including the deployment of individual service CDK stacks into an AWS dev account. All of this is based on the Nx affected feature and therefore enables a very automated and efficient development environment.<\/p>\n\n\n\n<p>To deploy the entire application to the other required stages (QA, STG, PROD), we also set up another pipeline project in the monorepo that connects all the necessary stacks and configures the target accounts to which they are to be deployed, depending on the stage. Here, atomic and native provision within the AWS cosmos via an AWS CodePipeline is more important to us than efficiency.<\/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\">Conclusion<\/h2>\n\n\n\n<p>Our analysis has shown that the development process of several microservices in monorepos with Nx can also be very efficient for CDK applications. In particular, individual teams benefit from the clear advantages of simplified dependency management, easier collaboration, and the ability to easily perform extensive refactorings, which makes monorepos an attractive option. The success of cross-team projects depends greatly on how well the teams can work together. Effective coordination on common guidelines and patterns is crucial.<\/p>\n\n\n\n<p>Despite the obvious advantages of monorepos, the design of CI\/CD processes remains a challenge. The clever use of suitable tools, however, can create clear, streamlined processes. The monorepo approach in combination with the right tools can offer a promising option for efficient development and provision of cloud-native microservices. It is important to maximize the advantages and address potential challenges in a targeted manner.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.<\/p>\n","protected":false},"author":169,"featured_media":2410,"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":[805],"tags":[398,608,929,931,933,934],"topics":[927,928],"class_list":["post-2413","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-manufacturing-solutions","tag-web","tag-microservices","tag-nx","tag-cloud-native","tag-architecture","tag-aws-cdk-2","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 - Part 2<\/title>\n<meta name=\"description\" content=\"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.\" \/>\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\/en\/cloud-native-microservices-part2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloud-native microservices in monorepos - Part 2\" \/>\n<meta property=\"og:description\" content=\"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-01T10:28:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-01T10:28:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/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 - Part 2\" \/>\n<meta name=\"twitter:description\" content=\"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Weinhold\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/\",\"name\":\"ZEISS Digital Innovation Blog - Cloud-native microservices in monorepos - Part 2\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg\",\"datePublished\":\"2024-03-01T10:28:53+00:00\",\"dateModified\":\"2024-03-01T10:28:54+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/b8020ab853fcdfa5ce0f2013ef07359c\"},\"description\":\"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cloud-native microservices in monorepos &#8211; Part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/b8020ab853fcdfa5ce0f2013ef07359c\",\"name\":\"Paul Weinhold\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/Foto_Paul_Weinhold_s-e1707317195732-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/Foto_Paul_Weinhold_s-e1707317195732-150x150.jpg\",\"caption\":\"Paul Weinhold\"},\"description\":\"Paul Weinhold works as Senior Software Developer at ZEISS Digital Innovation. He has many years of experience in the field of Spring, Java and in the implementation of microservice architectures. He is currently working on manufacturing solutions based on Amazon Cloud Services.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enpaulweinhold\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ZEISS Digital Innovation Blog - Cloud-native microservices in monorepos - Part 2","description":"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.","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\/en\/cloud-native-microservices-part2\/","og_locale":"en_US","og_type":"article","og_title":"Cloud-native microservices in monorepos - Part 2","og_description":"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/","og_site_name":"Digital Innovation Blog","article_published_time":"2024-03-01T10:28:53+00:00","article_modified_time":"2024-03-01T10:28:54+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg","type":"image\/jpeg"}],"author":"Paul Weinhold","twitter_card":"summary_large_image","twitter_title":"Cloud-native microservices in monorepos - Part 2","twitter_description":"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.","twitter_image":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg","twitter_misc":{"Written by":"Paul Weinhold","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/","name":"ZEISS Digital Innovation Blog - Cloud-native microservices in monorepos - Part 2","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg","datePublished":"2024-03-01T10:28:53+00:00","dateModified":"2024-03-01T10:28:54+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/b8020ab853fcdfa5ce0f2013ef07359c"},"description":"This series highlights the implementation of microservice architectures with monorepos and serverless cloud applications. Part 2 shows how the Nx build system can be used in this context and emphasizes the advantages of monorepos in combination with the appropriate CI\/CD structure.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/cloud-native-microservices-part2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/"},{"@type":"ListItem","position":2,"name":"Cloud-native microservices in monorepos &#8211; Part 2"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/b8020ab853fcdfa5ce0f2013ef07359c","name":"Paul Weinhold","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/Foto_Paul_Weinhold_s-e1707317195732-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/Foto_Paul_Weinhold_s-e1707317195732-150x150.jpg","caption":"Paul Weinhold"},"description":"Paul Weinhold works as Senior Software Developer at ZEISS Digital Innovation. He has many years of experience in the field of Spring, Java and in the implementation of microservice architectures. He is currently working on manufacturing solutions based on Amazon Cloud Services.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enpaulweinhold\/"}]}},"author_meta":{"display_name":"Paul Weinhold","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enpaulweinhold\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2024\/02\/headerbild_blog_aws-600x338.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/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\/en\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">web<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Microservices<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Nx<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Cloud-native<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">Architecture<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/manufacturing-solutions\/\" class=\"advgb-post-tax-term\">AWS-CDK<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">web<\/span>","<span class=\"advgb-post-tax-term\">Microservices<\/span>","<span class=\"advgb-post-tax-term\">Nx<\/span>","<span class=\"advgb-post-tax-term\">Cloud-native<\/span>","<span class=\"advgb-post-tax-term\">Architecture<\/span>","<span class=\"advgb-post-tax-term\">AWS-CDK<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 2 years ago","modified":"Updated 2 years ago"},"absolute_dates":{"created":"Posted on March 1, 2024","modified":"Updated on March 1, 2024"},"absolute_dates_time":{"created":"Posted on March 1, 2024 10:28 am","modified":"Updated on March 1, 2024 10:28 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/2413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/comments?post=2413"}],"version-history":[{"count":6,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/2413\/revisions"}],"predecessor-version":[{"id":2440,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/2413\/revisions\/2440"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media\/2410"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media?parent=2413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/categories?post=2413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/tags?post=2413"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/topics?post=2413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}