<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Citrux Digital</title>
    <description>The latest articles on DEV Community by Citrux Digital (@citrux-digital).</description>
    <link>https://dev.to/citrux-digital</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9085%2Fcd687a59-c12b-4713-ac66-870bd9450403.png</url>
      <title>DEV Community: Citrux Digital</title>
      <link>https://dev.to/citrux-digital</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/citrux-digital"/>
    <language>en</language>
    <item>
      <title>Amazon Transcribe: Transforming Audio to Text</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Fri, 06 Sep 2024 17:15:16 +0000</pubDate>
      <link>https://dev.to/citrux-digital/amazon-transcribe-transforming-audio-to-text-57ae</link>
      <guid>https://dev.to/citrux-digital/amazon-transcribe-transforming-audio-to-text-57ae</guid>
      <description>&lt;p&gt;Amazon Transcribe is an automatic speech recognition service that uses machine learning models to transcribe audio and video files into text, also helps developers to add speech text capabilites to their applications without needing a strong knowledge in that area.&lt;/p&gt;

&lt;p&gt;The service includes: real-time transcription, subtitles for multimedia, call center analysis, among others.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Features:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Real-time transcriptions:&lt;/strong&gt; Process live and recorded audios or videos with high quality like meetings, live broadcasts, calls, etc.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Batch transcriptions:&lt;/strong&gt; Process pre-recorded files like podcasts, videos, recorded meeetings, etc-&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Personal Identifiable Information (PII) detection:&lt;/strong&gt; During the transcribe, it can recognize and hide all data which can be personal and sensitive in order to no expose data that wouldn’t be exposed.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Punctuation and number formatting:&lt;/strong&gt; Adds punctuation and number formatting when its detected improving transcribe quality and avoiding modifications when is printed or downloaded.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Customer sentiment:&lt;/strong&gt; Can extract conversation insights like call sentiment or speech loudness in order to detect customer sentiments and helping improve productivity and customer experience.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Automatic language detection:&lt;/strong&gt; Recognizes the language of the audio or video file and do the transcribe in that one.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Custom vocabulary:&lt;/strong&gt; The transcribe can be customized according the industry you want to in order to makes it easy to understand and highly adaptable like healthcare, legal, finance, among others.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Recognize multiple speakers:&lt;/strong&gt; Recognizes automatically if the speaker changes so it would capture scenarios like calls, meetings, etc.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Toxic audio content detection:&lt;/strong&gt; Uses machine learning to keep constructive conversations to encourage a safe online environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Use cases:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Call analytics and customer service&lt;/li&gt;
&lt;li&gt;  Content creation and accesibility&lt;/li&gt;
&lt;li&gt;  Meeting and conference subtitles&lt;/li&gt;
&lt;li&gt;  Gaming and social media detecting toxic audio content.&lt;/li&gt;
&lt;li&gt;  Clinical documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Companies using Amazon Transcribe:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Intuit:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: Intuit needed a solution to efficiently process and analyze millions of customer support calls across its global contact centers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: By implementing &lt;strong&gt;Amazon Transcribe&lt;/strong&gt;, Intuit automated the transcription of customer calls, enabling them to analyze conversations and perform sentiment analysis using &lt;strong&gt;Amazon Comprehend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;: This integration improved customer support by providing actionable insights from call data, optimizing service efficiency, and enhancing the overall customer experience​&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. T-Mobile:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; T-Mobile faced challenges in providing voicemail services in the language preferred by their customers, especially for a diverse user base speaking multiple languages. This complexity made it hard to deliver voicemail in a way that met customer expectations efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; T-Mobile used Amazon Transcribe and Amazon Translate to automatically transcribe and translate voicemails into customers' preferred languages, streamlining the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; This solution improved customer experience by delivering voicemails in preferred languages, reducing manual work, and enhancing efficiency and personalization.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon Transcribe is a powerful tool that transforms audio and video content into text with high accuracy, enabling a range of applications from real-time transcription to detailed call analytics. By incorporating advanced features like PII detection, custom vocabulary, and automatic language recognition, it caters to diverse needs across various industries.&lt;/p&gt;

&lt;p&gt;Its versatility is demonstrated through successful implementations by companies like Intuit and T-Mobile, which leveraged Transcribe to enhance customer service and streamline operations. Whether for improving accessibility in media, analyzing customer interactions, or facilitating multi-language support, Amazon Transcribe offers a robust solution for modern transcription needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/transcribe/?nc=sn&amp;amp;loc=0" rel="noopener noreferrer"&gt;https://aws.amazon.com/transcribe/?nc=sn&amp;amp;loc=0&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ethics in UX Design</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Thu, 05 Sep 2024 17:11:50 +0000</pubDate>
      <link>https://dev.to/citrux-digital/ethics-in-ux-design-2e5n</link>
      <guid>https://dev.to/citrux-digital/ethics-in-ux-design-2e5n</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Designing for Good, Not Just for Clicks&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ever felt tricked by a sneaky 'dark pattern' on a website? Or frustrated by an app that's impossible to navigate? That's bad UX, and unfortunately, it's all too common. But what if we told you there's a better way? A way to design digital experiences that not only look good but also feel good to use. That's where ethics in UX design comes in.&lt;/p&gt;

&lt;p&gt;In this article, we'll explore the fascinating intersection of ethics and UX, and show you how to create products that prioritize user well-being and build trust. Let's dive in!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7i0v3lws9mnqxxwsyu3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7i0v3lws9mnqxxwsyu3.jpg" alt=" " width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Ethics in UX Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of ethics in UX design as your moral compass, guiding you to make the right choices for your users. It's about creating products that are not only functional and beautiful but also respectful, inclusive, and empowering.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Ethical Considerations in UX Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let's break down some of the key ethical considerations you need to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Transparency and Honesty:&lt;/strong&gt; No more sneaky tricks or hidden agendas! Be upfront with your users about what data you're collecting and how you're using it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Privacy and Data Protection:&lt;/strong&gt; Your users' data is precious. Treat it with respect and make sure it's secure. 🔐&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Accessibility and Inclusivity:&lt;/strong&gt; Design for everyone, not just the 'average' user. Make sure your product is usable by people with diverse abilities and backgrounds. 🌎&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;User Autonomy and Control:&lt;/strong&gt; Give your users the power to make their own choices. No one likes to feel manipulated. 🙅‍♀️&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Social Responsibility:&lt;/strong&gt; Your designs have an impact on the world. Make sure it's a positive one. 🌱&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Ethical UX Design Principles&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here are some guiding principles to keep you on the right track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Do No Harm:&lt;/strong&gt; Sounds simple, right? But it's crucial. Avoid designing products that exploit, manipulate, or harm users.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Respect User Autonomy:&lt;/strong&gt; Let your users call the shots. Give them the information and tools they need to make informed decisions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Prioritize User Well-being:&lt;/strong&gt; Think about the impact your design has on your users' physical, emotional, and mental health. 🧘‍♀️&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Promote Inclusivity:&lt;/strong&gt; Design for everyone, regardless of their abilities, background, or circumstances.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Be Transparent and Honest:&lt;/strong&gt; Build trust with your users by being open and upfront about your intentions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Best Practices for Ethical UX Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxr7hkoae1vxuvfr1hic.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxr7hkoae1vxuvfr1hic.jpg" alt=" " width="395" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ready to put these principles into action? Here are some best practices to follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Get to know your users:&lt;/strong&gt; Conduct thorough research to understand their needs, motivations, and pain points.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Collaborate with your users:&lt;/strong&gt; Involve them in the design process and get their feedback early and often.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design for accessibility from the start:&lt;/strong&gt; Don't treat accessibility as an afterthought. Make it a core part of your design process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep it simple:&lt;/strong&gt; Use clear and concise language that everyone can understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test, test, test:&lt;/strong&gt; Make sure your product works for everyone by testing it with a diverse group of users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Never stop learning:&lt;/strong&gt; The world of UX is constantly evolving. Stay up-to-date on the latest ethical considerations and best practices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ethical UX design isn't just a nice-to-have; it's a must-have. By putting ethics at the heart of your design process, you can create products that not only delight your users but also make the world a better place. Let's work together to create a more user-centric and ethical digital world. 🙌&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Center for Humane Technology.&lt;/strong&gt; (n.d.). The Ledger of Harms. Retrieved from &lt;a href="https://ledger.humanetech.com/" rel="noopener noreferrer"&gt;https://ledger.humanetech.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Crogan, P.&lt;/strong&gt; (2020). The Ethical Turn in Design and the Design of the Ethical Turn. Design Issues, 36(3), 5-17.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Gray, C. M., Gerlitz, C., &amp;amp; Bounegru, L.&lt;/strong&gt; (2018). Data infrastructure literacy. Big Data &amp;amp; Society, 5(1), 2053951718758104.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Johnson, J.&lt;/strong&gt; (2018). &lt;em&gt;Designing with the Mind in Mind: Simple Guide to Understanding User Interface Design Guidelines&lt;/em&gt;. O'Reilly Media.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Microservices vs. Monolithic Architecture</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Wed, 04 Sep 2024 16:53:00 +0000</pubDate>
      <link>https://dev.to/citrux-digital/microservices-vs-monolithic-architecture-1lbl</link>
      <guid>https://dev.to/citrux-digital/microservices-vs-monolithic-architecture-1lbl</guid>
      <description>&lt;p&gt;Imagine your application is a sleek, well-oiled machine—until it starts to outgrow its parts and sputter under pressure. This is the crossroads many developers face when choosing between monolithic and microservices architectures. While a monolithic design offers simplicity, it can quickly become a bottleneck as demands increase. Enter microservices: a dynamic approach that promises flexibility and scalability but comes with its own set of challenges. Dive into this article to uncover how these architectural choices impact your application’s performance and discover the strategies to navigate a successful transition.&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What is a monolithic architecture?&lt;/li&gt;
&lt;li&gt; Advantages and Desadvantages&lt;/li&gt;
&lt;li&gt; Scenarios&lt;/li&gt;
&lt;li&gt; What are microservices?&lt;/li&gt;
&lt;li&gt; Advantages and Desadvantages&lt;/li&gt;
&lt;li&gt; Scenarios&lt;/li&gt;
&lt;li&gt; Differences between monolithic and microservices architecture&lt;/li&gt;
&lt;li&gt; How to migrate from monolithic to microservices&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is a monolithic architecture?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A monolithic architecture is a traditional model of software design where an application is built as a single and unified unit. In this model all the app componentes such us: user interface, business logic and data layer are integrated and deployed together.&lt;/p&gt;

&lt;p&gt;A monolithic architecture is characterized for its simplicity and easy deployment, it’s ideal for small and medium size apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Advantages&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  All the code is in one place so that makes it easy to understand how the different parts of the code works&lt;/li&gt;
&lt;li&gt;  The development process can be faster since developer don’t need to worry about communication between services&lt;/li&gt;
&lt;li&gt;  The deployment is easy because it’s only required to deploy one artifact and also if something goes wrong during the deploymen process is very easy to roll back changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Disadvantages&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  When a monolithic application grows, it becomes complicated to manage it.&lt;/li&gt;
&lt;li&gt;  In a complex application, the development time can increase due to can be difficult to understand the logic and its parts.&lt;/li&gt;
&lt;li&gt;  All the parts of the application are created with the same technology in the whole project, so it can limit the developers flexibility.&lt;/li&gt;
&lt;li&gt;  The application will have a single database.&lt;/li&gt;
&lt;li&gt;  Since the application is deployed the first time, each change or updated may take longer because always will be necessary to deploy the entire monolithic to apply changes or updates.&lt;/li&gt;
&lt;li&gt;  Nothing is isolated, so if a part of the applications fails the entire application would bring down and it will affect the user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Scenarios:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Small simple application&lt;/li&gt;
&lt;li&gt;  Limited development team resources&lt;/li&gt;
&lt;li&gt;  Low operational complexity&lt;/li&gt;
&lt;li&gt;  Frequent changes are not expected&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What are microservices?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In a microservices architecture, an application is built as a collection of smalls services where each service represents an specific business task. Those services has to be integrated and communicated with each other using HTTP protocols or messaging queues.&lt;/p&gt;

