<?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: Pradeepa Murugesan</title>
    <description>The latest articles on DEV Community by Pradeepa Murugesan (@pradeepa_murugesan_15d27d).</description>
    <link>https://dev.to/pradeepa_murugesan_15d27d</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%2Fuser%2Fprofile_image%2F2748726%2Ffce93eaf-ce95-4528-891a-7d86ee3404fb.png</url>
      <title>DEV Community: Pradeepa Murugesan</title>
      <link>https://dev.to/pradeepa_murugesan_15d27d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pradeepa_murugesan_15d27d"/>
    <language>en</language>
    <item>
      <title>TimeWise – Your Personalized Daily Schedule Generator using AWS PartyRock</title>
      <dc:creator>Pradeepa Murugesan</dc:creator>
      <pubDate>Tue, 06 May 2025 06:53:35 +0000</pubDate>
      <link>https://dev.to/pradeepa_murugesan_15d27d/timewise-your-personalized-daily-schedule-generator-using-aws-partyrock-5fmj</link>
      <guid>https://dev.to/pradeepa_murugesan_15d27d/timewise-your-personalized-daily-schedule-generator-using-aws-partyrock-5fmj</guid>
      <description>&lt;h1&gt;
  
  
  Daily Task Scheduler with AWS PartyRock: A No-Code GenAI Experience
&lt;/h1&gt;

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

&lt;p&gt;In today's fast-paced world, time management is key to productivity and personal well-being. Imagine having an AI assistant that builds your daily schedule with just a few inputs—no coding, no manual planning. This is exactly what I explored by building a &lt;strong&gt;Daily Task Scheduler&lt;/strong&gt; using &lt;strong&gt;AWS PartyRock&lt;/strong&gt;, a generative AI application builder that lets you prototype powerful apps in minutes without writing a single line of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is AWS PartyRock?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS PartyRock&lt;/strong&gt; is a no-code platform that lets you build generative AI-powered applications with ease. It leverages foundational models from &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; to perform tasks like text generation, summarization, classification, and more. Developers and non-developers alike can build apps by simply dragging and dropping components, connecting inputs, and defining prompts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Overview: Daily Task Scheduler
&lt;/h2&gt;

&lt;p&gt;The goal of this project was to build an application that takes basic daily details—such as work, personal, and health tasks—and generates a full-day personalized schedule.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tools Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Platform&lt;/strong&gt;: &lt;a href="https://partyrock.aws" rel="noopener noreferrer"&gt;AWS PartyRock&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Underlying Model&lt;/strong&gt;: Amazon Bedrock Foundation Models&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No coding required&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Started with a PartyRock template&lt;/strong&gt; that uses GenAI for text planning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customized the input fields&lt;/strong&gt; to accept:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;General wake-up and sleep times
&lt;/li&gt;
&lt;li&gt;Categories of tasks (Work, Personal, Health)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Modified the prompt&lt;/strong&gt; to generate a realistic daily routine based on the user's inputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linked the output&lt;/strong&gt; to a display component that shows the final schedule in a readable format.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Output: Personalized Daily Schedule
&lt;/h2&gt;

&lt;p&gt;Here is the generated output from the app:&lt;br&gt;
Daily Schedule&lt;/p&gt;

&lt;p&gt;Here's your detailed time-blocked schedule:&lt;/p&gt;

&lt;p&gt;MORNING 7:00 AM - 7:15 AM: Wake up &amp;amp; hydration&lt;br&gt;
7:15 AM - 7:45 AM: Morning walk&lt;br&gt;
7:45 AM - 8:15 AM: Stretching/yoga&lt;br&gt;
8:15 AM - 8:30 AM: Meditation&lt;br&gt;
8:30 AM - 9:00 AM: Shower &amp;amp; get ready&lt;br&gt;
9:00 AM - 9:30 AM: Breakfast &amp;amp; light planning&lt;/p&gt;

&lt;p&gt;WORK MORNING (Peak Productivity)&lt;br&gt;
9:30 AM - 10:00 AM: Check and reply to emails&lt;br&gt;
10:00 AM - 11:00 AM: Team meeting&lt;br&gt;
11:00 AM - 11:15 AM: Buffer/quick break&lt;br&gt;
11:15 AM - 12:30 PM: Project report writing&lt;br&gt;
12:30 PM - 1:30 PM: Lunch break &amp;amp; short walk&lt;/p&gt;

&lt;p&gt;WORK AFTERNOON&lt;br&gt;
1:30 PM - 2:45 PM: Code review&lt;br&gt;
2:45 PM - 3:00 PM: Buffer/stretch break&lt;br&gt;
3:00 PM - 4:00 PM: Client call&lt;br&gt;
4:00 PM - 5:00 PM: Final documentation&lt;br&gt;
5:00 PM - 5:30 PM: Final email check &amp;amp; day wrap-up&lt;/p&gt;

&lt;p&gt;PERSONAL TIME&lt;br&gt;
5:30 PM - 6:15 PM: Buy groceries&lt;br&gt;
6:15 PM - 6:45 PM: Organize study desk&lt;br&gt;
6:45 PM - 7:00 PM: Evening meditation&lt;br&gt;
7:00 PM - 7:45 PM: Dinner preparation &amp;amp; eating&lt;br&gt;
7:45 PM - 8:00 PM: Clean up&lt;/p&gt;

&lt;p&gt;EVENING WIND-DOWN&lt;br&gt;
8:00 PM - 9:30 PM: Free time and reading&lt;br&gt;
9:30 PM - 10:15 PM: Evening routine (prepare for next day)&lt;br&gt;
10:15 PM - 10:30 PM: Light stretching &amp;amp; relaxation&lt;br&gt;
10:30 PM: Lights out&lt;/p&gt;

&lt;p&gt;Notes:&lt;br&gt;
• Buffer times are included between major tasks&lt;br&gt;
• Most demanding work is scheduled during morning hours&lt;br&gt;
• Health activities are distributed throughout the day&lt;br&gt;
• Evening schedule allows for proper wind-down&lt;br&gt;
• Free time is protected in the evening for relaxation&lt;br&gt;
• Schedule can be adjusted based on daily priorities&lt;/p&gt;




&lt;h2&gt;
  
  
  This is the output image generated by the app:
&lt;/h2&gt;

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




&lt;h2&gt;
  
  
  Why This Project Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hands-on with Generative AI&lt;/strong&gt;: It gave me an easy yet insightful entry into GenAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-Code Learning&lt;/strong&gt;: Great for beginners to get started with AWS AI tools without needing programming skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Application&lt;/strong&gt;: Time management is a practical problem, and this app provides a direct solution.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How to use &lt;strong&gt;AWS PartyRock&lt;/strong&gt; effectively.&lt;/li&gt;
&lt;li&gt;How GenAI can adapt responses based on structured prompts.&lt;/li&gt;
&lt;li&gt;The potential of building full-function apps without traditional programming.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The Daily Task Scheduler with AWS PartyRock is just the beginning. AWS's ecosystem opens doors to a wide range of AI-powered applications—from voice synthesis to image recognition. I'll be continuing this journey by experimenting with more mini-projects across the AWS stack.&lt;/p&gt;

&lt;p&gt;Stay tuned for upcoming projects, and feel free to try building your own GenAI tools with AWS PartyRock!&lt;/p&gt;




&lt;p&gt;💬 Have any questions or built something cool with PartyRock? Let’s connect in the comments!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>generativeai</category>
      <category>nocode</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Getting Started with Cloud: My Experience with the AWS 101 Workshop!!</title>
      <dc:creator>Pradeepa Murugesan</dc:creator>
      <pubDate>Sat, 05 Apr 2025 06:57:41 +0000</pubDate>
      <link>https://dev.to/pradeepa_murugesan_15d27d/getting-started-with-cloud-my-experience-with-the-aws-101-workshop-3cne</link>
      <guid>https://dev.to/pradeepa_murugesan_15d27d/getting-started-with-cloud-my-experience-with-the-aws-101-workshop-3cne</guid>
      <description>&lt;p&gt;Cloud computing can seem overwhelming at first, especially when you're just getting started. To ease into it, I recently completed the &lt;strong&gt;AWS 101 Workshop&lt;/strong&gt; — a hands-on beginner-friendly guide that walks you through deploying a web server securely inside your own Amazon VPC.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Workshop link: &lt;a href="https://catalog.workshops.aws/aws101/en-US" rel="noopener noreferrer"&gt;AWS 101 Workshop&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What is the AWS 101 Workshop?
&lt;/h2&gt;

&lt;p&gt;The AWS 101 Workshop is designed to introduce cloud beginners to essential services and networking concepts within AWS. It walks you through deploying a secure, private web tier in AWS with controlled internet access. &lt;/p&gt;

&lt;p&gt;You configure an EC2 instance that cannot be reached directly from the internet, but can still access public services like Amazon S3 or download packages via outbound internet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key AWS Services Covered
&lt;/h2&gt;

&lt;p&gt;Here are the main AWS services used throughout the workshop:&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon EC2 (Elastic Compute Cloud)
&lt;/h3&gt;

&lt;p&gt;Launch and manage virtual machines, configure instance types, attach storage, and apply security groups for access control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon VPC (Virtual Private Cloud)
&lt;/h3&gt;

&lt;p&gt;Set up a secure virtual network with public and private subnets, routing tables, internet gateways, and NAT gateways to control traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon S3 (Simple Storage Service)
&lt;/h3&gt;

&lt;p&gt;Upload and retrieve files from object storage. You also learn how to allow EC2 access to S3 using IAM roles instead of access keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Identity and Access Management (IAM)
&lt;/h3&gt;

&lt;p&gt;Grant secure, role-based access to AWS resources. Learn to apply least-privilege principles by setting fine-grained permissions.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Experience and Learnings
&lt;/h2&gt;

&lt;p&gt;This workshop provided a practical challenge: configure a &lt;strong&gt;private EC2 instance&lt;/strong&gt; that can access external services without being exposed to the internet. Initially, setting up the VPC, subnets, and route tables was a bit confusing — but it all came together after some trial and error.&lt;/p&gt;

&lt;p&gt;One of the most interesting parts was enabling &lt;strong&gt;outbound internet&lt;/strong&gt; using a &lt;strong&gt;NAT Gateway&lt;/strong&gt; in a public subnet, allowing the EC2 instance in the private subnet to download packages while remaining invisible to the outside world.&lt;/p&gt;

&lt;p&gt;Another key takeaway was how IAM roles can be used to grant EC2 access to S3 without hardcoding credentials, ensuring both security and automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hands-on experience configuring EC2, VPC, S3, and IAM&lt;/li&gt;
&lt;li&gt;Learned to isolate and secure infrastructure using private subnets&lt;/li&gt;
&lt;li&gt;Gained exposure to AWS networking fundamentals: subnets, route tables, gateways&lt;/li&gt;
&lt;li&gt;Understood how to use IAM roles instead of static credentials&lt;/li&gt;
&lt;li&gt;Confidence to start deploying cloud-based applications with better security awareness&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Result
&lt;/h2&gt;

&lt;p&gt;At the end of the workshop, I successfully deployed a sample web application using a private EC2 instance behind a load balancer. The setup followed modern architectural principles, including network isolation, least privilege access, and centralized logging.&lt;/p&gt;

&lt;p&gt;To view the deployed application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Retrieve the Load Balancer DNS from the AWS Console&lt;/li&gt;
&lt;li&gt;Paste it in your browser&lt;/li&gt;
&lt;li&gt;Access the live app running in a secure cloud environment&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Advice for Beginners
&lt;/h2&gt;

&lt;p&gt;If you're planning to try this workshop, here are a few tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review basic networking concepts like CIDR, NAT, and routing&lt;/li&gt;
&lt;li&gt;Follow each step slowly and carefully; don’t rush&lt;/li&gt;
&lt;li&gt;Use the AWS documentation when something feels unclear&lt;/li&gt;
&lt;li&gt;Take notes on what each component does — it helps with retention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This workshop is a great stepping stone before diving into AWS certifications or more advanced services like Lambda, ECS, or CloudFormation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Completing the AWS 101 Workshop has been a rewarding endeavor, laying a robust foundation for my cloud computing journey. I encourage others to explore this and other AWS learning opportunities to build their skills in this ever-evolving domain.&lt;/p&gt;

&lt;p&gt;AWS offers a variety of workshops catering to different skill levels and interests, which can be found on the &lt;a href="https://workshops.aws/" rel="noopener noreferrer"&gt;AWS Workshops page&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Result of the Deployed Service
&lt;/h3&gt;

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

&lt;p&gt;This workshop was a perfect hands-on intro to AWS — I highly recommend it to beginners eager to build real-world cloud skills.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>networking</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Implementing Secure and Scalable Three-Tier Applications on AWS</title>
      <dc:creator>Pradeepa Murugesan</dc:creator>
      <pubDate>Sat, 05 Apr 2025 06:45:42 +0000</pubDate>
      <link>https://dev.to/pradeepa_murugesan_15d27d/implementing-secure-and-scalable-three-tier-applications-on-aws-232d</link>
      <guid>https://dev.to/pradeepa_murugesan_15d27d/implementing-secure-and-scalable-three-tier-applications-on-aws-232d</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In today's digital era, businesses require web applications that are not only highly &lt;strong&gt;scalable&lt;/strong&gt; but also &lt;strong&gt;secure&lt;/strong&gt; and &lt;strong&gt;efficient&lt;/strong&gt;. One of the most widely adopted architectural patterns to achieve this is the &lt;strong&gt;Three-Tier Architecture&lt;/strong&gt;, which enhances application &lt;strong&gt;performance, maintainability, and security&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Three-Tier Architecture&lt;/strong&gt; consists of:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Presentation Tier&lt;/strong&gt; – The frontend that interacts with users (e.g., web servers).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Tier&lt;/strong&gt; – The logic layer that processes data and handles requests.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Tier&lt;/strong&gt; – The database layer that securely stores and manages data.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By leveraging &lt;strong&gt;AWS services&lt;/strong&gt;, we can build a &lt;strong&gt;scalable, highly available, and secure&lt;/strong&gt; three-tier application in the cloud. In this blog, I will walk you through the &lt;strong&gt;step-by-step implementation&lt;/strong&gt; of a Three-Tier Architecture on &lt;strong&gt;AWS&lt;/strong&gt;, highlighting key services, best practices, and security measures.  &lt;/p&gt;

&lt;p&gt;Let's dive in!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Implemention
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Step 1: Create an Amazon S3 Bucket
&lt;/h1&gt;