&lt;p&gt;This is helpful for big size and complex applications due to will be more organized, structured and easy to understand.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Advantages&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Each service is responsible for an specific task or functionality which can be developed, deployed and scaled independently.&lt;/li&gt;
&lt;li&gt;  Each service can have its own database so you don’t need to share a single database with all services.&lt;/li&gt;
&lt;li&gt;  Allows developer to use different technologies according their knowledge and the specific requirements. That means that each service can be developed with a different technology and doesn’t affect the application running.&lt;/li&gt;
&lt;li&gt;  If a specific service fails, that doesn’t mean that the entire application has to be affected, just the service will be off but the rest of the application won’t be impacted.&lt;/li&gt;
&lt;li&gt;  The code is easy to understand, modify and manage due to each service is small and focused in a specific functionality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Disadvantages&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  It can be complicated to manage a large number of services , it requires a good coordination between teams.&lt;/li&gt;
&lt;li&gt;  Deploying and managing a large number of services requires a robust deployment pipeline and automated tools.&lt;/li&gt;
&lt;li&gt;  Monitoring and debugging microservices can be challenging since each service is independent.&lt;/li&gt;
&lt;li&gt;  Costs for scalibility and flexibility can increase due to large numbers of services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Scenarios:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Complex applications&lt;/li&gt;
&lt;li&gt;  High scalability and isolation&lt;/li&gt;
&lt;li&gt;  Implementing differents technologies&lt;/li&gt;
&lt;li&gt;  Dynamic evolving product&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Differences between monolithic and microservices architecture:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Single-tier architecture&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Distributed architecture&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Size&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Large, with all components tightly coupled&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Small, with loosely coupled components&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Deployed as a single unit&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Individual services can be deployed independently&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Scalability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Horizontal scaling can be challenging&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Easier to scale horizontally&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Simpler initially&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; More complex due to managing multiple services&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Technology&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Limited technology choices&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Freedom to choose the best technology for each service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Fault Tolerance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Entire application may fail if a part fails&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Individual services can fail without affecting others&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Maintenance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Easier to maintain due to its simplicity&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Requires more effort to manage multiple services&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Flexibility&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Less flexible as all components are tightly coupled&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; More flexible as components can be developed, deployed, and scaled independently&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Communication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monolithic Architecture:&lt;/strong&gt; Communication between components is faster&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice Architecture:&lt;/strong&gt; Communication may be slower due to network calls&lt;/p&gt;

&lt;p&gt;Communication may be slower due to network calls&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How to migrate from monolithic to microservices:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Migrating from monolithic architecture to microservices can be a complex task but can improve scalability, and flexibility. Here are some tips to guide you throught the process:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Assess and Plan&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Understand and Plan:&lt;/strong&gt; Analyze your current system and define clear migration goals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Identify and Prioritize Services&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Decompose and Prioritize:&lt;/strong&gt; Break down the monolith into manageable services and prioritize them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Define Microservices Boundaries&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Design Boundaries:&lt;/strong&gt; Use domain-driven design to create distinct, self-contained services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Design for Microservices&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;API Contracts and Data Management:&lt;/strong&gt; Establish clear APIs and manage data independently for each service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Implement Incrementally&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Gradual Replacement:&lt;/strong&gt; Use techniques like the strangler pattern to gradually replace parts of the monolith.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Focus on DevOps and Automation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Automate Processes:&lt;/strong&gt; Implement CI/CD pipelines and infrastructure as code for smooth deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Handle Cross-Cutting Concerns&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Manage Common Needs:&lt;/strong&gt; Use tools for service discovery, API management, and centralized monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. Manage Data and Transactions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Data Strategy:&lt;/strong&gt; Plan for data migration and handle distributed transactions carefully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9. Test Thoroughly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Comprehensive Testing:&lt;/strong&gt; Develop extensive unit, integration, and end-to-end tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10. Prepare for Change Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Train and Communicate:&lt;/strong&gt; Ensure team training and keep stakeholders informed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11. Iterate and Improve&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Continuous Improvement:&lt;/strong&gt; Regularly review, optimize, and refactor based on feedback and performance data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Choosing between monolithic and microservices architectures depends on your application's needs. Monolithic architecture offers simplicity and ease of deployment for smaller applications, but can become unwieldy as they grow. Microservices provide greater flexibility and scalability by breaking down applications into manageable services, though they require careful management and robust infrastructure. Migrating to microservices can enhance your application's performance and adaptability, but it requires a well-thought-out plan and ongoing optimization. By understanding these architectures and following best practices for migration, you can effectively support your application's growth and evolution.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.geeksforgeeks.org/monolithic-vs-microservices-architecture/" rel="noopener noreferrer"&gt;https://www.geeksforgeeks.org/monolithic-vs-microservices-architecture/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith" rel="noopener noreferrer"&gt;https://www.atlassian.com/microservices/microservices-architecture/microservices-vs-monolith&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.techtarget.com/whatis/definition/monolithic-architecture" rel="noopener noreferrer"&gt;https://www.techtarget.com/whatis/definition/monolithic-architecture&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Docker vs Kubernetes: Key Differences &amp; Similarities</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Tue, 03 Sep 2024 16:04:47 +0000</pubDate>
      <link>https://dev.to/citrux-digital/docker-vs-kubernetes-key-differences-similarities-2m36</link>
      <guid>https://dev.to/citrux-digital/docker-vs-kubernetes-key-differences-similarities-2m36</guid>
      <description>&lt;p&gt;Docker and Kubernetes—two powerful tools in the tech industry that are reshaping how we build, scale, and operate software. Docker introduces the power of containerization, bundling your applications and all their dependencies into portable, consistent units that perform flawlessly across any environment. Meanwhile, Kubernetes takes on the role of an orchestration maestro, expertly managing and scaling these containers across clusters with remarkable precision.&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore the similarities and differences between Docker and Kubernetes, its capabilities, features.&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What is Docker?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Kubernetes?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker vs Kubernetes: Similarities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker vs Kubernetes: Differences&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When to use Docker or Kubernetes?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Docker?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Docker is a platform that lets you create, test and deploy applications. It uses containers to package everything needed to run the software, including libraries, system tools, code, and runtime. With Docker, you can quickly scale and deploy applications in any environment, ensuring consistent code execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Containerization&lt;/strong&gt;: Docker containers encapsulate an application and its dependencies in one package.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Isolation&lt;/strong&gt;: Each Docker container is separated from the others, ensuring security due to applications in different containers don't interfere with each other.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Portability&lt;/strong&gt;: Containers can be easily moved across different environments without needing changes to the code or the environment. This is useful in microservices architectures, where different components of an application might run in different environments.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Version Control&lt;/strong&gt;: Docker images (the blueprint for creating containers) can be versioned, allowing developers to track changes, roll back to previous versions, or share images with others.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Docker Hub&lt;/strong&gt;: Docker Hub is a cloud-based registry service that allows you to find and share container images. It offers a vast library of pre-configured applications, enabling developers to quickly pull and use images created by others.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Kubernetes?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Kubernetes is a container orchestration platform for automating deployments, scaling, and management of containerized applications. It helps manage large-scale, distributed systems by organizing applications into containers, which are lightweight, portable, and isolated units that include everything needed to run a piece of software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Automatic Bin Packing&lt;/strong&gt;: Efficiently schedules containers based on resource requirements and constraints.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Self-Healing&lt;/strong&gt;: Automatically restarts or replaces containers that fail or are unresponsive.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Horizontal Scaling&lt;/strong&gt;: Easily scales applications up or down based on demand.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Service Discovery and Load Balancing&lt;/strong&gt;: Automatically assigns IP addresses and DNS names to containers, along with distributing traffic evenly among them.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Storage Orchestration&lt;/strong&gt;: Automatically mounts the storage system of your choice, whether it's local storage, a public cloud provider, or a network storage system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Docker vs Kubernetes: Similarities&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Containerization&lt;/strong&gt;: Both Docker and Kubernetes revolve around containers. Docker provides the tools to create, manage, and run containers, while Kubernetes orchestrates and manages those containers across a cluster of machines.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Portability&lt;/strong&gt;: Containers, whether managed by Docker or Kubernetes, encapsulate applications and their dependencies, making them portable across different environments.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Isolation&lt;/strong&gt;: Both platforms ensure that applications run in isolated environments. Docker containers provide isolation at the application level, while Kubernetes extends this isolation across clusters, ensuring that applications don't interfere with each other even in a distributed setup.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Microservices Architecture&lt;/strong&gt;: Docker and Kubernetes both support microservices, where an application is broken down into smaller, independent services. Docker packages these services into containers, and Kubernetes manages their deployment, scaling, and networking.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Open-Source&lt;/strong&gt;: Both Docker and Kubernetes are open-source projects. Docker's container technology and Kubernetes' orchestration capabilities have large communities and ecosystems that contribute to their development and provide a wide range of tools, extensions, and plugins.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;DevOps Integration&lt;/strong&gt;: Docker and Kubernetes are integral to DevOps practices. Docker simplifies the continuous integration/continuous deployment (CI/CD) pipeline by ensuring that applications behave the same way across different environments. Kubernetes automates deployment, scaling, and management of containerized applications, making it easier to maintain and update applications in production.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability&lt;/strong&gt;: Docker allows you to run multiple containers on a single host, and Kubernetes takes this further by managing and scaling containers across multiple hosts. Both platforms enable applications to scale horizontally (adding more instances) based on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Docker vs Kubernetes: Differences&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Orchestration&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Docker Swarm available for orchestration, but less powerful and feature-rich compared to Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Specifically designed for orchestration, providing advanced features for automating deployment, scaling, and operation of application containers across a cluster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Self-Healing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Does not provide self-healing capabilities; requires manual restart of failed containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt;Offers self-healing by automatically restarting failed containers, replacing and rescheduling them when nodes fail, and killing containers that don’t pass health checks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Deployment Complexity&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Easier to start with, ideal for development and running containers on a single machine. Docker Compose simplifies managing multi-container applications on one node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt;More complex to set up and manage, especially in a multi-node environment; requires deeper understanding of architecture and components.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Scope&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Focuses on containerization, managing containers on a single node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt;Orchestrates containers across a distributed cluster, handling scheduling, load balancing, scaling, and self-healing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Use Cases&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Ideal for local development, testing, and running isolated applications or microservices on a single node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt;Best suited for managing complex, distributed applications that require scalability, resilience, and high availability across multiple nodes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Component Structure&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Includes Docker Engine, Docker CLI, Docker Compose, and Docker Hub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt;Includes Master Node (API server, scheduler, controller manager) and Worker Nodes (kubelet, kube-proxy, container runtime). Also includes objects like Pods, Services, Deployments, and Namespaces.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Community and Ecosystem&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Large ecosystem of tools and a vast repository of pre-built images on Docker Hub. Docker Swarm is available but less popular.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Rapidly growing ecosystem, widely supported by cloud providers (AWS, GCP, Azure) and tools; includes Helm (package management), Istio (service mesh), and Prometheus (monitoring).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Container Management&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Manages containers at an individual level; Docker Compose for multi-container applications on a single node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Manages containers at scale, orchestrating them across multiple nodes; groups containers into Pods and provides advanced features like service discovery, load balancing, and automated rollouts/rollbacks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Purpose&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Platform for developing, packaging, and running applications in containers on a single node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Orchestration platform for managing, scaling, and deploying containerized applications across a cluster of nodes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Persistent Storage&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Provides volume management for persistent storage, but managing storage across multiple nodes is more challenging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Offers a more robust persistent storage solution managed across multiple nodes, supporting various storage backends (e.g., AWS EBS, GCE Persistent Disks, NFS).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Scaling&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Scaling handled at the container level; Docker Compose can scale services but limited to a single host or node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Provides built-in mechanisms for scaling containers across a cluster; can automatically scale applications based on demand (horizontal pod autoscaling).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Networking&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docker:&lt;/strong&gt; Uses a simpler networking model; containers on the same host can communicate through a common bridge network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes:&lt;/strong&gt; Provides a more complex and robust networking model; supports multi-node networking with service discovery and load balancing across containers on different nodes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When to use Docker or Kubernetes?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The choice will depend on your specific needs and the scale of your project, you can work with both to get the most out of it but you can also use it individually taking into account the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Docker:&lt;/strong&gt; Ideal for smaller and simpler projects. It allows you to create and manage applications in containers easily, simplifying the packaging and distribution of your software.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Kubernetes:&lt;/strong&gt; Suitable for larger and more complex projects. It provides advanced tools for managing multiple containers, scaling applications, and ensuring their availability and performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Docker:&lt;/strong&gt; A developer is working on a new feature that requires different software versions than those in the current development environment. By using Docker, they can create a container with the specific versions needed, ensuring compatibility and testing the feature without disrupting the main development setup.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Kubernetes:&lt;/strong&gt; A system administrator manages a large-scale e-commerce platform. Kubernetes handles automatic scaling based on user traffic and recovers from server failures to ensure the platform remains available.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Docker and Kubernetes:&lt;/strong&gt; A development team is building a complex web application with multiple microservices. They use Docker to create and test each microservice in isolation, ensuring consistency across different environments. Once the microservices are ready, they deploy them to a Kubernetes cluster, which manages the orchestration, scaling, and load balancing of these services to ensure high availability and optimal performance in production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Docker and Kubernetes are pivotal tools in modern application development and management. Docker simplifies container creation and management, offering portability and consistency across various environments. Meanwhile, Kubernetes provides a robust solution for orchestrating containers at scale, handling deployment, scaling, and recovery for distributed applications.&lt;/p&gt;

&lt;p&gt;The choice between Docker and Kubernetes will depend on the complexity and scope of your projects, but often, using them together can maximize the efficiency and flexibility of your applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://spacelift.io/blog/docker-vs-kubernetes" rel="noopener noreferrer"&gt;Docker vs. Kubernetes: Tools Comparison&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opensistemas.com/kubernetes-vs-docker/" rel="noopener noreferrer"&gt;Kubernetes vs Docker ¿por qué todo el mundo habla de ellos? - OpenSistemas&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Getting Started with Amazon Bedrock</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Fri, 30 Aug 2024 15:57:16 +0000</pubDate>
      <link>https://dev.to/citrux-digital/getting-started-with-amazon-bedrock-4a7l</link>
      <guid>https://dev.to/citrux-digital/getting-started-with-amazon-bedrock-4a7l</guid>
      <description>&lt;p&gt;Amazon Bedrock can be your best ally for creating personalized content, automating customer support, analyzing vast datasets, and generating images without needing weeks of work or a specialized AI team. As technology rapidly evolves, Amazon Bedrock emerges as the groundbreaking tool that opens the doors to generative AI for everyone. Want to discover how to transform your ideas into powerful applications without being a machine learning expert? Welcome to the universe of Amazon Bedrock, where the possibilities are as limitless as your imagination.&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What is Amazon Bedrock?&lt;/li&gt;
&lt;li&gt; Amazon Bedrock Features&lt;/li&gt;
&lt;li&gt; Amazon Bedrock Models&lt;/li&gt;
&lt;li&gt; Amazon Bedrock Pricing&lt;/li&gt;
&lt;li&gt; Amazon Bedrock Use Cases&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What is Amazon Bedrock?
&lt;/h3&gt;

&lt;p&gt;Amazon Bedrock is a generative AI tool provided by AWS, it’s a service that provides access to leading foundational models (FMs) which are advanced AI models that are used for different tasks and applications and can be adapted for specific tasks.&lt;/p&gt;

&lt;p&gt;Bedrock allows you to consume multiple FMs to build powerful GenAI applications fordifferent business use cases without needing machine learning skills. This models have been trained on massive datasets so developers can experiment and customized them with their current applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Access to various FMs:&lt;/strong&gt; it has a library with many pre-trained models which are ready to use and can be modified to meet the specific needs that you have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Simplified and managed experience for GenAi applications:&lt;/strong&gt; is a serverless service with no needs to manage infrastructure components for models. It provides a single API endpoint with the choose model which helps to improve integrations and operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Integration with other AWS services:&lt;/strong&gt; you can easly integrate it with other AWS services like: Amazon SageMaker for training, AWS lambda for serverless computing, and Amazon S3 for data storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Model customization:&lt;/strong&gt; the actual models can be customized with your own data, you can create a private copy of the model and start working on it. To pair the models whit up to date information you can use Retrieval Augmented Generation (RAG), a technique that combines information retrieval with text generation in order to have more accurate responses&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Security:&lt;/strong&gt; your data will be secured, won’t be visible and won’t be exposed in public enviroments. All your data will be confidential and AWS Bedrock won’t save it for own purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Models
&lt;/h3&gt;

&lt;p&gt;Amazon Bedrock provides access to high-performance AI models, developed both by Amazon and leading AI providers. These models include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Amazon Titan&lt;/strong&gt;: A group of models developed by Amazon, designed for tasks like text generation, language understanding, and more.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Anthropic's Claude&lt;/strong&gt;: A model focused on high-quality text generation and natural language understanding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;AI21 Labs' Jurassic-2&lt;/strong&gt;: Powerful natural language processing model, ideal for text generation, content creation, and advanced writing tasks.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Stability AI&lt;/strong&gt;: Offers image generation models which allows users to create images from textual descriptions. It's useful for applications in design, marketing, and more.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Meta’s Mistral&lt;/strong&gt;: Is a powerful language model developed by Meta. It’s designed for a variety of natural language processing tasks, including text generation, comprehension, and more. Meta's models are known for their advanced capabilities and efficiency in handling complex language tasks.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cohere's Command R&lt;/strong&gt;: Offers the Command R series of models, which are optimized for retrieval-augmented generation (RAG). These models are effective at combining large-scale language models with retrieval systems to improve the relevance and accuracy of generated content. They are used for tasks that require both deep understanding and the ability to pull in relevant information from external sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These models are pre-trained and ready to use, but they also allow for customization to fit the specific needs of various business applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Pricing
&lt;/h3&gt;

&lt;p&gt;Amazon bedrock pricing is based on the service usage and depends of the pricing model, there 3 of this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;On-demand:&lt;/strong&gt; you pay just for each operation performerd using the available models. The price depends on the number of input and output tokens processed for the chosen foundation model. The token includes the characters or text units that you entered in a prompt. In image generation case, you’ll have to pay for each generated image.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Provisioned throughput:&lt;/strong&gt; this applies for some models where you can purchase the package which guarantees its availability and usafe for around 1 to 6 months.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Model customization:&lt;/strong&gt; When you want to customize a model, you’ll have to pay for the tokens and the model storage is charged per month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For model inference costs depend on the specific model you use and the number of tokens processed. The range can be from $0.0004 to $0.03 per 1,000 tokens. For model training vary based on the complexity of the model and amount of data, a range can be from $1 to $10 per hour of training.&lt;/p&gt;

&lt;p&gt;For more information about those pricing and the model and region you choose you can take a look here &lt;a href="https://aws.amazon.com/bedrock/pricing/" rel="noopener noreferrer"&gt;Amazon Bedrock Pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Use Cases
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Creation of personalized content:&lt;/strong&gt; you can generate new content such as blogs, articles, stories, descriptions, social media posts, among others, improving personalization and marketing features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Custom support automation:&lt;/strong&gt; helps you to improve customer experience and supports, creating chatbots and virtual assistants trained with the correct information and knowledge, those can efficiently address customers requests, guides and provide solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Data analysis and insights generation:&lt;/strong&gt; you can analyze big volumes of datasets and generate appropiate insights, this is value always when you want to understand patterns and drive better decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Personalization&lt;/strong&gt; This is more valuable in e-commerce industries when you can recommend products to user based on its preferences, behaviors, browsing and search history so you’ll improve in sales and customer satisfaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Text summarization:&lt;/strong&gt; you can increase productivity by generating summaries of books, stories and different documentations, this is value when you want to understand legal documents, educational or academic contents and also have summaries about your meetings!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Image generation:&lt;/strong&gt; you can create an image about anything that you want , can be realistic or artistic, in different enviroments just by entering the description of the image you want in a prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon Bedrock Examples
&lt;/h3&gt;

&lt;p&gt;These are some of the models examples that has Bedrock, you just have to enter whatever you need in the prompt section and it will give you the response.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Summarization&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gljakel6huofgnneop5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gljakel6huofgnneop5.png" alt="Summarization image" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Text generation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjvppiqpv09ophab2qft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjvppiqpv09ophab2qft.png" alt="Text generation image" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Code generation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu8a6a1dffdhdmqv6kox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu8a6a1dffdhdmqv6kox.png" alt="Code generation image" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Image generation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykinbucdxpdebg60z41a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykinbucdxpdebg60z41a.png" alt="Image generation image" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Information extraction&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndqrvy3f2zgcx0ekq327.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndqrvy3f2zgcx0ekq327.png" alt="Information Extraction image" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Amazon Bedrock represents a significant leap forward in making generative AI accessible and practical for businesses of all sizes. With its robust features, seamless integration with AWS services, and the ability to customize models to fit specific needs, Bedrock empowers developers to innovate without the steep learning curve traditionally associated with AI. Whether you’re looking to enhance customer experiences, streamline content creation, or gain deeper insights from your data, Amazon Bedrock offers a powerful, secure, and flexible platform to turn your AI-driven visions into reality. As the landscape of AI continues to evolve, embracing tools like Bedrock could be the key to staying ahead in a competitive market.&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://spacelift.io/blog/what-is-amazon-bedrock" rel="noopener noreferrer"&gt;What is Amazon Bedrock? AWS Generative AI Tool Overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/es/bedrock/?gclid=CjwKCAjwlbu2BhA3EiwA3yXyuwBZvMhQDwDjyBUD5szhX2BfGu1OxgJCzwQVOeWF2euh996VFsdYyBoC16gQAvD_BwE&amp;amp;trk=823ba4c2-1ccc-4dfb-a413-8f5c3cd2073d&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAjwlbu2BhA3EiwA3yXyuwBZvMhQDwDjyBUD5szhX2BfGu1OxgJCzwQVOeWF2euh996VFsdYyBoC16gQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!691967554245!e!!g!!amazon%20bedrock!21058131079!161733358280" rel="noopener noreferrer"&gt;Creación de aplicaciones de IA generativa con modelos de base – Amazon Bedrock – AWS&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Exploring Key UX Services</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Thu, 29 Aug 2024 16:26:56 +0000</pubDate>
      <link>https://dev.to/citrux-digital/exploring-key-ux-services-3o75</link>
      <guid>https://dev.to/citrux-digital/exploring-key-ux-services-3o75</guid>
      <description>&lt;p&gt;In today's competitive landscape, User Experience (UX) has emerged as a key differentiator for businesses. A positive user experience fosters engagement, loyalty, and ultimately drives product success. Achieving this requires a multifaceted approach, encompassing various UX services that work in tandem to create seamless, intuitive, and enjoyable interactions.&lt;/p&gt;

&lt;p&gt;This article serves as a guide through the different UX services, highlighting their significance and how they contribute to crafting exceptional user experiences.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnuivzv071k9la7lr23hs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnuivzv071k9la7lr23hs.jpg" alt="product design image" width="800" height="879"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;UX Services and Their Importance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Strategic Services&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;UX Strategy:&lt;/strong&gt; Defines the general vision and approach for creating user-centered products. A well-defined UX strategy aligns business goals with user needs, guiding the entire design and development process.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Design Strategy:&lt;/strong&gt; Outlines the visual and interactive elements that contribute to the user experience. Design strategy ensures consistency, aesthetic appeal, and brand alignment across all touchpoints.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Content Strategy:&lt;/strong&gt; Plans and manages the creation, delivery, and governance of content across channels. Content strategy ensures content is relevant, valuable, and accessible to users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Research and Analysis&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;User Research:&lt;/strong&gt; Uncover user needs, behaviors, and pain points through methods like interviews, surveys, and observation. User research provides invaluable insights for data-driven design decisions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Data Analytics:&lt;/strong&gt; Collect, analyze, and interpret user data to understand user behavior and measure product performance. Data analytics provides insights for optimization and iteration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Design and Development&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;UX Architecture:&lt;/strong&gt; Create the structural framework for a product, defining how users navigate and interact with it. UX architecture ensures logical and intuitive user flows.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Interaction Design:&lt;/strong&gt; Design how users interact with a product, focusing on elements like navigation, feedback, and error prevention. Interaction design creates engaging and intuitive user experiences.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;User Interface Design:&lt;/strong&gt; Craft the visual appearance and layout of the product's interface. UI design creates aesthetically pleasing and user-friendly interfaces.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;UX Writing:&lt;/strong&gt; Develop clear, concise, and user-friendly microcopy for interfaces, error messages, and other product elements. UX writing enhances usability and creates a positive tone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Leadership and Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;UX Leadership:&lt;/strong&gt; Guide and mentor UX teams, ensuring alignment with strategic goals and fostering a user-centered culture within the organization. UX leadership drives UX maturity and champions user needs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Product Management:&lt;/strong&gt; Oversee the entire product lifecycle, from conception to launch and beyond. Product management ensures the product meets user needs and business objectives.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Most Essential UX Services&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;While all UX services play a crucial role in creating successful products, some are considered fundamental:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;User Research:&lt;/strong&gt; Understanding your users is paramount. Without user research, it's challenging to design products that truly resonate with their needs and expectations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;UX Architecture &amp;amp; Interaction Design:&lt;/strong&gt; These services shape the core of the user experience, ensuring intuitive navigation, seamless interactions, and efficient task completion.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Usability Testing:&lt;/strong&gt; Gathering user feedback through testing helps uncover usability issues and validate design decisions. It ensures the product is user-friendly and accessible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UX services are the backbone of user-centered design. By strategically employing these services, businesses can ensure their products are not only functional but also enjoyable, accessible, and valuable to users. From research and strategy to design and leadership, UX services create a holistic approach that prioritizes user needs and drives product success.&lt;/p&gt;