&lt;p&gt;To store static assets (such as images, scripts, and stylesheets) or application data, we first need to create an &lt;strong&gt;Amazon S3 bucket&lt;/strong&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Navigate to AWS S3:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;AWS Management Console&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;S3&lt;/strong&gt; in the services search bar.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Amazon S3&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create a New Bucket:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Create bucket&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Enter a &lt;strong&gt;unique Bucket name&lt;/strong&gt; (e.g., &lt;code&gt;yourname-bucket&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;AWS Region&lt;/strong&gt; where you want to store your data.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configure Bucket Settings:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keep &lt;strong&gt;Block Public Access&lt;/strong&gt; settings &lt;strong&gt;enabled&lt;/strong&gt; (for security).
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;versioning&lt;/strong&gt; if needed for data backup.
&lt;/li&gt;
&lt;li&gt;Leave other settings as &lt;strong&gt;default&lt;/strong&gt; unless specific configurations are required.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create the Bucket:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Create bucket&lt;/strong&gt; to finalize the setup.
&lt;/li&gt;
&lt;li&gt;You will see a &lt;strong&gt;success message&lt;/strong&gt; confirming bucket creation.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 2: Create an IAM Role for EC2
&lt;/h1&gt;

&lt;p&gt;To allow an EC2 instance to access AWS services securely, we need to create an &lt;strong&gt;IAM Role&lt;/strong&gt; and attach the required policies.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Navigate to IAM:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;AWS Management Console&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;IAM&lt;/strong&gt; in the services search bar.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Roles&lt;/strong&gt; under the &lt;strong&gt;Access management&lt;/strong&gt; section.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create a New IAM Role:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Create role&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;AWS Service&lt;/strong&gt; as the trusted entity.
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;EC2&lt;/strong&gt; as the use case (to allow EC2 instances to assume this role).
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Attach Required Policies:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Attach the following policies:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AmazonS3ReadOnlyAccess&lt;/strong&gt; – Provides read-only access to S3.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AmazonEC2InstanceProfile&lt;/strong&gt; – Grants permissions for EC2 to access necessary resources.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configure Role Settings:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enter a &lt;strong&gt;Role Name&lt;/strong&gt; (e.g., &lt;code&gt;3-tier-web-application&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Review the settings and permissions.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Role&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Verify IAM Role Creation:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;IAM &amp;gt; Roles&lt;/strong&gt; and search for the created role (&lt;code&gt;3-tier-web-application&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Ensure the attached policies are correct.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 3: Create a VPC in AWS
&lt;/h1&gt;

&lt;p&gt;A &lt;strong&gt;Virtual Private Cloud (VPC)&lt;/strong&gt; allows you to define a custom network for your AWS resources. Below are the steps to create a VPC.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Navigate to the VPC Dashboard
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;AWS Management Console&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;VPC&lt;/strong&gt; in the services search bar.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Your VPCs&lt;/strong&gt; under the &lt;strong&gt;Virtual Private Cloud&lt;/strong&gt; section.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create a New VPC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Create VPC&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Provide the following details:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name tag&lt;/strong&gt;: &lt;code&gt;MyVPC&lt;/code&gt; (or any name of your choice)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPv4 CIDR Block&lt;/strong&gt;: &lt;code&gt;10.0.0.0/16&lt;/code&gt; (or any custom CIDR block)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPv6 CIDR Block&lt;/strong&gt;: None (optional)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tenancy&lt;/strong&gt;: Default
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create VPC&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Verify the VPC Creation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate back to &lt;strong&gt;Your VPCs&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Ensure your newly created VPC appears in the list.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Step 4: Create Six Subnets for 3-Tier Architecture
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Navigate to the Subnets Section
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;VPC Dashboard&lt;/strong&gt; → &lt;strong&gt;Subnets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Subnet&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Select the VPC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose the &lt;strong&gt;VPC&lt;/strong&gt; created in Step 3.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create the First Subnet
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subnet Name:&lt;/strong&gt; &lt;code&gt;Public-Web-Subnet-AZ-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability Zone:&lt;/strong&gt; &lt;code&gt;us-west-1a&lt;/code&gt; (or any AZ in your region)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPv4 CIDR Block:&lt;/strong&gt; &lt;code&gt;10.0.0.0/24&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Subnet&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create the Remaining Subnets
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Subnet Name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Availability Zone&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;IPv4 CIDR Block&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Public-Web-Subnet-AZ-1&lt;/td&gt;
&lt;td&gt;us-west-1a&lt;/td&gt;
&lt;td&gt;10.0.0.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private-App-Subnet-AZ-1&lt;/td&gt;
&lt;td&gt;us-west-1a&lt;/td&gt;
&lt;td&gt;10.0.1.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private-DB-Subnet-AZ-1&lt;/td&gt;
&lt;td&gt;us-west-1a&lt;/td&gt;
&lt;td&gt;10.0.2.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public-Web-Subnet-AZ-2&lt;/td&gt;
&lt;td&gt;us-west-1b&lt;/td&gt;
&lt;td&gt;10.0.3.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private-App-Subnet-AZ-2&lt;/td&gt;
&lt;td&gt;us-west-1b&lt;/td&gt;
&lt;td&gt;10.0.4.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private-DB-Subnet-AZ-2&lt;/td&gt;
&lt;td&gt;us-west-1b&lt;/td&gt;
&lt;td&gt;10.0.5.0/24&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Verify Subnets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ensure all subnets are &lt;strong&gt;available&lt;/strong&gt; in the &lt;strong&gt;VPC Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 5: Create an Internet Gateway and Attach It to the VPC
&lt;/h1&gt;

&lt;p&gt;An &lt;strong&gt;Internet Gateway (IGW)&lt;/strong&gt; allows communication between resources inside the &lt;strong&gt;VPC&lt;/strong&gt; and the &lt;strong&gt;internet&lt;/strong&gt;. This step is crucial for making public subnets accessible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Create an Internet Gateway
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;VPC Dashboard&lt;/strong&gt; → &lt;strong&gt;Internet Gateways&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Internet Gateway&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Provide a &lt;strong&gt;Name&lt;/strong&gt; (e.g., &lt;code&gt;three-tier-igw&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Internet Gateway&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Attach IGW to the VPC
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Select the &lt;strong&gt;Internet Gateway&lt;/strong&gt; created (&lt;code&gt;three-tier-igw&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Actions&lt;/strong&gt; → &lt;strong&gt;Attach to VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Select the VPC created in Step 1 (&lt;code&gt;aws3tierworkshop&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Attach Internet Gateway&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  IGW is now attached to the VPC!
&lt;/h2&gt;

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

&lt;p&gt;This allows resources in the &lt;strong&gt;public subnet&lt;/strong&gt; to access the internet when configured correctly in the &lt;strong&gt;route table&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 6: Create and Attach a NAT Gateway
&lt;/h1&gt;

&lt;p&gt;To allow &lt;strong&gt;private subnets&lt;/strong&gt; to access the internet securely while keeping them protected, we need to create a &lt;strong&gt;NAT Gateway&lt;/strong&gt; in each &lt;strong&gt;public subnet&lt;/strong&gt;.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Navigate to AWS NAT Gateway
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS Management Console&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;VPC Dashboard&lt;/strong&gt; → &lt;strong&gt;NAT Gateways&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create NAT Gateway&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  step 1: Create NAT Gateway for AZ1
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; &lt;code&gt;NAT-GW-AZ1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subnet:&lt;/strong&gt; &lt;code&gt;Public-Web-Subnet-AZ-1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connectivity Type:&lt;/strong&gt; Public
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elastic IP:&lt;/strong&gt; Click &lt;strong&gt;Allocate Elastic IP&lt;/strong&gt; → Select an available &lt;strong&gt;Elastic IP&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create NAT Gateway&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  step 2: Repeat step 1 and 2 for the other subnet.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Verify NAT Gateway Status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;VPC Dashboard&lt;/strong&gt; → &lt;strong&gt;NAT Gateways&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Ensure that the &lt;strong&gt;State&lt;/strong&gt; of the NAT Gateways is &lt;strong&gt;Available&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 7: Configure Route Tables and Associate Subnets
&lt;/h1&gt;

&lt;p&gt;Now that we've created the &lt;strong&gt;NAT Gateways&lt;/strong&gt;, we need to configure the &lt;strong&gt;Route Tables&lt;/strong&gt; to ensure proper routing between public and private subnets.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  View Existing Route Tables
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;AWS Console&lt;/strong&gt; → &lt;strong&gt;VPC Dashboard&lt;/strong&gt; → &lt;strong&gt;Route Tables&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;You should see multiple route tables, including:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PublicRouteTable&lt;/code&gt; (for public subnets)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Private-RT-AZ1&lt;/code&gt; (for private subnets in AZ1)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Private-RT-AZ2&lt;/code&gt; (for private subnets in AZ2)
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Configure Public Route Table
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective:&lt;/strong&gt; Allow public subnets to have direct internet access via the &lt;strong&gt;Internet Gateway&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;PublicRouteTable&lt;/strong&gt; from the list.
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Routes&lt;/strong&gt; tab → Click &lt;strong&gt;Edit Routes&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add the following rule:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Destination:&lt;/strong&gt; &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target:&lt;/strong&gt; Select your &lt;strong&gt;Internet Gateway (IGW-ID)&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save Routes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 2: Configure Private Route Tables
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective:&lt;/strong&gt; Allow private subnets to access the internet via the &lt;strong&gt;NAT Gateways&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Private Route Table for AZ1
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Private-RT-AZ1&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Routes&lt;/strong&gt; tab → Click &lt;strong&gt;Edit Routes&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add the following rule:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Destination:&lt;/strong&gt; &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target:&lt;/strong&gt; Select &lt;strong&gt;NAT-GW-AZ1&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save Routes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Private Route Table for AZ2
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Private-RT-AZ2&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Routes&lt;/strong&gt; tab → Click &lt;strong&gt;Edit Routes&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add the following rule:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Destination:&lt;/strong&gt; &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target:&lt;/strong&gt; Select &lt;strong&gt;NAT-GW-AZ2&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save Routes&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 3: Associate Subnets with Route Tables
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Associate Public Subnets with Public Route Table
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;PublicRouteTable&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Subnet Associations&lt;/strong&gt; tab → Click &lt;strong&gt;Edit Subnet Associations&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Public-Web-Subnet-AZ-1&lt;/strong&gt; and &lt;strong&gt;Public-Web-Subnet-AZ-2&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save Associations&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Associate Private Subnets with Private Route Tables
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Private-RT-AZ1&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Subnet Associations&lt;/strong&gt; tab → Click &lt;strong&gt;Edit Subnet Associations&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Private-App-Subnet-AZ-1&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save Associations&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Private-RT-AZ2&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the &lt;strong&gt;Subnet Associations&lt;/strong&gt; tab → Click &lt;strong&gt;Edit Subnet Associations&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Private-App-Subnet-AZ-2&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save Associations&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 4: Verify the Routing Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go back to &lt;strong&gt;Route Tables&lt;/strong&gt; in the VPC Dashboard.
&lt;/li&gt;
&lt;li&gt;Ensure each route table has the correct routes and subnet associations.
&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;Public Subnets&lt;/strong&gt; should be linked to the &lt;strong&gt;Public Route Table&lt;/strong&gt;, and your &lt;strong&gt;Private Subnets&lt;/strong&gt; should be linked to their respective &lt;strong&gt;Private Route Tables&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now your &lt;strong&gt;VPC networking is fully configured&lt;/strong&gt; with proper internet and internal routing! &lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 8: Security Groups
&lt;/h2&gt;

&lt;p&gt;Security groups control the traffic allowed to our Elastic Load Balancers and EC2 instances. We will set up multiple security groups to enforce access rules.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Security Group for Public Load Balancer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Security Groups&lt;/strong&gt; in the VPC Dashboard (under &lt;strong&gt;Security&lt;/strong&gt;).
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Create a new security group for the &lt;strong&gt;public, internet-facing load balancer&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add an &lt;strong&gt;inbound rule&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; HTTP
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; Your IP (for admin access)
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Group for Public Web Instances
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a new security group for &lt;strong&gt;public instances&lt;/strong&gt; in the web tier.
&lt;/li&gt;
&lt;li&gt;Add two &lt;strong&gt;inbound rules&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Allow &lt;strong&gt;HTTP traffic&lt;/strong&gt; &lt;strong&gt;from the internet-facing load balancer security group&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Allow &lt;strong&gt;HTTP traffic from your IP&lt;/strong&gt; (for direct instance access).
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Group for Internal Load Balancer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a new security group for the &lt;strong&gt;internal load balancer&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add an &lt;strong&gt;inbound rule&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; HTTP
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; Public instance security group (allows traffic from web tier instances).
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Group for Private Instances (App Tier)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a new security group for &lt;strong&gt;private instances&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add two &lt;strong&gt;inbound rules&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Allow &lt;strong&gt;TCP traffic on port 4000&lt;/strong&gt; &lt;strong&gt;from the internal load balancer security group&lt;/strong&gt; (to receive traffic).
&lt;/li&gt;
&lt;li&gt;Allow &lt;strong&gt;TCP traffic on port 4000&lt;/strong&gt; &lt;strong&gt;from your IP&lt;/strong&gt; (for testing).
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Group for Private Database Instances
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a new security group for &lt;strong&gt;private database instances&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Add an &lt;strong&gt;inbound rule&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; MYSQL/Aurora (Port 3306)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; Private instance security group (allows only app-tier instances to access the database). &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;With these security groups, we ensure that only necessary traffic is allowed at each layer of the architecture while maintaining security and accessibility.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 9: Subnet Group
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Database Deployment - Subnet Groups
&lt;/h3&gt;

&lt;p&gt;To deploy our database in a high-availability setup, we need to create an &lt;strong&gt;RDS Subnet Group&lt;/strong&gt; that includes subnets from different availability zones.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a DB Subnet Group
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to the RDS Dashboard&lt;/strong&gt; in the AWS Console.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Subnet groups&lt;/strong&gt; on the left-hand side.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create DB subnet group&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Provide the following details:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: A meaningful name for the subnet group.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: A brief description.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPC&lt;/strong&gt;: Select the VPC we created earlier.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Subnets&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Select the subnets &lt;strong&gt;from each availability zone&lt;/strong&gt; that were specifically created for the &lt;strong&gt;database layer&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;If unsure, navigate back to the &lt;strong&gt;VPC Dashboard&lt;/strong&gt; to verify and select the correct &lt;strong&gt;Subnet IDs&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;blockquote&gt;
&lt;p&gt;This ensures our database is deployed across multiple availability zones, improving fault tolerance and reliability.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 10: Database Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Creating the Database
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to the RDS Dashboard&lt;/strong&gt; in the AWS Console.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Databases&lt;/strong&gt; on the left-hand side.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create database&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h3&gt;
  
  
  Configuring the Database
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose database creation method&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Standard create&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;MySQL-Compatible Amazon Aurora&lt;/strong&gt; as the engine.
&lt;/li&gt;
&lt;li&gt;Leave all &lt;strong&gt;Engine options&lt;/strong&gt; as default.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select a Template&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;Dev/Test&lt;/strong&gt; since this isn't a production setup.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Database Credentials&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a &lt;strong&gt;Master username&lt;/strong&gt; and &lt;strong&gt;password&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note down&lt;/strong&gt; these credentials for later authentication.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure High Availability&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Availability and durability&lt;/strong&gt;, select the option to create an &lt;strong&gt;Aurora Replica (reader node) in a different availability zone&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Network &amp;amp; Security Settings&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Connectivity&lt;/strong&gt;,

&lt;ul&gt;
&lt;li&gt;Choose the &lt;strong&gt;VPC&lt;/strong&gt; we created earlier.
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;DB subnet group&lt;/strong&gt; created in the previous step.
&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Public access&lt;/strong&gt; to &lt;strong&gt;No&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Attach the &lt;strong&gt;Security Group&lt;/strong&gt; for the database layer.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose Authentication Method&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Password authentication&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create the Database&lt;/strong&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copying Database Credentials&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;If you chose to &lt;strong&gt;auto-generate the password&lt;/strong&gt;, make sure to &lt;strong&gt;copy and save it&lt;/strong&gt; immediately after database creation, as AWS will &lt;strong&gt;not show it again&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Post-Deployment Checks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Once the database is provisioned, you should see:

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Writer instance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Reader instance&lt;/strong&gt; (in a different availability zone).
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Note down the Writer endpoint&lt;/strong&gt; for database connectivity in later steps.
&lt;/li&gt;

&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 11: App Instance Deployment
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Launching an EC2 Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to EC2 Service&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;AWS Management Console&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Instances&lt;/strong&gt; → &lt;strong&gt;Launch Instances&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose an Amazon Machine Image (AMI)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Amazon Linux 2 AMI&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select an Instance Type&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;t2.micro&lt;/strong&gt; (Free Tier eligible).
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next: Configure Instance Details&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Instance Details&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network:&lt;/strong&gt; Select the &lt;strong&gt;VPC&lt;/strong&gt; created earlier.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subnet:&lt;/strong&gt; Choose one of the &lt;strong&gt;Private App Subnets&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM Role:&lt;/strong&gt; Assign the IAM role created for this instance.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Pair:&lt;/strong&gt; Proceed &lt;strong&gt;without a key pair&lt;/strong&gt;, as we will use &lt;strong&gt;EC2 Instance Connect&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Security Group&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;Private Instance Security Group&lt;/strong&gt; created in Step 8.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch the Instance&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instance&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Wait for the instance to be provisioned.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h1&gt;
  
  
  Step 12: Connect to the Instance &amp;amp; Configure the Database
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Connecting to the EC2 Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access the EC2 Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;AWS EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Instances&lt;/strong&gt; to view all running instances.&lt;/li&gt;
&lt;li&gt;Select the desired instance by marking the checkbox next to it.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Connect&lt;/strong&gt; button located at the top-right corner.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Establish Connection Using Session Manager&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Connect to instance&lt;/strong&gt; page, select the &lt;strong&gt;Session Manager&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;Connect&lt;/strong&gt; button to initiate the session. A new browser tab will open, providing terminal access to your instance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the &lt;strong&gt;Session Manager&lt;/strong&gt; tab is unavailable or the connect button is disabled, ensure that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The instance has the &lt;strong&gt;SSM Agent&lt;/strong&gt; installed and running.&lt;/li&gt;
&lt;li&gt;The associated IAM role has the necessary permissions, specifically the &lt;code&gt;AmazonSSMManagedInstanceCore&lt;/code&gt; policy.&lt;/li&gt;
&lt;li&gt;The instance can route to the necessary AWS endpoints, either through the internet or via VPC endpoints. :contentReference[oaicite:0]{index=0}&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Switch to the &lt;code&gt;ec2-user&lt;/code&gt; Account&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once connected, the default user might be &lt;code&gt;ssm-user&lt;/code&gt;. Switch to the &lt;code&gt;ec2-user&lt;/code&gt; by executing:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; ec2-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Internet Connectivity&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test the internet connection by pinging an external server:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ping &lt;span class="nt"&gt;-c&lt;/span&gt; 4 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;If you receive responses, your instance has internet access. Stop the ping test by pressing &lt;code&gt;Ctrl + C&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Troubleshooting:&lt;/strong&gt; If the ping test fails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify that the instance's subnet route table directs internet-bound traffic to a NAT Gateway or an Internet Gateway, as appropriate.&lt;/li&gt;
&lt;li&gt;Ensure that security groups and network ACLs allow outbound ICMP traffic.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Configuring the Database
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install the MySQL Client
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Update the package repository and install the MySQL client:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;yum update &lt;span class="nt"&gt;-y&lt;/span&gt;
 &lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;mysql &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the above installation encounters issues, consider the following alternative steps:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
 &lt;span class="nb"&gt;sudo &lt;/span&gt;rpm &lt;span class="nt"&gt;-ivh&lt;/span&gt; mysql57-community-release-el7-11.noarch.rpm
 &lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;mysql-community-client &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Connect to the Amazon RDS Database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Initiate a connection to your RDS instance using the MySQL client. Replace &lt;code&gt;YOUR-RDS-ENDPOINT&lt;/code&gt; with your database's endpoint and &lt;code&gt;YOUR-USERNAME&lt;/code&gt; with your database username:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; mysql &lt;span class="nt"&gt;-h&lt;/span&gt; YOUR-RDS-ENDPOINT &lt;span class="nt"&gt;-u&lt;/span&gt; YOUR-USERNAME &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When prompted, enter the corresponding password.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Ensure that the security group associated with your RDS instance allows inbound traffic from your EC2 instance on the MySQL port (default: 3306).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Create a Database and Table
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Once connected to the MySQL prompt, create a new database named &lt;code&gt;webappdb&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;webappdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify the creation by listing all databases:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;DATABASES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Switch to the newly created database:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="n"&gt;USE&lt;/span&gt; &lt;span class="n"&gt;webappdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a table named &lt;code&gt;transactions&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;transactions&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
     &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="nb"&gt;DECIMAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
     &lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
     &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&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;/li&gt;
&lt;li&gt;
&lt;p&gt;Confirm the table creation:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;SHOW&lt;/span&gt; &lt;span class="n"&gt;TABLES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Insert and Retrieve Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Insert a sample record into the &lt;code&gt;transactions&lt;/code&gt; table:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;transactions&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'groceries'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Retrieve and display the inserted data:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Exit the MySQL Client
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Terminate the MySQL session by typing:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt; &lt;span class="n"&gt;EXIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Uploading Files to S3
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install AWS CLI (If Not Installed)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; aws-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configure AWS CLI
&lt;/h3&gt;

&lt;p&gt;Run the following command and enter your AWS credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access Key ID:&lt;/strong&gt; &lt;code&gt;[Your AWS Access Key]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secret Access Key:&lt;/strong&gt; &lt;code&gt;[Your AWS Secret Key]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Region:&lt;/strong&gt; &lt;code&gt;[Your AWS Region]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output Format:&lt;/strong&gt; &lt;code&gt;json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Upload a File to S3
&lt;/h3&gt;

&lt;p&gt;Replace &lt;code&gt;YOUR-BUCKET-NAME&lt;/code&gt; with your actual S3 bucket name and &lt;code&gt;yourfile.txt&lt;/code&gt; with the file you want to upload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;cp &lt;/span&gt;yourfile.txt s3://YOUR-BUCKET-NAME/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Upload a Directory to S3
&lt;/h3&gt;

&lt;p&gt;If you need to upload the entire &lt;code&gt;app-tier&lt;/code&gt; folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;cp &lt;/span&gt;app-tier/ s3://YOUR-BUCKET-NAME/app-tier/ &lt;span class="nt"&gt;--recursive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Verify Uploads
&lt;/h3&gt;

&lt;p&gt;To list files in your S3 bucket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;ls &lt;/span&gt;s3://YOUR-BUCKET-NAME/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Security Reminder:&lt;/strong&gt; Always ensure that database credentials and AWS credentials are stored securely and not hard-coded into your applications. Consider using &lt;strong&gt;AWS Secrets Manager&lt;/strong&gt; or &lt;strong&gt;Parameter Store&lt;/strong&gt; for managing sensitive information.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h1&gt;
  
  
  Step 13: Internal Load Balancing and Auto Scaling
&lt;/h1&gt;

&lt;h2&gt;
  
  
  App Tier AMI
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Navigate to the EC2 Dashboard&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS EC2 Dashboard&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Instances&lt;/strong&gt; in the left-hand navigation panel.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create an AMI (Amazon Machine Image)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;app-tier instance&lt;/strong&gt; that was previously created.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Actions&lt;/strong&gt; → &lt;strong&gt;Image and templates&lt;/strong&gt; → &lt;strong&gt;Create Image&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure the Image&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; and &lt;strong&gt;description&lt;/strong&gt; for the AMI.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Image&lt;/strong&gt; to start the process.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitor Image Creation&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The AMI creation process may take a few minutes.
&lt;/li&gt;
&lt;li&gt;To monitor the status, navigate to &lt;strong&gt;AMIs&lt;/strong&gt; under the &lt;strong&gt;Images&lt;/strong&gt; section in the left-hand navigation panel.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h1&gt;
  
  
  Step 14: Target Group
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Creating a Target Group
&lt;/h2&gt;

&lt;p&gt;While the AMI is being created, we can proceed with setting up a target group for the load balancer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Target Groups&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the left-hand navigation panel, go to &lt;strong&gt;Target Groups&lt;/strong&gt; under &lt;strong&gt;Load Balancing&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Target Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure the Target Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Instances&lt;/strong&gt; as the &lt;strong&gt;Target Type&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; for the target group.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;Protocol&lt;/strong&gt; to &lt;strong&gt;HTTP&lt;/strong&gt; and the &lt;strong&gt;Port&lt;/strong&gt; to &lt;strong&gt;4000&lt;/strong&gt;.
&lt;em&gt;(This is the port our Node.js app is running on.)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;VPC&lt;/strong&gt; used in the previous steps.&lt;/li&gt;
&lt;li&gt;Change the &lt;strong&gt;Health Check Path&lt;/strong&gt; to &lt;code&gt;/health&lt;/code&gt;, which corresponds to the health check endpoint of our app.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Skip Target Registration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; register any targets at this stage.&lt;/li&gt;
&lt;li&gt;Skip this step and &lt;strong&gt;create the target group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h1&gt;
  
  
  Step 15: Internal Load Balancer
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Creating an Internal Load Balancer
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Load Balancers&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left-hand navigation panel, go to &lt;strong&gt;Load Balancers&lt;/strong&gt; under &lt;strong&gt;Load Balancing&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose Load Balancer Type&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Application Load Balancer&lt;/strong&gt; (ALB) for handling HTTP traffic.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Create&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure the Load Balancer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; for the Load Balancer.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Internal&lt;/strong&gt; as the type (since this ALB will not be public-facing).&lt;/li&gt;
&lt;li&gt;This ALB will route traffic from the &lt;strong&gt;Web Tier&lt;/strong&gt; to the &lt;strong&gt;App Tier&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select Network Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose the &lt;strong&gt;correct VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;private subnets&lt;/strong&gt; for deployment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assign Security Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the &lt;strong&gt;security group&lt;/strong&gt; created earlier for the &lt;strong&gt;internal ALB&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Listener and Target Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ALB will &lt;strong&gt;listen for HTTP traffic&lt;/strong&gt; on &lt;strong&gt;port 80&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;Target Group&lt;/strong&gt; to the one created in Step 14.&lt;/li&gt;
&lt;li&gt;Select it from the dropdown.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create the Load Balancer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt; to finalize the setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h1&gt;
  
  
  Step 16: Launch Template
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Creating a Launch Template
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Launch Templates&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left-hand side, go to &lt;strong&gt;Launch Templates&lt;/strong&gt; under &lt;strong&gt;Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Launch Template&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; for the launch template.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Application and OS Images&lt;/strong&gt;, select the &lt;strong&gt;App Tier AMI&lt;/strong&gt; created earlier.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select Instance Type&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;t2.micro&lt;/strong&gt; as the instance type.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exclude Key Pair and Network Settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do &lt;strong&gt;not&lt;/strong&gt; include a key pair in the template.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;network settings&lt;/strong&gt; will be configured in the &lt;strong&gt;Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Security Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assign the &lt;strong&gt;security group&lt;/strong&gt; used for the &lt;strong&gt;App Tier&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Advanced Settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;Advanced details&lt;/strong&gt;, select the &lt;strong&gt;IAM instance profile&lt;/strong&gt; that has been used for other EC2 instances.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create Launch Template&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt; to finalize the setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Step 17: Auto Scaling
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Creating an Auto Scaling Group
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Auto Scaling Groups&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left-hand side, go to &lt;strong&gt;Auto Scaling Groups&lt;/strong&gt; under &lt;strong&gt;Auto Scaling&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Auto Scaling Group Name&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter a &lt;strong&gt;name&lt;/strong&gt; for your Auto Scaling Group.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Launch Template&lt;/strong&gt; created in the previous step.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Instance Launch Options&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;private instance subnets&lt;/strong&gt; for the &lt;strong&gt;App Tier&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Attach to Load Balancer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attach the Auto Scaling Group to the &lt;strong&gt;Load Balancer&lt;/strong&gt; created earlier.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;existing target group&lt;/strong&gt; from the dropdown.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Group Size and Scaling Policies&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desired capacity&lt;/strong&gt;: &lt;code&gt;2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum capacity&lt;/strong&gt;: &lt;code&gt;2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum capacity&lt;/strong&gt;: &lt;code&gt;2&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Skip to review&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finalize and Create Auto Scaling Group&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt; until the final step.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h1&gt;
  
  
  Step 18: Update Config File and Web Instance Deployment
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Update Config File
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;code&gt;application-code/nginx.conf&lt;/code&gt; file from the repository you downloaded.&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;line 58&lt;/strong&gt; and replace &lt;code&gt;[INTERNAL-LOADBALANCER-DNS]&lt;/code&gt; with your &lt;strong&gt;internal load balancer’s DNS&lt;/strong&gt;.

&lt;ul&gt;
&lt;li&gt;To find the &lt;strong&gt;DNS Name&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;EC2 Dashboard&lt;/strong&gt; → &lt;strong&gt;Load Balancers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select your &lt;strong&gt;internal load balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;DNS Name&lt;/strong&gt; from the details page.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Save the file and &lt;strong&gt;upload&lt;/strong&gt; both:

&lt;ul&gt;
&lt;li&gt;The updated &lt;code&gt;nginx.conf&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;application-code/web-tier&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;To the &lt;strong&gt;S3 bucket&lt;/strong&gt; you created for this lab.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Web Instance Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Launch a Web Instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;EC2 Dashboard&lt;/strong&gt; → Click on &lt;strong&gt;Instances&lt;/strong&gt; (left-hand side).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Amazon Linux 2 AMI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;t2.micro (Free Tier Eligible)&lt;/strong&gt; and click &lt;strong&gt;Next: Configure Instance Details&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Configure Instance Details
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Key-Pair&lt;/strong&gt;: Proceed &lt;strong&gt;without a key-pair&lt;/strong&gt; (using EC2 Instance Login).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Settings&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;correct VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose a &lt;strong&gt;Public Subnet (AZ-1)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable Auto-Assign Public IP&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Security Group&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use the &lt;strong&gt;existing Web Tier Security Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;IAM Role&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;already created IAM Role&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Click &lt;strong&gt;Launch Instance&lt;/strong&gt;.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Connect to the Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;EC2 Dashboard&lt;/strong&gt; → Click &lt;strong&gt;Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Wait until the &lt;strong&gt;Instance State&lt;/strong&gt; is &lt;strong&gt;Running&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Select the instance and click &lt;strong&gt;Connect&lt;/strong&gt; (top-right corner).&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Session Manager Tab&lt;/strong&gt; → Click &lt;strong&gt;Connect&lt;/strong&gt;.

&lt;ul&gt;
&lt;li&gt;A new browser tab will open.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Test Internet Connectivity
&lt;/h3&gt;

&lt;p&gt;Run the following commands to verify connectivity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-su&lt;/span&gt; ec2-user
ping 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 19: Configure Web Instance
&lt;/h1&gt;

&lt;p&gt;We will now install the necessary components for running our front-end application.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Install NVM and Node.js
&lt;/h2&gt;

&lt;p&gt;Run the following commands to install &lt;strong&gt;NVM&lt;/strong&gt; and &lt;strong&gt;Node.js 16&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
nvm &lt;span class="nb"&gt;install &lt;/span&gt;16
nvm use 16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Download Web Tier Code from S3
&lt;/h2&gt;

&lt;p&gt;Replace &lt;code&gt;BUCKET_NAME&lt;/code&gt; with your actual &lt;strong&gt;S3 bucket name&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/
aws s3 &lt;span class="nb"&gt;cp &lt;/span&gt;s3://BUCKET_NAME/web-tier/ web-tier &lt;span class="nt"&gt;--recursive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Build the React Application
&lt;/h2&gt;

&lt;p&gt;Navigate to the &lt;code&gt;web-tier&lt;/code&gt; folder and build the &lt;strong&gt;React app&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/web-tier
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Install and Configure NGINX
&lt;/h2&gt;

&lt;p&gt;NGINX is used as a web server to serve the front-end application and &lt;strong&gt;route API calls&lt;/strong&gt; to the internal load balancer.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Install NGINX:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;amazon-linux-extras &lt;span class="nb"&gt;install &lt;/span&gt;nginx1 &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Navigate to NGINX Configuration Directory:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /etc/nginx
&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see an &lt;code&gt;nginx.conf&lt;/code&gt; file.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Replace &lt;code&gt;nginx.conf&lt;/code&gt; with the one from S3:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo rm &lt;/span&gt;nginx.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;aws s3 &lt;span class="nb"&gt;cp &lt;/span&gt;s3://BUCKET_NAME/nginx.conf &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Restart NGINX:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;service nginx restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Set Permissions and Enable Auto-Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Grant necessary permissions:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /home/ec2-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ensure NGINX starts on boot:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;chkconfig nginx on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 20: External Load Balancer and Auto Scaling
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Create Web Tier AMI
&lt;/h2&gt;

&lt;p&gt;We will now create an &lt;strong&gt;Amazon Machine Image (AMI)&lt;/strong&gt; for the Web Tier to use later with our Auto Scaling Group.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Navigate to Instances
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Instances&lt;/strong&gt; on the left-hand panel.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  2. Select the Web Tier Instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Find the &lt;strong&gt;Web Tier&lt;/strong&gt; instance you launched.&lt;/li&gt;
&lt;li&gt;Click on the checkbox to select it.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  3. Create Image
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Actions&lt;/strong&gt; → &lt;strong&gt;Image and templates&lt;/strong&gt; → &lt;strong&gt;Create image&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  4. Fill Out Image Details
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; Give your image a meaningful name (e.g., &lt;code&gt;web-tier-ami&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Add a short description (e.g., "AMI for Web Tier Auto Scaling").&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Create and Monitor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click the &lt;strong&gt;Create image&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;To monitor the image creation progress:

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;AMIs&lt;/strong&gt; under &lt;strong&gt;Images&lt;/strong&gt; in the left navigation panel of the EC2 Dashboard.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Step 21: Target Group
&lt;/h1&gt;

&lt;p&gt;While the AMI is being created, we can create the target group for our external load balancer.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Navigate to Target Groups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to the EC2 Dashboard.&lt;/li&gt;
&lt;li&gt;On the left-hand side, under &lt;strong&gt;Load Balancing&lt;/strong&gt;, click &lt;strong&gt;Target Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Target Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  2. Target Group Settings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Instances&lt;/strong&gt; as the target type.&lt;/li&gt;
&lt;li&gt;Give your target group a name.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Configure Protocol and Port
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set the protocol to &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the port to &lt;strong&gt;80&lt;/strong&gt; (this is the port NGINX is listening on).&lt;/li&gt;
&lt;li&gt;Select the same &lt;strong&gt;VPC&lt;/strong&gt; used previously.&lt;/li&gt;
&lt;li&gt;Change the &lt;strong&gt;health check path&lt;/strong&gt; to &lt;code&gt;/health&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Skip Registering Targets
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Do not register any targets for now.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Target Group&lt;/strong&gt; to finish.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 22: Internet-Facing Load Balancer
&lt;/h1&gt;

&lt;p&gt;We will now create an &lt;strong&gt;Application Load Balancer (ALB)&lt;/strong&gt; that is &lt;strong&gt;internet-facing&lt;/strong&gt;. This ALB will route traffic from users to our &lt;strong&gt;Web Tier instances&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Navigate to Load Balancers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left sidebar, under &lt;strong&gt;Load Balancing&lt;/strong&gt;, click &lt;strong&gt;Load Balancers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  2. Choose Load Balancer Type
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Application Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Create&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Basic Configuration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; Give your ALB a name (e.g., &lt;code&gt;web-tier-alb&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheme:&lt;/strong&gt; Choose &lt;strong&gt;Internet-facing&lt;/strong&gt;.
&amp;gt; This ALB is public-facing and will handle traffic from users on the internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP address type:&lt;/strong&gt; Choose &lt;strong&gt;IPv4&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Network Mapping
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select the correct &lt;strong&gt;VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;public subnets&lt;/strong&gt; in &lt;strong&gt;multiple Availability Zones (AZs)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Configure Security Groups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose the &lt;strong&gt;Security Group&lt;/strong&gt; created for the &lt;strong&gt;Web Tier Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Listener and Routing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Listener protocol: &lt;strong&gt;HTTP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Port: &lt;strong&gt;80&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Forward to: Choose the &lt;strong&gt;Target Group&lt;/strong&gt; created in &lt;strong&gt;Step 21&lt;/strong&gt; for the web tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Create Load Balancer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt; to complete the setup.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 23: Launch Template (Web Tier)
&lt;/h1&gt;

&lt;p&gt;Before we configure Auto Scaling, we need to create a &lt;strong&gt;Launch Template&lt;/strong&gt; using the &lt;strong&gt;Web Tier AMI&lt;/strong&gt; we created earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Navigate to Launch Templates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left sidebar under &lt;strong&gt;Instances&lt;/strong&gt;, click &lt;strong&gt;Launch Templates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  2. Basic Configuration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; Provide a name for your Launch Template (e.g., &lt;code&gt;web-tier-launch-template&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Application and OS Images (Amazon Machine Image)&lt;/strong&gt;, select the &lt;strong&gt;Web Tier AMI&lt;/strong&gt; you previously created.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Instance Type
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;t2.micro&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Key Pair and Network Settings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Do not&lt;/strong&gt; include a Key Pair (we’ll use EC2 Instance Connect).&lt;/li&gt;
&lt;li&gt;Leave &lt;strong&gt;Network Settings&lt;/strong&gt; unchecked, as we’ll configure them inside the Auto Scaling Group.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Security Group and IAM Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select the &lt;strong&gt;Security Group&lt;/strong&gt; created for the &lt;strong&gt;Web Tier&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Advanced Details&lt;/strong&gt;, set the &lt;strong&gt;IAM instance profile&lt;/strong&gt; we’ve been using for EC2 instances.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Create Template
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt; to finish.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Step 24: Auto Scaling Group (Web Tier)
&lt;/h1&gt;

&lt;p&gt;We will now create the &lt;strong&gt;Auto Scaling Group (ASG)&lt;/strong&gt; for our &lt;strong&gt;Web Tier instances&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Navigate to Auto Scaling Groups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left sidebar under &lt;strong&gt;Auto Scaling&lt;/strong&gt;, click &lt;strong&gt;Auto Scaling Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  2. Configure Basic Settings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; Provide a name for the ASG (e.g., &lt;code&gt;web-tier-asg&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Launch Template:&lt;/strong&gt; Select the &lt;strong&gt;Launch Template&lt;/strong&gt; created in Step 23.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Instance Launch Options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Select the appropriate &lt;strong&gt;VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;public subnets&lt;/strong&gt; created for the &lt;strong&gt;Web Tier&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Configure Load Balancer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Attach the Auto Scaling Group to the &lt;strong&gt;Web Tier Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Target Group&lt;/strong&gt; associated with the Web Tier ALB.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Configure Group Size and Scaling Policies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desired Capacity:&lt;/strong&gt; 2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum Capacity:&lt;/strong&gt; 2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum Capacity:&lt;/strong&gt; 2&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Skip to review&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  6. Create Auto Scaling Group
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Review your settings.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Deployment Complete!
&lt;/h2&gt;

&lt;p&gt;You now have a fully working &lt;strong&gt;WebApp&lt;/strong&gt; running behind an &lt;strong&gt;Internet-Facing Load Balancer&lt;/strong&gt; with &lt;strong&gt;Auto Scaling&lt;/strong&gt; enabled for high availability. &lt;/p&gt;

&lt;p&gt;To &lt;strong&gt;see your application live&lt;/strong&gt;, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;On the left sidebar, under &lt;strong&gt;Load Balancing&lt;/strong&gt;, click &lt;strong&gt;Load Balancers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Find your &lt;strong&gt;Web Tier Load Balancer&lt;/strong&gt; (Internet-facing).&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;DNS name&lt;/strong&gt; of the load balancer.&lt;/li&gt;
&lt;li&gt;Paste it in your &lt;strong&gt;web browser&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You should now see your deployed Web Application running successfully!&lt;/p&gt;

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

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

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

&lt;p&gt;Congratulations on completing the deployment!&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Well done on successfully completing your &lt;strong&gt;three-tier architecture project on AWS&lt;/strong&gt;! 🎉  &lt;/p&gt;

&lt;p&gt;You've set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A solid &lt;strong&gt;three-tier architecture&lt;/strong&gt; using &lt;strong&gt;EC2&lt;/strong&gt;, &lt;strong&gt;Load Balancers&lt;/strong&gt;, &lt;strong&gt;Auto Scaling Groups&lt;/strong&gt;, &lt;strong&gt;S3&lt;/strong&gt;, and &lt;strong&gt;IAM&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Both &lt;strong&gt;internal&lt;/strong&gt; and &lt;strong&gt;external&lt;/strong&gt; load balancers.&lt;/li&gt;
&lt;li&gt;Proper &lt;strong&gt;scaling mechanisms&lt;/strong&gt; for your application and web tiers.&lt;/li&gt;
&lt;li&gt;A production-style &lt;strong&gt;deployment pipeline&lt;/strong&gt; from scratch.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧹 Clean Up Reminder
&lt;/h2&gt;

&lt;p&gt;Before wrapping up, it’s important to &lt;strong&gt;clean up all the AWS resources&lt;/strong&gt; you created for learning purposes to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid any &lt;strong&gt;unwanted charges&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Keep your &lt;strong&gt;AWS environment tidy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete &lt;strong&gt;EC2 instances, AMIs, Snapshots&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Delete &lt;strong&gt;Load Balancers, Target Groups, Launch Templates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Remove &lt;strong&gt;Auto Scaling Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Clean up your &lt;strong&gt;S3 buckets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Detach and remove &lt;strong&gt;IAM Roles&lt;/strong&gt; if not needed.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thank you for following along — and congratulations again on leveling up your cloud skills!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Building!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>threetierarchitecture</category>
      <category>cloudcomputing</category>
      <category>scalability</category>
    </item>
    <item>
      <title>AWS Polly: Transforming Text into Lifelike Speech</title>
      <dc:creator>Pradeepa Murugesan</dc:creator>
      <pubDate>Sat, 05 Apr 2025 06:40:20 +0000</pubDate>
      <link>https://dev.to/pradeepa_murugesan_15d27d/aws-polly-transforming-text-into-lifelike-speech-113n</link>
      <guid>https://dev.to/pradeepa_murugesan_15d27d/aws-polly-transforming-text-into-lifelike-speech-113n</guid>
      <description>&lt;h1&gt;
  
  
  AWS Polly: Transforming Text into Lifelike Speech
&lt;/h1&gt;

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

&lt;p&gt;In today's digital world, voice-enabled applications have gained massive popularity. Whether it's virtual assistants, audiobooks, or customer service bots, natural-sounding speech is crucial for user engagement. &lt;strong&gt;AWS Polly&lt;/strong&gt;, a cloud-based text-to-speech (TTS) service from Amazon Web Services (AWS), enables developers to convert text into lifelike speech using advanced deep learning technologies. This blog explores the capabilities of AWS Polly, its use cases, pricing, and how you can get started with it.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  What is AWS Polly?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Polly&lt;/strong&gt; is an AI-powered text-to-speech service that converts written text into natural-sounding speech. It leverages deep learning models to generate human-like speech in multiple languages and voices. Polly provides both standard TTS and neural TTS (NTTS), which enhances the naturalness and expressiveness of speech output.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Key Features of AWS Polly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lifelike Speech Synthesis&lt;/strong&gt; – Uses neural TTS technology to deliver high-quality speech.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Languages and Voices&lt;/strong&gt; – Supports a wide range of languages and voices, including both male and female speakers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Lexicons &amp;amp; Speech Marks&lt;/strong&gt; – Allows developers to customize pronunciation and control speech output with SSML (Speech Synthesis Markup Language).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time &amp;amp; Offline Synthesis&lt;/strong&gt; – Generates speech on the fly or pre-synthesizes it for later use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-Effective &amp;amp; Scalable&lt;/strong&gt; – A pay-as-you-go pricing model ensures affordability and scalability for different applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases of AWS Polly
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Polly&lt;/strong&gt; is widely used across industries for various applications. Some of its common use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Voice Assistants &amp;amp; Chatbots&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Enhances AI-driven assistants like Alexa by providing lifelike speech output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;E-Learning &amp;amp; Audiobooks&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Converts textbooks, guides, and learning materials into speech to aid accessibility and learning experiences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Content Accessibility&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Helps visually impaired users consume web content through screen readers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Telephony &amp;amp; IVR Systems&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Used in automated customer service systems for personalized voice responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gaming &amp;amp; Entertainment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Creates realistic voiceovers for video games, animated content, and movies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multilingual Applications&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Supports applications requiring language translation and multilingual speech output.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing Model
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Polly&lt;/strong&gt; follows a flexible pay-as-you-go pricing model, allowing businesses to optimize costs based on usage. The pricing is divided into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard TTS Pricing&lt;/strong&gt;: Charged per million characters processed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neural TTS (NTTS) Pricing&lt;/strong&gt;: Slightly higher than standard TTS, offering improved voice quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Tier&lt;/strong&gt;: AWS provides a free tier for Polly, offering 5 million standard characters or 1 million neural characters per month for the first 12 months.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For detailed pricing information, refer to &lt;a href="https://aws.amazon.com/polly/pricing/" rel="noopener noreferrer"&gt;AWS Polly Pricing&lt;/a&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Advantages of AWS Polly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalable and flexible pricing&lt;/strong&gt; based on usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-quality voices&lt;/strong&gt; with support for SSML.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language support&lt;/strong&gt; to cater to global audiences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Example
&lt;/h2&gt;

&lt;p&gt;Here’s how &lt;strong&gt;AWS Polly&lt;/strong&gt; is being used to read webpages and highlight content. With AWS Polly, developers can integrate text-to-speech capabilities into their websites or applications. This allows users to listen to webpage content, making it easier for people with visual impairments or those who prefer auditory learning experiences. The ability to highlight content as it's being read out loud further enhances accessibility, ensuring that users can easily follow along with the content.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Polly&lt;/strong&gt; is a powerful and versatile text-to-speech service that enables developers to create highly engaging voice-based applications. Whether you're building chatbots, e-learning solutions, or customer service systems, Polly’s lifelike speech synthesis enhances user experience. With its scalability, affordability, and broad language support, AWS Polly is an ideal choice for businesses looking to incorporate AI-driven speech solutions.&lt;/p&gt;

&lt;p&gt;Are you ready to add voice to your application? Start using AWS Polly today!&lt;/p&gt;

&lt;p&gt;For more details, visit &lt;a href="https://docs.aws.amazon.com/polly/" rel="noopener noreferrer"&gt;AWS Polly Documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>awspolly</category>
      <category>texttospeech</category>
      <category>cloudservices</category>
      <category>ai</category>
    </item>
    <item>
      <title>Amazon MQ: Simplifying Messaging for Modern Applications.</title>
      <dc:creator>Pradeepa Murugesan</dc:creator>
      <pubDate>Thu, 23 Jan 2025 02:43:49 +0000</pubDate>
      <link>https://dev.to/pradeepa_murugesan_15d27d/amazon-mq-simplifying-messaging-for-modern-applications-ae9</link>
      <guid>https://dev.to/pradeepa_murugesan_15d27d/amazon-mq-simplifying-messaging-for-modern-applications-ae9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpufwleq75gl3p9f8lh81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpufwleq75gl3p9f8lh81.png" alt="Amazon MQ Logo" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In today’s fast-paced world of distributed systems, reliable communication between services is a cornerstone of application design. Whether it’s microservices, IoT devices, or legacy systems, message brokers act as intermediaries to ensure seamless data exchange.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon MQ&lt;/strong&gt; is AWS’s fully managed message broker service that simplifies this complexity. It supports widely used open-source standards such as Apache ActiveMQ and RabbitMQ, enabling developers to migrate legacy systems effortlessly and build modern, decoupled architectures.  &lt;/p&gt;

&lt;p&gt;This blog dives into the core features, use cases, and practical advantages of Amazon MQ, along with how it fits into your cloud-based application ecosystem.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Features&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Fully Managed Service&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon MQ automates tedious administrative tasks such as:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provisioning hardware and software
&lt;/li&gt;
&lt;li&gt;Monitoring broker health and availability
&lt;/li&gt;
&lt;li&gt;Handling upgrades and patches
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lets developers focus on building applications instead of managing infrastructure.  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Open Standards Support&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It ensures compatibility with popular message protocols, including:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AMQP (Advanced Message Queuing Protocol)&lt;/strong&gt; for message-oriented middleware.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MQTT (Message Queuing Telemetry Transport)&lt;/strong&gt;, widely used in IoT devices.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenWire&lt;/strong&gt; and &lt;strong&gt;STOMP&lt;/strong&gt;, supported by Apache ActiveMQ.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means you can use your existing applications with Amazon MQ without rewriting code.  &lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;High Availability with Multi-AZ Deployment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon MQ ensures reliability through redundant infrastructure across multiple AWS Availability Zones. In the event of a hardware failure, it automatically switches to a standby instance.  &lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Scalable and Flexible&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;It scales to meet your workload demands dynamically and supports a pay-as-you-go pricing model, making it cost-effective for various business sizes.  &lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Secure Communication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Security is a priority in Amazon MQ, offering:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TLS encryption for data in transit.
&lt;/li&gt;
&lt;li&gt;AES-256 encryption for data at rest.
&lt;/li&gt;
&lt;li&gt;Fine-grained access control using AWS IAM policies.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;How Amazon MQ Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Message brokers play a crucial role in communication by facilitating the reliable exchange of messages between producers (senders) and consumers (receivers).  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Messaging Models&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Queue-Based Messaging&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Messages are stored in a queue and consumed by one receiver at a time. This guarantees:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ordered delivery
&lt;/li&gt;
&lt;li&gt;Fault-tolerant message processing
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Publish-Subscribe Model (Pub/Sub)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Multiple subscribers receive the same message simultaneously. This is ideal for real-time scenarios such as broadcasting updates to users.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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




&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Use Cases&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon MQ supports diverse scenarios, including:  &lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Enterprise Messaging&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Enterprises use Amazon MQ for integrating legacy systems with modern applications, enabling seamless communication.  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;IoT Applications&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon MQ’s support for MQTT makes it ideal for connecting IoT devices with cloud applications in real-time. Examples include smart homes, connected vehicles, and industrial monitoring systems.  &lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Microservices Communication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In a microservices architecture, Amazon MQ acts as a mediator to decouple services, ensuring:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fault tolerance
&lt;/li&gt;
&lt;li&gt;Asynchronous communication
&lt;/li&gt;
&lt;li&gt;Load distribution
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Financial Systems&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Financial services require low-latency, secure, and reliable messaging. Amazon MQ helps process transactions, reconcile accounts, and ensure regulatory compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Gaming Applications&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Multiplayer games can leverage Pub/Sub for real-time updates, such as broadcasting player actions to all participants in a match.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Integration with AWS Ecosystem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon MQ integrates seamlessly with other AWS services, enabling powerful workflows. For example:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda:&lt;/strong&gt; Trigger serverless functions based on incoming messages.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon SQS/SNS:&lt;/strong&gt; Use Amazon MQ alongside SQS (for asynchronous processing) or SNS (for message broadcasting).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon RDS/DynamoDB:&lt;/strong&gt; Store messages and metadata in databases for audit trails or advanced analytics.&lt;/li&gt;
&lt;/ul&gt;

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




&lt;h2&gt;
  
  
  &lt;strong&gt;Pricing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon MQ pricing is based on the following factors:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Broker Instance Hours&lt;/strong&gt;: Charges are based on the uptime of your broker instances.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage Costs&lt;/strong&gt;: Billed per GB-month of storage for message persistence.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Transfer&lt;/strong&gt;: Costs for moving messages between AWS services or out of AWS regions.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For small businesses or low-throughput applications, Amazon MQ’s cost structure can be overkill. In such cases, lightweight solutions like Amazon SQS may be a better alternative.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Amazon MQ vs. Alternatives&lt;/strong&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Amazon MQ&lt;/th&gt;
&lt;th&gt;Amazon SQS/SNS&lt;/th&gt;
&lt;th&gt;Apache Kafka&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fully Managed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partially&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Message Durability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Protocols&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (AMQP, MQTT)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use Case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Legacy Integration, IoT, Enterprise&lt;/td&gt;
&lt;td&gt;Lightweight Decoupling&lt;/td&gt;
&lt;td&gt;Real-Time Streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Benefits&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ease of Migration:&lt;/strong&gt; Supports legacy systems without refactoring code.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Productivity:&lt;/strong&gt; Developers focus on innovation while Amazon handles the backend.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; Ensures high availability and fault tolerance for critical workloads.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon MQ is a robust solution for managing inter-service communication, especially for businesses with complex messaging needs. With its support for open standards, high availability, and seamless integration with AWS services, Amazon MQ is well-suited for enterprise applications, microservices, IoT, and more.  &lt;/p&gt;

&lt;p&gt;If your application demands real-time, secure, and scalable communication, &lt;strong&gt;Amazon MQ&lt;/strong&gt; is worth exploring.  &lt;/p&gt;

&lt;p&gt;Have any questions or insights? Share them in the comments below!!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>amazonmq</category>
      <category>messaging</category>
    </item>
  </channel>
</rss>