&lt;p&gt;Ready to elevate your product's user experience? Explore our comprehensive range of UX services and discover how we can help you create products users will love. Contact us today for a consultation!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Courage, C., &amp;amp; Baxter, K.&lt;/strong&gt; (2005). Understanding your users: A practical guide to user requirements methods, tools, and techniques. Morgan Kaufmann.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Garrett, J. J.&lt;/strong&gt; (2010). The elements of user experience: User-centered design for the web and beyond (2nd ed.). New Riders.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Interaction Design Foundation.&lt;/strong&gt; (n.d.). The guide to UX roles. Retrieved from &lt;a href="https://www.interaction-design.org/literature/topics/ux-roles" rel="noopener noreferrer"&gt;https://www.interaction-design.org/literature/topics/ux-roles&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Serverless vs. Containerized: Making the Right Choice</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Wed, 28 Aug 2024 14:26:49 +0000</pubDate>
      <link>https://dev.to/citrux-digital/serverless-vs-containerized-making-the-right-choice-3mam</link>
      <guid>https://dev.to/citrux-digital/serverless-vs-containerized-making-the-right-choice-3mam</guid>
      <description>&lt;p&gt;In today’s world of development, choosing the right infrastructure for your applications can make the difference between seamless success and chaos. Should you go with the simplicity of serverless, where your code runs without the need of managing servers? Or do you need the power and flexibility of containerized capable of handling complex applications across multiple environments? Understanding when to use each technology is crucial for maximizing efficiency and controlling costs. But how do you know which one is the best fit for your specific needs?&lt;/p&gt;

&lt;p&gt;In this article, we’ll talk about the ideal use cases for serverless and containerized, guiding you to make the right choice for your project. We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Understanding the Basics: Serverless and Container-Based Architectures&lt;/li&gt;
&lt;li&gt; How Do These Architectures Work?&lt;/li&gt;
&lt;li&gt; When to Use Each Architecture&lt;/li&gt;
&lt;li&gt; Real-World Scenarios: Applying serverless and containerized infrastructures&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Understanding the Basics: Serverless and Container-Based Architectures&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Serverless Architectures (AWS Lambda):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a serverless architecture, developers create and deploy applications without worrying about the infrastructure underneath. This falls on a cloud service provider (CSP) such as AWS. When using AWS Lambda, your code is executed in response to some events, such as HTTP requests or some changes occurring in a data storage system. The environment in which your applications are deployed on is managed by AWS allowing you to focus on the application logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container-Based Architectures (Kubernetes):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Container-based architectures, on the other hand, involve packaging your application code along with its dependencies and settings into containers. These containers are lightweight, portable, and can run in any environment, ensuring consistency across development, testing, and production. Kubernetes, as an orchestration platform, manages these containers, ensuring they are always running, scaled appropriately, and able to communicate with each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Difference:&lt;/strong&gt; While AWS Lambda runs code in response to events, Kubernetes manages containers that are always running, each containing has a part of your application.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How Do These Architectures Work?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. How Serverless Architecture Works:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Serverless architecture, particularly in the context of AWS Lambda, follows a function-as-a-service (FaaS) model. Here’s how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Function Creation:&lt;/strong&gt; Developers write application code as a set of functions, each performing a specific task triggered by an event, such as an API call or a file upload.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Deployment:&lt;/strong&gt; These functions are deployed to AWS Lambda, with triggers attached to the CSP’s infrastructure.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Execution:&lt;/strong&gt; When a trigger event occurs, AWS Lambda executes the corresponding function on an available server. If no server is available, AWS automatically spins up a new one to handle the request.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability:&lt;/strong&gt; AWS Lambda scales automatically with the volume of requests, and you only pay for the compute time your code actually uses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;No Server Management:&lt;/strong&gt; AWS handles all infrastructure management, including scaling, patching, and availability.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cost-Effective:&lt;/strong&gt; Pay only for the compute time used, making it ideal for sporadic workloads.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability:&lt;/strong&gt; Automatically scales with demand, handling any number of requests concurrently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. How Container-Based Architecture Works:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Container-based architecture relies on tools like Docker and Kubernetes to package, deploy, and manage applications. Here’s how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Containerization:&lt;/strong&gt; Application code, along with its dependencies, is packaged into containers. These containers are isolated environments that can run anywhere, ensuring consistency.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Orchestration:&lt;/strong&gt; Kubernetes manages the deployment and operation of these containers across a cluster of nodes. It handles tasks such as load balancing, scaling, and networking.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Persistence and State:&lt;/strong&gt; Unlike Lambda functions, containers can maintain state, making them suitable for more complex, always-on applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Consistency:&lt;/strong&gt; Containers ensure that applications run the same way in different environments, reducing the “it works on my machine” problem.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability:&lt;/strong&gt; Kubernetes efficiently manages the scaling of containers to meet demand.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Flexibility:&lt;/strong&gt; Containers can run any application, regardless of the programming language or framework, making them highly versatile.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When to Use Each Architecture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Use serverless when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Event-Driven Applications:&lt;/strong&gt; If your application needs to perform tasks in response to specific events, like processing a file upload or handling an API request or when the workload is sporadic and doesn’t need to be running continuosly. Serverless is ideal.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cost Sensitivity:&lt;/strong&gt; Serverless architecture is cost-effective when you have unpredictable workloads, as you only have to pay for the time you consume and you won’t have charges if your code isn’t running&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Simplified Management:&lt;/strong&gt; You want to minimize infrastructure management and focus solely on developing application logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Use containerized when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Always-On Applications:&lt;/strong&gt; If your application needs to be constantly available, handle complex interactions and persistent connectitons, containerized is the better choice.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Containerized Microservices:&lt;/strong&gt; When you’re developing microservices, where each service runs in its own container, Kubernetes excels in managing these distributed systems.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Control and Flexibility:&lt;/strong&gt; You need precise control over your application’s deployment, scaling, and networking, which Kubernetes provides.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Manage CI/CD pipelines:&lt;/strong&gt; When you need to manage CI/CD pipelines and deploy containerized applications continuosly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Bursts of traffic:&lt;/strong&gt; Where you have unpredictable bursts of traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Real-World Scenarios: Applying serverless and containerized infrastructures&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Scenario 1: App Modernization&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Imagine you’re tasked with modernizing an older application to improve scalability and reduce costs. Serverless architecture with AWS Lambda can help you rebuild the app’s backend services to be more agile and scalable, while Kubernetes can be used to containerize parts of the application that require consistent, high-performance computing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Serverless Advantage:&lt;/strong&gt; Improved agility and cost-efficiency for event-driven services.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Container-Based Advantage:&lt;/strong&gt; Consistency and control over long-running, resource-intensive processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Scenario 2: Cloud Migration&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Suppose your organization is moving from on-premises infrastructure to the cloud. A serverless architecture can reduce operational overhead, with AWS Lambda managing event-driven tasks. For applications requiring more control over the environment, Kubernetes can containerize and orchestrate these workloads in the cloud, ensuring portability and consistency across environments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Serverless Advantage:&lt;/strong&gt; Reduced management costs and seamless scaling for new cloud-native services.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Container-Based Advantage:&lt;/strong&gt; Portability and control during migration, maintaining consistent environments across cloud providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Scenario 3: Event-Driven or High-Traffic Applications&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you’re developing an application that needs to handle high traffic, such as a real-time notification system or an e-commerce platform during peak sales, serverless functions in AWS Lambda can efficiently manage event processing and scaling. Meanwhile, Kubernetes can be used to manage the application’s microservices that require continuous availability and low-latency processing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Serverless Advantage:&lt;/strong&gt; Integration with cloud services and robust autoscaling capabilities.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Container-Based Advantage:&lt;/strong&gt; Reliable event-driven processing with portability and open-source flexibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Scenario 4: Big Data Processing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Imagine your team needs to process large volumes of data, such as server logs or IoT sensor data. AWS Lambda can automatically trigger to process this data in manageable chunks, enabling parallel processing and reducing overall processing time. On the other hand, Kubernetes can orchestrate containers that execute processing tasks in parallel, particularly for more complex workflows that require advanced customization of the execution environments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Serverless Advantage&lt;/strong&gt;: Automatic scaling for parallel processing of large data volumes without worrying about the underlying infrastructure.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Container-Based Advantage&lt;/strong&gt;: Full control over execution environments and flexibility to customize the infrastructure according to the workflow’s needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Both serverless and containerized infrastructures offer unique advantages depending on your application’s needs. By understanding how these architectures work, you can better align your infrastructure with your project goals, ensuring scalability, efficiency, and cost-effectiveness.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Serverless (AWS Lambda):&lt;/strong&gt; Ideal for event-driven, cost-sensitive, and simple application logic.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Container-Based (Kubernetes):&lt;/strong&gt; Best for complex, always-on, and multi-service applications requiring full control and flexibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No matter your choice, these modern architectures represent a significant evolution from traditional server-based development, offering new opportunities for innovation and efficiency in the cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://medium.com/@ftieben/deciding-where-to-host-your-api-aws-lambda-vs-aws-eks-1cdd4b2bf638" rel="noopener noreferrer"&gt;https://medium.com/@ftieben/deciding-where-to-host-your-api-aws-lambda-vs-aws-eks-1cdd4b2bf638&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lumigo.io/serverless-monitoring/serverless-and-kubernetes-key-differences-and-using-them-together/" rel="noopener noreferrer"&gt;https://lumigo.io/serverless-monitoring/serverless-and-kubernetes-key-differences-and-using-them-together/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.datadoghq.com/knowledge-center/serverless-architecture/serverless-vs-containers/#scenario-3-event-driven-or-high-traffic-applications" rel="noopener noreferrer"&gt;https://www.datadoghq.com/knowledge-center/serverless-architecture/serverless-vs-containers/#scenario-3-event-driven-or-high-traffic-applications&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding Docker Multistage Builds</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Tue, 27 Aug 2024 16:44:31 +0000</pubDate>
      <link>https://dev.to/citrux-digital/understanding-docker-multistage-builds-3fm7</link>
      <guid>https://dev.to/citrux-digital/understanding-docker-multistage-builds-3fm7</guid>
      <description>&lt;p&gt;Imagine you’re building an application, but when it’s time to deploy, you are faced with a dilemma: the Docker image size is huge, the build process is slow, and you’re concerned about container security. What if I told you that there’s a way to solve all those problems in one go? – Time for Multistage Docker build, a powerful technique that not only reduces images sizes, but also speeds up deployment process. In this article you’ll discover why is a great strategy and how to implement it in your projects.&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What is a Multistage Docker Build?&lt;/li&gt;
&lt;li&gt; Advantages of Multistage builds&lt;/li&gt;
&lt;li&gt; How multistages builds works&lt;/li&gt;
&lt;li&gt; Best practices&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is a Multistage Docker Build?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A multistage docker build is a feature in Docker which allows you to have more than one &lt;strong&gt;‘FROM’&lt;/strong&gt; statements within a single Dockerfile. Each stage can build a different image and perform a specific part of the build process.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Advantages of Multistage Builds&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Reduce image size&lt;/strong&gt;: The image size is smaller than the one in a normal build, due to the image contains just what the app needs to run.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Improve build time:&lt;/strong&gt; Thanks to smaller images the deployment is faster and the performance is better.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Increase containers security:&lt;/strong&gt; The container will be more secure because the final image contains only what it’s needed to run the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How Multistage Builds Work&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We are going to check the difference between single and multistage builds with a simple counter app for this example, you can find the code source here: &lt;a href="https://github.com/Citrux-Systems/counterApp-multistage-demo" rel="noopener noreferrer"&gt;https://github.com/Citrux-Systems/counterApp-multistage-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make sure you have Docker o Docker destop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create a docker file:&lt;/strong&gt; Create a docker file in your app’s root and add this code for a single-stage-build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Use&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;alpine&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt;
&lt;span class="nx"&gt;FROM&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;alpine&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Create&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt;
&lt;span class="nx"&gt;WORKDIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Copy&lt;/span&gt; &lt;span class="kr"&gt;package&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt;
&lt;span class="nx"&gt;COPY&lt;/span&gt; &lt;span class="kr"&gt;package&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Install&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;dependencies&lt;/span&gt;
&lt;span class="nx"&gt;RUN&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Copy&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;
&lt;span class="nx"&gt;COPY&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Build&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;production&lt;/span&gt;
&lt;span class="nx"&gt;RUN&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Expose&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;serving&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;
&lt;span class="nx"&gt;EXPOSE&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Command&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;
&lt;span class="nx"&gt;CMD&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;npm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;start&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Build a docker image:&lt;/strong&gt; Build the docker image with this command &lt;code&gt;docker build -t single-stage-build .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Verify image size:&lt;/strong&gt; Check the image size with this command docker images, in our example we have an image size of 646MB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa7hgq3jy1ow03meng92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffa7hgq3jy1ow03meng92.png" alt="single stage image" width="741" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Run docker image:&lt;/strong&gt; Run the image created using this command &lt;code&gt;docker run -d -p 3000:3000 single-stage-build&lt;/code&gt;. Now you can check in localhost:3000 to see your app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkc0or7lgwbpd41xwebbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkc0or7lgwbpd41xwebbw.png" alt="demo app image" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Restructure docker file for multi-stages build:&lt;/strong&gt; Now, restructure the docker file with different FROM statements like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;First&lt;/span&gt; &lt;span class="nx"&gt;stage&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Building&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Use&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;pine&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;parent&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt;
&lt;span class="nx"&gt;FROM&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;alpine&lt;/span&gt; &lt;span class="nx"&gt;AS&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Create&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt;
&lt;span class="nx"&gt;WORKDIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Copy&lt;/span&gt; &lt;span class="kr"&gt;package&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt;
&lt;span class="nx"&gt;COPY&lt;/span&gt; &lt;span class="kr"&gt;package&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Install&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;dependencies&lt;/span&gt;
&lt;span class="nx"&gt;RUN&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Copy&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;
&lt;span class="nx"&gt;COPY&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Build&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;production&lt;/span&gt;
&lt;span class="nx"&gt;RUN&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Second&lt;/span&gt; &lt;span class="nx"&gt;stage&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Serve&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt;
&lt;span class="nx"&gt;FROM&lt;/span&gt; &lt;span class="nx"&gt;nginx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;alpine&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Copy&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;Nginx&lt;/span&gt;
&lt;span class="nx"&gt;COPY&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;
&lt;span class="nx"&gt;EXPOSE&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;
&lt;span class="nx"&gt;CMD&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nginx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-g&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;daemon off;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Build the docker image with multi-stages:&lt;/strong&gt; Build the docker image with this command &lt;code&gt;docker build -t multi-stage-build .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Verify image size:&lt;/strong&gt; Check the image size again with docker images, and now you can see the image size is smaller than the one with single-stage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjocs4o0gf0dtxkg8ae5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbjocs4o0gf0dtxkg8ae5.png" alt="multi stage image" width="800" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Run docker image:&lt;/strong&gt; Run the image created using this command &lt;code&gt;docker run -d -p 80:80 multi-stage-build&lt;/code&gt;, you should be able to access the application just as before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgqrdorhelkvzjh2yya5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgqrdorhelkvzjh2yya5.png" alt="demo app image" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you could see, when using multi stages the size of docker images is reduced, because unnecessary files and dependencies are excluded from the final image, this also helps the build process to be faster and the app continues to work in the same way.&lt;/p&gt;

&lt;p&gt;The files that are commonly excluded from the final image can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Source code and development files like *.c, *.cpp, *.h, those are needed for compilation in the building process, but once the app is built those file are no longer needed, the final image will contain the assest required to run the app.&lt;/li&gt;
&lt;li&gt;  Node.js and NPM modules are just needed to compile the app, but then the app will be built and served as static files so it won’t be necessary those dependencies or modules at runtime.&lt;/li&gt;
&lt;li&gt;  Build tools and temporary files which are created in building process are only required for compilation, they aren’t needed once the app is built.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, the final image will have just the files and dependencies to run the app at final stage. Everything required for compilation is only used in building stage and then excluded as they are not directly used to run the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Best Practices&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are some things that you can keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Create reusable stages including shared components when there is a lot in common between the multiple stages.&lt;/li&gt;
&lt;li&gt;  Use appropiates and oficial base images from trusted sources to reduce image sizes and avoid security vulnerabilities.&lt;/li&gt;
&lt;li&gt;  Separate build and runtime environments by different stages, the build stage should contain dependencies and configurations for app building and the runtime stage should have only the needed to run your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Implementing a multistage Docker build not only reduces image sizes and speeds up deployment but also enhances container security. By following best practices and structuring your Dockerfile effectively, this technique becomes an essential tool for any project aiming for efficiency and security in deployments. It's time to take your applications to the next level!&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/build/guide/multi-stage/" rel="noopener noreferrer"&gt;https://docs.docker.com/build/guide/multi-stage/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cherryservers.com/blog/docker-multistage-build" rel="noopener noreferrer"&gt;https://www.cherryservers.com/blog/docker-multistage-build&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mastering Amazon QuickSight: Your Guide to Powerful Data Insights</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Fri, 23 Aug 2024 14:21:10 +0000</pubDate>
      <link>https://dev.to/citrux-digital/mastering-amazon-quicksight-your-guide-to-powerful-data-insights-739</link>
      <guid>https://dev.to/citrux-digital/mastering-amazon-quicksight-your-guide-to-powerful-data-insights-739</guid>
      <description>&lt;p&gt;Imagine transforming massive volumes of data into valuable insights in minutes, without having a complex infrastructure or advanced programming skills. Amazon QuickSight, AWS’s business intelligence tool, does just that. In this article, we'll explore the features that make Amazon QuickSight an essential tool for data analytics, from its functionalities to real-world use cases that demonstrate its impact across various industries.&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What is Amazon QuickSight&lt;/li&gt;
&lt;li&gt; Amazon QuickSight features&lt;/li&gt;
&lt;li&gt; Benefits of Amazon QuickSight&lt;/li&gt;
&lt;li&gt; Exploring Amazon QuickSight - Example&lt;/li&gt;
&lt;li&gt; Use Cases&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ready to discover how you can revolutionize your decision-making with QuickSight?&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Amazon QuickSight?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon QuickSight is a cloud-based business intelligence (BI) tool offered by Amazon Web Services (AWS). It allows users to easily create, analyze and publish interactive dashboards in real-time, those include visualizations, insights, and key metrics which are accessible from any device.&lt;/p&gt;

&lt;p&gt;The way how this tool works is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DHRzrlWM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/a611328189fc51a58ca91d50630d1ce33cac5409-1624x1044.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DHRzrlWM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/a611328189fc51a58ca91d50630d1ce33cac5409-1624x1044.png%3Ffit%3Dmax%26auto%3Dformat" alt="Amazon QuickSight workflow" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Amazon Quicksight features:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;SPICE (Super-fast, Parallel, In-memory Calculation Engine)&lt;/strong&gt;: Its memory calculation engine allows to do quickly analysis without having to manage databases infrastructure, so multiple users can at the same time perform fast interactive analysis.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;AWS integration:&lt;/strong&gt; In order to have access to different data sources, it can be integrated with other AWS services like S3, RDS, Redshift, among others, .&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Machine learning integration:&lt;/strong&gt; Offers machine learning services like anomaly detection and forecasting, which are integrated directly into the user interface. Also, you can use the machine learning models built in &lt;a href="https://www.techtarget.com/searchaws/definition/Amazon-SageMaker" rel="noopener noreferrer"&gt;Amazon SageMaker&lt;/a&gt; to create predictive dashboards without coding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Interactive dashboards:&lt;/strong&gt; Can create customized and dynamic dashboards which can be shared in public or private environments.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability and performance:&lt;/strong&gt; Can automatically scale as needed to support thousands of users without having performance issues.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Ease of use:&lt;/strong&gt; It’s a tool that not requires a complex set up, it's intuitive and easy to use and manage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Benefits of Amazon QuickSight:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Easy to use&lt;/li&gt;
&lt;li&gt;  Fast performance&lt;/li&gt;
&lt;li&gt;  Compatible with different data sources&lt;/li&gt;
&lt;li&gt;  Secure and multi-region availability&lt;/li&gt;
&lt;li&gt;  Anywhere access to dashboards and visualizations&lt;/li&gt;
&lt;li&gt;  Collaborative analytics with no need to install an application&lt;/li&gt;
&lt;li&gt;  Publish and share your analysis as a dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Exploring Amazon QuickSight - Example:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There are two ways to start using QuickSight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  From QuickSight Community (it’s free and you can share your workshops with other people)&lt;/li&gt;
&lt;li&gt;  From AWS account (an aws account is needed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So , we are going to analyze this dataset - &lt;a href="https://docs.aws.amazon.com/quicksight/latest/user/samples/b2b-sales.csv.zip" rel="noopener noreferrer"&gt;B2b sales data&lt;/a&gt; which contains specifically transactions made by many companies. It includes information about the orders, product id's, customer names, order dates and logistical details like shipping method and location. Additionally, it provides financial data like: total sales, profits, discounts applied, and the quantity of products sold. The data is segmented by industry and customer type, in order to have analysis of purchasing behavior across different sectors and market segments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Upload data:&lt;/strong&gt; you’ll have to upload the file with the data you want to analyze. After that, the dataset is created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SZir0M7_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/2c84bb19fcf2606266e2a50062eb12478ac607e4-782x334.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SZir0M7_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/2c84bb19fcf2606266e2a50062eb12478ac607e4-782x334.png%3Ffit%3Dmax%26auto%3Dformat" alt="upload data QuickSight" width="782" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Create a prepared dataset:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Choose ‘Datasets’ at left.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--39VT1D4V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/f3ff14de167cb9ec4127d30cc2603717ed5946f1-1528x468.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--39VT1D4V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/f3ff14de167cb9ec4127d30cc2603717ed5946f1-1528x468.png%3Ffit%3Dmax%26auto%3Dformat" alt="dataset creation" width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You can create more datasets from the current one by right clicking on the dataset and then clicking ‘Use in new dataset’, after that you need to rename it and start organizing your new dataset, including or excluding fields, renaming columns names, adding data and more as per your intentions, etc…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TQk1IX_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/50039c129c4f05ea63522d16a6125a255d988668-1522x446.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TQk1IX_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/50039c129c4f05ea63522d16a6125a255d988668-1522x446.png%3Ffit%3Dmax%26auto%3Dformat" alt="dataset creation" width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gxVi05dI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/ab79e3b24e62ebc99977df89e97e13d7f9c47869-1520x618.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gxVi05dI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/ab79e3b24e62ebc99977df89e97e13d7f9c47869-1520x618.png%3Ffit%3Dmax%26auto%3Dformat" alt="dataset preparation" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Create an analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click on ‘New analysis’ button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6WO5qrAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/645ab0092aadd989cb552d89cd15e27a50b8e7b0-1059x316.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6WO5qrAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/645ab0092aadd989cb552d89cd15e27a50b8e7b0-1059x316.png%3Ffit%3Dmax%26auto%3Dformat" alt="Analysis creation" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Select the dataset you want to analyze, in this case we’re going to selecte ‘b2b-sales’, and then click ‘Use in analysis’ button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cRMFF3Y4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/0bf6d19593a7d3a7378056cfc1a79f7f5685beae-1520x450.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cRMFF3Y4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/0bf6d19593a7d3a7378056cfc1a79f7f5685beae-1520x450.png%3Ffit%3Dmax%26auto%3Dformat" alt="dataset for analysis" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VYgviloD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/f0e5807894f827a8cc3c2ab7ecc8c6f87ed249ec-1055x355.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VYgviloD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/f0e5807894f827a8cc3c2ab7ecc8c6f87ed249ec-1055x355.png%3Ffit%3Dmax%26auto%3Dformat" alt="dataset use for analysis" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, you’ll see the create visual page, and what you have to do is select the dataset information you want to show in differentes visual types.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_gZ8jCu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/fe961f21804c84dd712c806d5bf58d1bfd2c1efb-1522x654.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_gZ8jCu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/fe961f21804c84dd712c806d5bf58d1bfd2c1efb-1522x654.png%3Ffit%3Dmax%26auto%3Dformat" alt="visuals " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the example, we created 4 charts in order to have different insights:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-Sales per day:&lt;/strong&gt; This chart shows the daily sales trends, allowing you to identify seasonal patterns, peak and low activity days, and potential spikes in demand. You can use this information to optimize inventory and modify marketing strategies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-Sales grouped by Industries:&lt;/strong&gt; Grouping sales by industry reveals which sectors are most profitable or have the highest sales volumes. This can help to make strategic decisions, such as focusing on more lucrative industries, identifying growth opportunities in underserved markets, or diversifying your offerings to balance risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-Ship mode in different states registered:&lt;/strong&gt; Analyzing shipping methods used in different states helps you understand logistical preferences and the efficiency of your distribution operations. You can detect if some states prefer a specific shipping mode, which might suggest adjusting shipping options, negotiating better rates, or improving the speed of deliveries in key regions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-Products and it’s profits:&lt;/strong&gt; This chart shows the profitability of each product, which is crucial for identifying the most and least profitable items. You can use this information to adjust pricing, promote products with higher margins, or make decisions about discontinuing less profitable products.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FBub327c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/9e9d4ed7a4811390f15b3b4363dc8a1858b2fa62-1867x813.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FBub327c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/9e9d4ed7a4811390f15b3b4363dc8a1858b2fa62-1867x813.png%3Ffit%3Dmax%26auto%3Dformat" alt="dashboard" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Create dashboard:&lt;/strong&gt; After you finish the visuals, colors, filters and configurations you can click on ‘Publish’ button , enter a name and – your dashboard will be published!&lt;/p&gt;

&lt;p&gt;Using this tool, we created a dashboard that provides different insights to improve strategic decision-making in areas such as marketing, sales, logistics, and product management, ultimately enhancing operational efficiency and business profitability.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Use Cases:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Trustly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trustly, a leading digital payments company, needed to process and analyze large volumes of financial transaction data in real-time to support its rapidly growing operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; The existing process for generating reports was slow and complex, relying on manual data extraction and tools that couldn't scale effectively. This hindered quick decision-making and operational efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Trustly implemented Amazon QuickSight to create interactive dashboards and generate real-time reports. This solution eliminated the need for a complex infrastructure and allowed Trustly to scale its data analysis capabilities seamlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; The implementation of Amazon QuickSight significantly reduced the time needed to generate reports from days to minutes, improving operational efficiency. Additionally, the ability to access real-time data allowed teams to quickly identify trends and anomalies, enhancing decision-making and responsiveness, and ultimately enabling Trustly to provide better service to its customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Best Western&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Best Western, a global hotel chain, needed a scalable and cost-effective solution to manage and analyze data across its worldwide operations, ensuring better decision-making and improved operational efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; The company was facing high costs associated with their existing analytics solutions, which were not only expensive but also difficult to scale as they expanded globally. This made it challenging to provide timely insights to their teams across different regions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Best Western implemented Amazon QuickSight which provided them with a scalable, cost-effective solution for data analysis. Amazon QuickSight allowed them to create interactive dashboards and generate real-time reports, significantly reducing the complexity and costs of their analytics operations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt; By adopting Amazon QuickSight, Best Western was able to reduce their analytics costs by 60% while improving the speed and efficiency of their data analysis processes. This enabled their teams across the globe to access timely insights, leading to better decision-making and enhanced operational efficiency worldwide.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon QuickSight redefines how businesses handle data by offering intuitive, real-time analytics and interactive dashboards. Its powerful features, such as quick in-memory calculations and seamless AWS integration, simplify complex data tasks and enhance decision-making. With QuickSight, you can effortlessly transform your data into actionable insights and drive smarter, faster decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/quicksight/latest/user/welcome.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/quicksight/latest/user/welcome.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/es/solutions/case-studies/trustly-using-amazon-quicksight-case-study/" rel="noopener noreferrer"&gt;https://aws.amazon.com/es/solutions/case-studies/trustly-using-amazon-quicksight-case-study/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Crafting Effective UX Research Plans</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Thu, 22 Aug 2024 18:27:46 +0000</pubDate>
      <link>https://dev.to/citrux-digital/crafting-effective-ux-research-plans-3gkl</link>
      <guid>https://dev.to/citrux-digital/crafting-effective-ux-research-plans-3gkl</guid>
      <description>&lt;p&gt;In the world of user experience (UX) design, research serves as the guiding light, illuminating the path to creating products and services that truly resonate with users. A well-structured UX research plan acts as the compass, directing your efforts, ensuring efficiency, and maximizing the value of your findings.&lt;/p&gt;

&lt;p&gt;This article serves as a comprehensive guide, walking you through the process of creating effective UX research plans that will empower you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Uncover user needs, motivations, and pain points&lt;/li&gt;
&lt;li&gt;  Validate design decisions and reduce development risks&lt;/li&gt;
&lt;li&gt;  Make informed decisions throughout the design process&lt;/li&gt;
&lt;li&gt;  Create user-centered products that delight and engage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uYfFcZLW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/09c5c8f0d813d1aee23c2ce275b8bc7f557e92c9-404x720.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uYfFcZLW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/09c5c8f0d813d1aee23c2ce275b8bc7f557e92c9-404x720.png%3Ffit%3Dmax%26auto%3Dformat" alt="Ux research plans" width="404" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Understanding UX Research Plans&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A UX research plan is a strategic document that outlines the goals, scope, and methodology for a research project. It serves as a blueprint for conducting research activities, ensuring that you collect the right data to answer your research questions and achieve your objectives.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Steps in Crafting Effective UX Research Plans:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Define Your Research Objectives:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What are the key questions you want to answer?&lt;/li&gt;
&lt;li&gt;  What are the specific goals you want to achieve with your research?&lt;/li&gt;
&lt;li&gt;  What are the potential business impacts of your research findings?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Identify Your Target Audience:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Who are the users you want to study?&lt;/li&gt;
&lt;li&gt;  What are their demographics, behaviors, and characteristics?&lt;/li&gt;
&lt;li&gt;  How will you recruit participants who represent your target audience?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Choose the Right Research Methods:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What type of data do you need to collect (qualitative or quantitative)?&lt;/li&gt;
&lt;li&gt;  What research methods are most suitable for your objectives and target audience (e.g., interviews, surveys, usability testing, card sorting)?&lt;/li&gt;
&lt;li&gt;  What are the strengths and limitations of each method?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Develop a Research Timeline:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What is the overall timeframe for your research project?&lt;/li&gt;
&lt;li&gt;  When will you conduct each research activity?&lt;/li&gt;
&lt;li&gt;  What are the key milestones and deliverables?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Create a Data Collection and Analysis Plan:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  How will you collect and store your research data?&lt;/li&gt;
&lt;li&gt;  What tools and techniques will you use to analyze your data?&lt;/li&gt;
&lt;li&gt;  How will you present your findings in a clear and actionable way?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Conduct the Research and Iterate:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Execute your research plan, ensuring you adhere to ethical guidelines and best practices.&lt;/li&gt;
&lt;li&gt;  Analyze your findings and identify key insights and patterns.&lt;/li&gt;
&lt;li&gt;  Use your research insights to inform design decisions and iterate on your product or service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GUA0WAro--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/07478b1046f071c802b5aa7e6e49ce8e3b4a6b84-916x557.jpg%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GUA0WAro--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/07478b1046f071c802b5aa7e6e49ce8e3b4a6b84-916x557.jpg%3Ffit%3Dmax%26auto%3Dformat" alt="audience" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;UX Research Plan Structure&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A typical UX research plan might include the following sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Project Overview:&lt;/strong&gt; A brief summary of the project, including its goals, scope, and target audience.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Research Objectives:&lt;/strong&gt; Clearly defined research questions and desired outcomes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Research Methodology:&lt;/strong&gt; Detailed description of the chosen research methods, including participant recruitment, data collection, and analysis techniques.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Timeline:&lt;/strong&gt; A schedule outlining the key phases of the research project, with specific dates for each activity.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Budget:&lt;/strong&gt; An estimate of the costs associated with the research, including participant incentives, tools, and software.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Deliverables:&lt;/strong&gt; A list of the expected outputs of the research, such as reports, presentations, and prototypes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Contingency Plans:&lt;/strong&gt; Anticipation of potential challenges and roadblocks, with strategies for mitigating them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Benefits of UX Research Plans:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Clarity and Focus:&lt;/strong&gt; Provides a clear roadmap for your research, ensuring everyone is on the same page.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Efficiency:&lt;/strong&gt; Helps you optimize your time and resources by prioritizing research activities and avoiding scope creep.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Actionable Insights:&lt;/strong&gt; Ensures you collect the right data to answer your research questions and make informed decisions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Stakeholder Alignment:&lt;/strong&gt; Helps you communicate the value and impact of your research to stakeholders, securing their buy-in and support.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;User-Centric Design:&lt;/strong&gt; Ensures your design decisions are based on real user needs and behaviors, leading to improved user satisfaction and product adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t3yEsFeQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/8109f61b981510f1e96522fbb906810267abbe37-720x480.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t3yEsFeQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.sanity.io/images/ceg39lx4/production/8109f61b981510f1e96522fbb906810267abbe37-720x480.png%3Ffit%3Dmax%26auto%3Dformat" alt="benefits" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crafting effective UX research plans is essential for uncovering valuable user insights and creating products and services that meet the needs and expectations of your target audience. By following the steps outlined in this guide, you can develop research plans that empower you to make informed design decisions and deliver exceptional user experiences. Remember, UX research is an ongoing process. Continuous research and iteration are key to staying ahead of the curve and creating products that truly resonate with users.&lt;/p&gt;

&lt;p&gt;Enjoyed this deep dive into UX research plans? ✨ Last week we explored the world of User Testing Protocols, and we'll continue bringing you valuable UI/UX insights every 🎨 UI/UX Design Thursday! Make sure to follow us so you don't miss out on future articles and resources. Connect with us on [Social Media Platform] to join the conversation and share your UX research journey!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;References:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Courage, C., &amp;amp; Baxter, K. (2005). Understanding your users: A practical guide to user requirements methods, tools, and techniques. Morgan Kaufmann.&lt;/li&gt;
&lt;li&gt;  Nielsen Norman Group. (n.d.). User research basics. Retrieved from &lt;a href="https://www.nngroup.com/articles/which-ux-research-methods/" rel="noopener noreferrer"&gt;https://www.nngroup.com/articles/which-ux-research-methods/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  The Interaction Design Foundation. (n.d.). The guide to UX research methods. Retrieved from &lt;a href="https://www.interaction-design.org/literature/topics/ux-research" rel="noopener noreferrer"&gt;https://www.interaction-design.org/literature/topics/ux-research&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Designing the Ultimate AWS EKS Cluster: A Terraform Blueprint for Success</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Wed, 21 Aug 2024 16:25:15 +0000</pubDate>
      <link>https://dev.to/citrux-digital/designing-the-ultimate-aws-eks-cluster-a-terraform-blueprint-for-success-2j9p</link>
      <guid>https://dev.to/citrux-digital/designing-the-ultimate-aws-eks-cluster-a-terraform-blueprint-for-success-2j9p</guid>
      <description>&lt;p&gt;Imagine a world where deploying and managing Kubernetes clusters in the cloud isn't a complex task but a seamless and efficient experience. This is where AWS Elastic Kubernetes Service (EKS) comes into play, simplifying the lives of developers and cloud architects. By leveraging the powerful combination of EKS and Terraform, you not only automate infrastructure deployment but also ensure consistency and scalability with just a few commands.&lt;/p&gt;

&lt;p&gt;This article will guide you step by step through the process of how to deploy a Kubernetes cluster in AWS using Terraform, we will have a product and order API example to show you the results!&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What is AWS EKS?&lt;/li&gt;
&lt;li&gt; A guide to deploy a cluster using Terraform&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What is AWS EKS?
&lt;/h3&gt;

&lt;p&gt;Amazon Elastic Kubernetes Service (Amazon EKS) is a managed service that simplifies running Kubernetes on AWS without needing to install, operate, and maintain your own Kubernetes control plane. Some key features that makes great AWS EKS are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Secure Networking and Authentication&lt;/strong&gt;: Integrates with AWS networking and security services, including AWS Identity and Access Management (IAM).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Easy Cluster Scaling&lt;/strong&gt;: Supports horizontal pod autoscaling and cluster autoscaling based on workload demand.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Managed Kubernetes Experience&lt;/strong&gt;: Allows you to manage clusters using eksctl, AWS Management Console, AWS CLI, API, kubectl, and Terraform.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;High Availability&lt;/strong&gt;: Provides high availability for your control plane across multiple Availability Zones.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Integration with AWS Services&lt;/strong&gt;: Seamlessly integrates with other AWS services for a comprehensive platform to deploy and manage containerized applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Guide to deploy a cluster using Terraform
&lt;/h3&gt;

&lt;p&gt;Using Terraform with AWS EKS simplifies provisioning, configuration, and management of Kubernetes clusters. These are the steps to deploy a cluster using terraform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Create an AWS account:&lt;/strong&gt; If you don’t have one you can sign up here &lt;a href="http://aws.amazon.com/" rel="noopener noreferrer"&gt;Cloud Computing Services - Amazon Web Services (AWS)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Install Terraform:&lt;/strong&gt; Depending on the operating system you have, you can refer to this guide to install it. &lt;a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli" rel="noopener noreferrer"&gt;Install Terraform | Terraform | HashiCorp Developer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Install AWS CLI:&lt;/strong&gt; Tool to manage your AWS services and resources from command line,depending on the operating system you have, you can refer to this guide to install it. &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;Install or update to the latest version of the AWS CLI - AWS Command Line Interface (amazon.com)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Install Kubectl:&lt;/strong&gt; Tool for interacting with Kubernetes clusters from command line, depending on the operating system you have, you can refer to this guide to install it. &lt;a href="https://kubernetes.io/docs/tasks/tools/" rel="noopener noreferrer"&gt;Install Tools | Kubernetes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Configure AWS CLI:&lt;/strong&gt; You will have to configure your AWS CLI using the &lt;code&gt;aws configure&lt;/code&gt; command with access credentials to AWS Account, you will have to provide Access Key ID, Secret Access Key and Session Token (you can find those in AWS Portal).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F728871b7da8c89df223e4ce134549ecc82d1465c-1371x395.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F728871b7da8c89df223e4ce134549ecc82d1465c-1371x395.png%3Ffit%3Dmax%26auto%3Dformat" alt="Aws credentials"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Clone Repository:&lt;/strong&gt; You can clone this repository &lt;a href="https://github.com/Citrux-Systems/aws-eks-terraform-demo" rel="noopener noreferrer"&gt;Citrux-Systems/aws-eks-terraform-demo&lt;/a&gt; , it will have the setup for EKS cluster and an example with app implementation.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Configure set up:&lt;/strong&gt; Once you have cloned the repository, you can modify the region, cluster name and namespace where you need to deploy in &lt;a href="http://variables.tf/" rel="noopener noreferrer"&gt;variables.tf&lt;/a&gt; file, for our demo we used &lt;code&gt;'us-west-2'&lt;/code&gt; , &lt;code&gt;“citrux-demo-eks-${random_string.suffix.result}'&lt;/code&gt; and &lt;code&gt;“ecommerce'&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AWS region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="k"&gt;default&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us-west-2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;random_string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;suffix&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;length&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
  &lt;span class="nx"&gt;special&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws_availability_zones&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;available&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="nx"&gt;locals&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;            &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;citrux-demo-eks-${random_string.suffix.result}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt;          &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;
  &lt;span class="nx"&gt;cluster_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.30&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="nx"&gt;instance_types&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;t3.medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;multiple&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;comma&lt;/span&gt; &lt;span class="nx"&gt;separated&lt;/span&gt;

  &lt;span class="nx"&gt;vpc_cidr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10.0.0.0/16&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="nx"&gt;azs&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_availability_zones&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Blueprint&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
    &lt;span class="nx"&gt;GitHubRepo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;github.com/aws-ia/terraform-aws-eks-blueprints&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ecommerce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Terraform files:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://variables.tf/" rel="noopener noreferrer"&gt;variables.tf&lt;/a&gt; :&lt;/strong&gt; In this file you’ll find the configuration of all variables you need to use. Here yoou can customize the cluster name, region, EC2 instance type for nodes (&lt;a href="https://aws.amazon.com/es/ec2/instance-types/?trk=fd08b265-afdb-405b-b24f-ac927a34ca67&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAjwoJa2BhBPEiwA0l0ImEUOpli6rNww0bwvkxSzhIPG6J_KY7-7yFlgNu1_zgqcN4oH0CbgwRoC0PgQAvD_BwE:G:s&amp;amp;s_kwcid=AL!4422!3!647999790423!p!!g!!amazon%20ec2!19685287168!143348660782&amp;amp;gclid=CjwKCAjwoJa2BhBPEiwA0l0ImEUOpli6rNww0bwvkxSzhIPG6J_KY7-7yFlgNu1_zgqcN4oH0CbgwRoC0PgQAvD_BwE" rel="noopener noreferrer"&gt;more information here&lt;/a&gt;), tags and Kubernetes namespace (change to the namespace your manifest files look for deploy the app).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AWS region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us-west-2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;random_string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;suffix&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;special&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//fetches a list of available Availability Zones (AZs) in the specified AWS region.&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws_availability_zones&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;available&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="nx"&gt;locals&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;citrux-demo-eks-${random_string.suffix.result}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.30&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;instance_types&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;t3.medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;multiple&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;comma&lt;/span&gt; &lt;span class="nx"&gt;separated&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;vpc_cidr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10.0.0.0/16&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;//The CIDR block for the VPC where the EKS cluster will be deployed&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;azs&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_availability_zones&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;available&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;names&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;Blueprint&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;GitHubRepo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;github.com/aws-ia/terraform-aws-eks-blueprints&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ecommerce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;//represents the Kubernetes namespace where resources will be deployed.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="http://providers.tf/" rel="noopener noreferrer"&gt;providers.tf&lt;/a&gt; :&lt;/strong&gt; In this file you’ll find a provider configuration where allows Terraform to interact with a specific cloud provider in the region you previously define.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="http://terraform.tf/" rel="noopener noreferrer"&gt;terraform.tf&lt;/a&gt; :&lt;/strong&gt; In this file you’ll find a Terraform configuration with all the required providers and versions needed to install and use for managing resources&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hashicorp/aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~&amp;gt; 5.47.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;random&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hashicorp/random&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;~&amp;gt; 3.6.1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;nullres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hashicorp/null&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;= 3.1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;kubernetes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hashicorp/kubernetes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;= 2.20&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;helm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hashicorp/helm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;= 2.9&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="http://main.tf/" rel="noopener noreferrer"&gt;main.tf&lt;/a&gt; :&lt;/strong&gt; In this file you’ll find the definition and resources configuration in Terraform. We are using the module pattern. In our case we have 2 modules: VPC and EKS. In the &lt;a href="http://main.tf/" rel="noopener noreferrer"&gt;Main.tf&lt;/a&gt; you need to mapped the modules and pass the value for the variables the modules are expecting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vpc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./modules/vpc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;vpc_cidr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_cidr&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;azs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;azs&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./modules/eks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_version&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;instance_types&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance_types&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;vpc_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_id&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;private_subnets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;namespace&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VPC Module:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://variable.tf/" rel="noopener noreferrer"&gt;variable.tf&lt;/a&gt; :&lt;/strong&gt; You’ll find the variables definition for the VPC module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name for the VPC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This variable specifies the CIDR block (IP address range) for the VPC&lt;/span&gt;
&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vpc_cidr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CIDR block for the VPC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This variable is used to specify the Availability Zones (AZs) in which the VPC resources will be distributed&lt;/span&gt;
&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;azs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Availability zones&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This variable is used to specify a set of tags (key-value pairs) that will be applied to the resources created within the VPC&lt;/span&gt;
&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tags&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tags to apply to resources&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="http://main.tf/" rel="noopener noreferrer"&gt;main.tf&lt;/a&gt; :&lt;/strong&gt; You’ll find a terraform configuration that creates a Virtual Private Cloud (VPC) using terraform modules with public and private subnets, a NAT Gateway, and configurations for running a Kubernetes cluster on Amazon EKS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vpc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terraform-aws-modules/vpc/aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cidr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_cidr&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;azs&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;azs&lt;/span&gt; &lt;span class="c1"&gt;//Availability Zones (AZs) to be used for the VPC&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;public_subnets&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;azs&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;cidrsubnet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_cidr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;private_subnets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;azs&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;cidrsubnet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_cidr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;enable_nat_gateway&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;single_nat_gateway&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;enable_dns_hostnames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Manage&lt;/span&gt; &lt;span class="nx"&gt;so&lt;/span&gt; &lt;span class="nx"&gt;we&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;manage_default_network_acl&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;default_network_acl_tags&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;${var.name}-default&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;manage_default_route_table&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;default_route_table_tags&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;${var.name}-default&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;manage_default_security_group&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;default_security_group_tags&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;${var.name}-default&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;public_subnet_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubernetes.io/cluster/${var.name}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shared&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubernetes.io/role/elb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;private_subnet_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubernetes.io/cluster/${var.name}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shared&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubernetes.io/role/internal-elb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vpc_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_id&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;private_subnets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;EKS module:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://variables.tf/" rel="noopener noreferrer"&gt;variables.tf&lt;/a&gt; :&lt;/strong&gt; You’ll find the variables definition for the EKS module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AWS region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name for the EKS cluster&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cluster_version&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EKS cluster version&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This variable is used to specify the EC2 instance types that will be used for the worker nodes in the EKS cluster.&lt;/span&gt;
&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;instance_types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EC2 instance types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This variable is used to specify a set of tags that will be applied to the resources created within the EKS cluster. &lt;/span&gt;
&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tags&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tags to apply to resources&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vpc_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;VPC ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;private_subnets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Private subnet IDs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;namespace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kubernetes namespace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="http://providers.tf/" rel="noopener noreferrer"&gt;providers.tf&lt;/a&gt; :&lt;/strong&gt; You’ll find the configuration for Kubernetes provider (which allows Terraform to interact with a Kubernetes cluster) and helm (which allows Terraform to manage Helm releases (packages of pre-configured Kubernetes resources) in a Kubernetes cluster).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Kubernetes&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;You&lt;/span&gt; &lt;span class="nx"&gt;should&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="nx"&gt;deployments&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;services&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;workspace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;This&lt;/span&gt; &lt;span class="nx"&gt;keeps&lt;/span&gt; &lt;span class="nx"&gt;workspaces&lt;/span&gt; &lt;span class="nf"&gt;modular &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;one&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;provision&lt;/span&gt; &lt;span class="nx"&gt;EKS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;another&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;scheduling&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Kubernetes&lt;/span&gt; &lt;span class="nx"&gt;resources&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;per&lt;/span&gt; &lt;span class="nx"&gt;best&lt;/span&gt; &lt;span class="nx"&gt;practices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubernetes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_endpoint&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_ca_certificate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;base64decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_certificate_authority_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;api_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;client.authentication.k8s.io/v1beta1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;This&lt;/span&gt; &lt;span class="nx"&gt;requires&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;awscli&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;installed&lt;/span&gt; &lt;span class="nx"&gt;locally&lt;/span&gt; &lt;span class="nx"&gt;where&lt;/span&gt; &lt;span class="nx"&gt;Terraform&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;executed&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get-token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--cluster-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;helm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;kubernetes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_endpoint&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_ca_certificate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;base64decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_certificate_authority_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;api_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;client.authentication.k8s.io/v1beta1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;This&lt;/span&gt; &lt;span class="nx"&gt;requires&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;awscli&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;installed&lt;/span&gt; &lt;span class="nx"&gt;locally&lt;/span&gt; &lt;span class="nx"&gt;where&lt;/span&gt; &lt;span class="nx"&gt;Terraform&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;executed&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get-token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--cluster-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="http://main.tf/" rel="noopener noreferrer"&gt;main.tf&lt;/a&gt; :&lt;/strong&gt; You’ll find the configuration that creates an EKS cluster with the cluster name, Kubernetes version, VPC and subnet settings, node groups, and add-ons. It also uses the &lt;code&gt;eks_blueprints_addons&lt;/code&gt; (&lt;a href="https://github.com/aws-ia/terraform-aws-eks-blueprints-addons" rel="noopener noreferrer"&gt;More information here&lt;/a&gt;) to allow the creation of load balancers and allow access from browser to the services we’ll deplloy. Finally, it updates the local kubeconfig file to allow the use of kubectl and creates a Kubernetes namespace for deploying resources.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terraform-aws-modules/eks/aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;19.15.1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_version&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_endpoint_public_access&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;//allows public access to the EKS cluster's API server endpoint.&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;vpc_id&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_id&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;subnet_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;control_plane_subnet_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;EKS&lt;/span&gt; &lt;span class="nx"&gt;Addons&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_addons&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ebs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;csi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;driver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;most_recent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;coredns&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;kube&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;cni&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;eks_managed_node_group_defaults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Needed&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ebs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;csi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;driver&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;iam_role_additional_policies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;AmazonEBSCSIDriverPolicy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;eks_managed_node_groups&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;one&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;node_group_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-group-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;instance_types&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance_types&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;min_size&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;max_size&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;desired_size&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;subnet_ids&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;two&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;node_group_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-group-2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;instance_types&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance_types&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;min_size&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;max_size&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;desired_size&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;subnet_ids&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//This module installs and configures various add-ons for the EKS cluster, such as the AWS Load Balancer Controller, Metrics Server, and AWS CloudWatch Metrics.&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eks_blueprints_addons&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-ia/eks-blueprints-addons/aws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.16.3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_endpoint&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_endpoint&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;cluster_version&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_version&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;oidc_provider_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;oidc_provider_arn&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;K8S&lt;/span&gt; &lt;span class="nx"&gt;Add&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ons&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;enable_aws_load_balancer_controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;aws_load_balancer_controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vpcId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_id&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;podDisruptionBudget.maxUnavailable&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;enableServiceMutatorWebhook&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;enable_metrics_server&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;enable_aws_cloudwatch_metrics&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;To&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt; &lt;span class="nx"&gt;kubeconfig&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;cluster&lt;/span&gt; &lt;span class="nx"&gt;details&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;null_resource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubeconfig&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;depends_on&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks_blueprints_addons&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;provisioner&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;local-exec&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws eks --region ${var.region}  update-kubeconfig --name ${var.name}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;AWS_CLUSTER_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;null_resource&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;create_namespace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;depends_on&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;null_resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kubeconfig&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;provisioner&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;local-exec&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kubectl create namespace ${var.namespace}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Run terraform:&lt;/strong&gt; Now when is all set, you can create the resources using Terraform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, run this command to initialize Terraform:&lt;code&gt;terraform init -upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then run these commands to add and apply the resources we need: &lt;code&gt;terraform plan -out terraform.plan , terraform apply terraform.plan&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After that, it will take about 10-15 minutes to get it done. It will create the resources in AWS and you will get your cluster information:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F7bf24bc013cf1fc582d04298a92dfb474b166c15-1362x499.png%3Frect%3D0%2C0%2C1362%2C156%26fit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F7bf24bc013cf1fc582d04298a92dfb474b166c15-1362x499.png%3Frect%3D0%2C0%2C1362%2C156%26fit%3Dmax%26auto%3Dformat" alt="cluster created image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, you can validate the status in AWS Console:&lt;/p&gt;

&lt;p&gt;Go to search bar and type 'Elastic Kubernetes'&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F002ca0e40f164ee4878695e7de6fd3a76dc0e55c-1373x436.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F002ca0e40f164ee4878695e7de6fd3a76dc0e55c-1373x436.png%3Ffit%3Dmax%26auto%3Dformat" alt="elastic kubernetes service image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then you will see the cluster created and it’s status, it has to be '&lt;strong&gt;Active'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F95ddd2a64d95bbf94185863d9171d7016de8d2b1-1357x361.png%3Ffit%3Dmax%26auto%3Dformat" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fceg39lx4%2Fproduction%2F95ddd2a64d95bbf94185863d9171d7016de8d2b1-1357x361.png%3Ffit%3Dmax%26auto%3Dformat" alt="active cluster image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Connect with Kubectl:&lt;/strong&gt; run the following command to allow kubectl modify your eks cluster so you can deploy containers has needed, you will have to give it your EKS information. Don’t forget to modify your region and cluster name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;aws eks --region &amp;lt;your-region&amp;gt; update-kubeconfig --name &amp;lt;cluster_name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Deploy containers with manifest files:&lt;/strong&gt; now you can go to the raw-manifests folder to apply all manifest files in order to deploy containers with your application. Don’t forget that all .yaml files you should review it and modify according to your app: your namespace, load balancer name, services name and paths.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;cd&lt;/span&gt; &lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;manifests&lt;/span&gt;
&lt;span class="nx"&gt;kubectl&lt;/span&gt; &lt;span class="nx"&gt;apply&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="nx"&gt;ingress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will appears something like this when the containers are deployed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;ingress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;networking&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;k8s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;io&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;alb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ingress&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt;
&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt;
&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apps&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt;
&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt;
&lt;span class="nx"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apps&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;orders&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Get endpoint to make http requests:&lt;/strong&gt; Use the following command you’ll obtain the address for your application deployment:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;kubectl&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;ingress&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="nx"&gt;ecommerce&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;NAME&lt;/span&gt;          &lt;span class="nx"&gt;CLASS&lt;/span&gt;   &lt;span class="nx"&gt;HOSTS&lt;/span&gt;   &lt;span class="nx"&gt;ADDRESS&lt;/span&gt;                                                   &lt;span class="nx"&gt;PORTS&lt;/span&gt;   &lt;span class="nx"&gt;AGE&lt;/span&gt;
&lt;span class="nx"&gt;alb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ingress&lt;/span&gt;   &lt;span class="nx"&gt;alb&lt;/span&gt;     &lt;span class="o"&gt;*&lt;/span&gt;       &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;ecommerce&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;alb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;406866228&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;us&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;west&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;elb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;amazonaws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;   &lt;span class="mi"&gt;80&lt;/span&gt;      &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="nx"&gt;m22s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you just have to modify your address for what you want to see from your application. In our case, we have 3 endpoints, one for orders and one for products with paths: &lt;em&gt;‘v1/orders’&lt;/em&gt; ,&lt;em&gt;‘v1/products’ and ‘v1/orders/products’,&lt;/em&gt; and we’ll see the information we have in each one:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://new-ecommerce-alb-406866228.us-west-2.elb.amazonaws.com/v1/orders" rel="noopener noreferrer"&gt;http://new-ecommerce-alb-406866228.us-west-2.elb.amazonaws.com/v1/orders&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Herbert Kelvin Jr.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Asphalt Street&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;02/11/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;STANDARD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Zulu Nunez&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Beta Road&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10/10/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FAST DELIVERY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lael Fanklin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Charlie Avenue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;02/10/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;STANDARD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Candice Chipilli&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Delta Downing View&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;22/09/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FAST DELIVERY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tedashii Tembo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Echo Complex&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;12/12/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FAST DELIVERY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="http://new-ecommerce-alb-406866228.us-west-2.elb.amazonaws.com/v1/products" rel="noopener noreferrer"&gt;http://new-ecommerce-alb-406866228.us-west-2.elb.amazonaws.com/v1/products&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hoodie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sticker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Socks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;T-Shirt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1e&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Beanie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="http://new-ecommerce-alb-406866228.us-west-2.elb.amazonaws.com/v1/orders/products" rel="noopener noreferrer"&gt;http://new-ecommerce-alb-406866228.us-west-2.elb.amazonaws.com/v1/orders/products&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Herbert Kelvin Jr.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Asphalt Street&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;02/11/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;STANDARD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hoodie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;John Zulu Nunez&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Beta Road&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10/10/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FAST DELIVERY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sticker&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lael Fanklin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Charlie Avenue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;02/10/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;STANDARD&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1c&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Socks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Candice Chipilli&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Delta Downing View&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;22/09/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FAST DELIVERY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;T-Shirt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;},&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;productId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;orderFor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tedashii Tembo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Echo Complex&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryDate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;12/12/2023&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deliveryType&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;FAST DELIVERY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;product&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;T-Shirt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how the last endpoint include products information from the products endpoint. This means the pods can communicate with each other, thanks to private subnet settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;AWS Elastic Kubernetes Services is a great alternative to deploy kubernetes cluster in the cloud, reducing the weight of manage the control plane with the self-managed nodes. Nonetheless, the amount of required kubernetes knowledge needed is quite high, making it better for migrate running kubernetes or create really big application with a need for certain infraestructure management. In our study case, the application just retrieve information, this case is commonly solved with API calls, in this kind of cases using lambda functions and api-gateways for orders and products would be better for quickly development, less infraestructure knowledge and reduced costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/overview/" rel="noopener noreferrer"&gt;Overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/architecture/" rel="noopener noreferrer"&gt;Cluster Architecture&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/overview/components/" rel="noopener noreferrer"&gt;Kubernetes Components&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/es/kubernetes/" rel="noopener noreferrer"&gt;Kubernetes en AWS | Amazon Web Services&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://spacelift.io/blog/terraform-eks" rel="noopener noreferrer"&gt;Provisioning AWS EKS Cluster with Terraform - Tutorial&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mastering Terraform State Management with Proven Best Practices</title>
      <dc:creator>munikeraragon</dc:creator>
      <pubDate>Tue, 20 Aug 2024 15:43:25 +0000</pubDate>
      <link>https://dev.to/citrux-digital/mastering-terraform-state-management-with-proven-best-practices-1gij</link>
      <guid>https://dev.to/citrux-digital/mastering-terraform-state-management-with-proven-best-practices-1gij</guid>
      <description>&lt;p&gt;Have you ever felt that your cloud infrastructure is getting out of control? or your resources mysteriously are disappearing or duplicating? If you're a developer or manage infrastructure, you know how tough it can be to keep everything organized and under control. This is where Terraform state comes to the rescue…. it's a crucial tool that helps keeping your projects on track.&lt;/p&gt;

&lt;p&gt;Think of Terraform state as a detailed, up-to-date map of your digital setup. It not only shows you what resources are being used but also helps to prevent problems before they happen. Without it, your infrastructure could end up in chaos, with risks of errors and data loss.&lt;/p&gt;

&lt;p&gt;In this article, we’ll take a look at how Terraform state helps you stay on top of your resources, boosts performance, catches unexpected issues, and makes teamwork easier. We’ll also cover what are the best practices for managing your state effectively and show you how to set it up.&lt;/p&gt;

&lt;p&gt;Are you ready to change how you handle your infrastructure with Terraform state?&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Terraform state?
&lt;/h3&gt;

&lt;p&gt;Terraform state tracks and provides an overview of your infrastructure’s resources and configuration. It’s a reference point for Terraform to know what resources have been created, updated, or destroyed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is Terraform State important?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Tracks all resources of your infrastructure allowing Terraform to manage them without re-creating them.&lt;/li&gt;
&lt;li&gt;  Improves performance allowing Terraform to skip repeatedly checking with the infrastructure provider to retrieve the current status of resources.&lt;/li&gt;
&lt;li&gt;  Helps detecting &lt;strong&gt;drifts&lt;/strong&gt;, which occurs when resources are changed outside of Terraform comparing the actual infrastructure with the desired configuration and updates.&lt;/li&gt;
&lt;li&gt;  Storages a remote state to allow collaboration in teams, ensuring consistent updates and avoiding conflicts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Manage Terraform State?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local State Management:&lt;/strong&gt; Terraform stated is stored by default in a JSON-formatted file called &lt;strong&gt;terraform.tfstate&lt;/strong&gt;, is located in the root directory of your terraform project and contains the information abouts the resources managed like ID’s, attributes, dependencies, metadata, among others. This file is created after running terraform apply.&lt;br&gt;&lt;br&gt;
It’s recommended to use it for small projects or individual use.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Remote State Management:&lt;/strong&gt; Allows multiple users to share and manage the state file in a secure way supporting collaboration and avoiding conflicts. It’s recommended for team environments and large projects. This are some of popular backends that you can use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Amazon S3&lt;/li&gt;
&lt;li&gt; Azure blob storage&lt;/li&gt;
&lt;li&gt; Google cloud storage&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  Terraform state best practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Use a remote state&lt;/strong&gt;: If you are working in a team environment, always use a remote backend so you won’t have to deal with conflicts and loss of information.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Enable locking&lt;/strong&gt;: Ensure that state locking is enabled, especially when you’re using a remote state, to prevent multiple users from making changes simultaneously and corrupt the state.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Encrypt the state file:&lt;/strong&gt; Always encrypt your state, either locally or remotely, due to it contains sensitive information.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Use workspaces for multiple environments&lt;/strong&gt;: Leverage workspaces or separate backends for managing state across different environments.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Regular backups&lt;/strong&gt;: Make backups regularly, especially when managing state locally.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Avoid manual modifications:&lt;/strong&gt; Never edit the state file manually, always use terraform commands like ‘terraform state’ to make adjustments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  AWS account or administrator access&lt;/li&gt;
&lt;li&gt;  S3 bucket created&lt;/li&gt;
&lt;li&gt;  AWS CLI installed and configured&lt;/li&gt;
&lt;li&gt;  Terraform installed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Terraform state code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The code bellow shows how to store your terraform state file inside an s3 bucket. Inside your root folder run the following cli comand and paste the example code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;touch&lt;/span&gt; &lt;span class="nx"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;S3&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="nx"&gt;where&lt;/span&gt; &lt;span class="nx"&gt;Terraform&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Bucket&lt;/span&gt; &lt;span class="nx"&gt;must&lt;/span&gt; &lt;span class="nx"&gt;exists&lt;/span&gt;
    &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-bucket-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="nx"&gt;within&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;S3&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="nx"&gt;where&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;stored&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;states/your-app/example/terraform.tfstate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt; &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="nx"&gt;where&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;S3&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;located&lt;/span&gt;
    &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;DynamoDB&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="nx"&gt;used&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="nx"&gt;locking&lt;/span&gt;
    &lt;span class="nx"&gt;dynamodb_table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terraform-state-lock-dynamo-dev&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; 

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;DynamoDB&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;used&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;prevent&lt;/span&gt; &lt;span class="nx"&gt;concurrent&lt;/span&gt; &lt;span class="nx"&gt;operations&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="nx"&gt;locking&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="nx"&gt;during&lt;/span&gt; &lt;span class="nx"&gt;Terraform&lt;/span&gt; &lt;span class="nx"&gt;runs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;If&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt; &lt;span class="nx"&gt;change&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;sure&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;reflect&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Managing Terraform state remotely is crucial for effective collaboration, especially when working within a team of multiple developers. By sharing state files, you prevent resource duplication, reduce costs, and avoid conflicts. Even if you're working solo, remote state management offers significant advantages, such as the flexibility to switch between workspaces and devices without the hassle of transferring local state files. Using a remote storage solution like an S3 bucket ensures that your development process remains flexible, agile, and secure, making it the optimal choice for both team and individual projects.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
