<?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: Kamali Sethurajan</title>
    <description>The latest articles on DEV Community by Kamali Sethurajan (@kamali_s).</description>
    <link>https://dev.to/kamali_s</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%2F2748638%2Fbc8033e3-d286-4ce4-a8a5-e5b7c5c2e61d.png</url>
      <title>DEV Community: Kamali Sethurajan</title>
      <link>https://dev.to/kamali_s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kamali_s"/>
    <language>en</language>
    <item>
      <title>AWS 101 WORKSHOP</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Mon, 31 Mar 2025 17:14:47 +0000</pubDate>
      <link>https://dev.to/kamali_s/aws-101-workshop-26hc</link>
      <guid>https://dev.to/kamali_s/aws-101-workshop-26hc</guid>
      <description>&lt;h1&gt;
  
  
  Building a Resilient AWS Architecture with Multi-AZ Deployment
&lt;/h1&gt;

&lt;p&gt;In this blog post, I'll walk you through creating a robust AWS architecture that spans multiple Availability Zones (AZs), includes both public and private subnets, and integrates essential AWS services like NAT Gateways, Internet Gateway, Application Load Balancer, and S3 VPC Endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Our architecture will consist of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Two Availability Zones for high availability&lt;/li&gt;
&lt;li&gt;Public and private subnets in each AZ&lt;/li&gt;
&lt;li&gt;NAT Gateways for outbound internet access from private subnets&lt;/li&gt;
&lt;li&gt;An Internet Gateway for public internet access&lt;/li&gt;
&lt;li&gt;Security groups for Application Load Balancer and Web Servers&lt;/li&gt;
&lt;li&gt;VPC Endpoint for private S3 access&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step-by-Step Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Create the Virtual Private Cloud (VPC)
&lt;/h3&gt;

&lt;p&gt;First, we'll create the VPC that will contain all our resources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the AWS VPC console&lt;/li&gt;
&lt;li&gt;Click "Create VPC"&lt;/li&gt;
&lt;li&gt;Select "VPC only" (we'll create subnets separately)&lt;/li&gt;
&lt;li&gt;Enter these details:

&lt;ul&gt;
&lt;li&gt;Name tag: Production-VPC&lt;/li&gt;
&lt;li&gt;IPv4 CIDR block: 10.0.0.0/16&lt;/li&gt;
&lt;li&gt;Leave IPv6 disabled (unless you specifically need it)&lt;/li&gt;
&lt;li&gt;Tenancy: Default&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create VPC"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Create Subnets in Availability Zone 1
&lt;/h3&gt;

&lt;p&gt;Now let's create our first set of subnets in Availability Zone 1:&lt;/p&gt;

&lt;h4&gt;
  
  
  Public Subnet A:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;In the VPC console, go to "Subnets"&lt;/li&gt;
&lt;li&gt;Click "Create subnet"&lt;/li&gt;
&lt;li&gt;Select your VPC from the dropdown&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Subnet name: Public-Subnet-A&lt;/li&gt;
&lt;li&gt;Availability Zone: Choose your first AZ (e.g., us-east-1a)&lt;/li&gt;
&lt;li&gt;IPv4 CIDR block: 10.0.0.0/20&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create subnet"&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Private Subnet A:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create subnet" again&lt;/li&gt;
&lt;li&gt;Select your VPC&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Subnet name: Private-Subnet-A&lt;/li&gt;
&lt;li&gt;Availability Zone: Same AZ as above (us-east-1a)&lt;/li&gt;
&lt;li&gt;IPv4 CIDR block: 10.0.128.0/20&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create subnet"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Create Subnets in Availability Zone 2
&lt;/h3&gt;

&lt;p&gt;Repeat the process for the second Availability Zone:&lt;/p&gt;

&lt;h4&gt;
  
  
  Public Subnet B:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create subnet"&lt;/li&gt;
&lt;li&gt;Select your VPC&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Subnet name: Public-Subnet-B&lt;/li&gt;
&lt;li&gt;Availability Zone: Choose your second AZ (e.g., us-east-1b)&lt;/li&gt;
&lt;li&gt;IPv4 CIDR block: 10.0.16.0/20&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create subnet"&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Private Subnet B:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create subnet" again&lt;/li&gt;
&lt;li&gt;Select your VPC&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Subnet name: Private-Subnet-B&lt;/li&gt;
&lt;li&gt;Availability Zone: Same AZ as above (us-east-1b)&lt;/li&gt;
&lt;li&gt;IPv4 CIDR block: 10.0.144.0/20&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create subnet"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Create Internet Gateway
&lt;/h3&gt;

&lt;p&gt;For public internet access:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the VPC console, go to "Internet Gateways"&lt;/li&gt;
&lt;li&gt;Click "Create internet gateway"&lt;/li&gt;
&lt;li&gt;Name it Production-IGW&lt;/li&gt;
&lt;li&gt;Click "Create internet gateway"&lt;/li&gt;
&lt;li&gt;Select the new IGW and click "Actions" &amp;gt; "Attach to VPC"&lt;/li&gt;
&lt;li&gt;Select your VPC and click "Attach internet gateway"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5. Create NAT Gateways
&lt;/h3&gt;

&lt;p&gt;We'll need one NAT Gateway in each AZ for private subnet internet access:&lt;/p&gt;

&lt;h4&gt;
  
  
  NAT Gateway in AZ 1:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to "NAT Gateways" in the VPC console&lt;/li&gt;
&lt;li&gt;Click "Create NAT gateway"&lt;/li&gt;
&lt;li&gt;Configure:

&lt;ul&gt;
&lt;li&gt;Name: NAT-GW-AZ1&lt;/li&gt;
&lt;li&gt;Subnet: Select Public-Subnet-A&lt;/li&gt;
&lt;li&gt;Connectivity type: Public&lt;/li&gt;
&lt;li&gt;Allocate Elastic IP (click "Allocate Elastic IP")&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create NAT gateway"&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  NAT Gateway in AZ 2:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create NAT gateway" again&lt;/li&gt;
&lt;li&gt;Configure:

&lt;ul&gt;
&lt;li&gt;Name: NAT-GW-AZ2&lt;/li&gt;
&lt;li&gt;Subnet: Select Public-Subnet-B&lt;/li&gt;
&lt;li&gt;Connectivity type: Public&lt;/li&gt;
&lt;li&gt;Allocate Elastic IP (click "Allocate Elastic IP")&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create NAT gateway"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note: Wait for both NAT Gateways to show status "Available" before proceeding.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Configure Route Tables
&lt;/h3&gt;

&lt;p&gt;We'll need separate route tables for public and private subnets.&lt;/p&gt;

&lt;h4&gt;
  
  
  Public Route Table:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to "Route Tables" in the VPC console&lt;/li&gt;
&lt;li&gt;Click "Create route table"&lt;/li&gt;
&lt;li&gt;Name it Public-Route-Table and select your VPC&lt;/li&gt;
&lt;li&gt;Click "Create"&lt;/li&gt;
&lt;li&gt;Select the new route table, go to "Routes" tab, click "Edit routes"&lt;/li&gt;
&lt;li&gt;Add a route:

&lt;ul&gt;
&lt;li&gt;Destination: 0.0.0.0/0&lt;/li&gt;
&lt;li&gt;Target: Select the Internet Gateway you created&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Save changes"&lt;/li&gt;
&lt;li&gt;Go to "Subnet associations" tab, click "Edit subnet associations"&lt;/li&gt;
&lt;li&gt;Select both public subnets (Public-Subnet-A and Public-Subnet-B)&lt;/li&gt;
&lt;li&gt;Click "Save associations"&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Private Route Table for AZ 1:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create route table"&lt;/li&gt;
&lt;li&gt;Name it Private-Route-Table-AZ1 and select your VPC&lt;/li&gt;
&lt;li&gt;Click "Create"&lt;/li&gt;
&lt;li&gt;Select the new route table, go to "Routes" tab, click "Edit routes"&lt;/li&gt;
&lt;li&gt;Add a route:

&lt;ul&gt;
&lt;li&gt;Destination: 0.0.0.0/0&lt;/li&gt;
&lt;li&gt;Target: Select the NAT Gateway in AZ 1 (NAT-GW-AZ1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Save changes"&lt;/li&gt;
&lt;li&gt;Go to "Subnet associations" tab, click "Edit subnet associations"&lt;/li&gt;
&lt;li&gt;Select Private-Subnet-A&lt;/li&gt;
&lt;li&gt;Click "Save associations"&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Private Route Table for AZ 2:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create route table"&lt;/li&gt;
&lt;li&gt;Name it Private-Route-Table-AZ2 and select your VPC&lt;/li&gt;
&lt;li&gt;Click "Create"&lt;/li&gt;
&lt;li&gt;Select the new route table, go to "Routes" tab, click "Edit routes"&lt;/li&gt;
&lt;li&gt;Add a route:

&lt;ul&gt;
&lt;li&gt;Destination: 0.0.0.0/0&lt;/li&gt;
&lt;li&gt;Target: Select the NAT Gateway in AZ 2 (NAT-GW-AZ2)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Save changes"&lt;/li&gt;
&lt;li&gt;Go to "Subnet associations" tab, click "Edit subnet associations"&lt;/li&gt;
&lt;li&gt;Select Private-Subnet-B&lt;/li&gt;
&lt;li&gt;Click "Save associations"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  7. Create Security Groups
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Application Load Balancer Security Group:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to "Security Groups" in the VPC console&lt;/li&gt;
&lt;li&gt;Click "Create security group"&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Security group name: ALB-Security-Group&lt;/li&gt;
&lt;li&gt;Description: Security group for Application Load Balancer&lt;/li&gt;
&lt;li&gt;VPC: Select your VPC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Under "Inbound rules", add:

&lt;ul&gt;
&lt;li&gt;Type: HTTP, Source: 0.0.0.0/0&lt;/li&gt;
&lt;li&gt;Type: HTTPS, Source: 0.0.0.0/0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create security group"&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Web Server Security Group:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Click "Create security group"&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Security group name: Web-Server-Security-Group&lt;/li&gt;
&lt;li&gt;Description: Security group for web servers in private subnets&lt;/li&gt;
&lt;li&gt;VPC: Select your VPC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Under "Inbound rules", add:

&lt;ul&gt;
&lt;li&gt;Type: HTTP, Source: Select the ALB security group&lt;/li&gt;
&lt;li&gt;Type: HTTPS, Source: Select the ALB security group&lt;/li&gt;
&lt;li&gt;Type: SSH, Source: Your IP (for management)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create security group"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  8. Create VPC Endpoint for S3
&lt;/h3&gt;

&lt;p&gt;For private access to S3 without going through the internet:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to "Endpoints" in the VPC console&lt;/li&gt;
&lt;li&gt;Click "Create endpoint"&lt;/li&gt;
&lt;li&gt;Configure:

&lt;ul&gt;
&lt;li&gt;Name tag: S3-VPC-Endpoint&lt;/li&gt;
&lt;li&gt;Service category: AWS services&lt;/li&gt;
&lt;li&gt;Service: Select com.amazonaws.[region].s3 (replace [region] with your region)&lt;/li&gt;
&lt;li&gt;VPC: Select your VPC&lt;/li&gt;
&lt;li&gt;Route tables: Select all private route tables&lt;/li&gt;
&lt;li&gt;Policy: Full access (or customize as needed)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click "Create endpoint"&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  9. Create Application Load Balancer
&lt;/h3&gt;

&lt;p&gt;Now let's set up the ALB to distribute traffic to our web servers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the EC2 console and navigate to "Load Balancers"&lt;/li&gt;
&lt;li&gt;Click "Create Load Balancer"&lt;/li&gt;
&lt;li&gt;Select "Application Load Balancer"&lt;/li&gt;
&lt;li&gt;Configure:

&lt;ul&gt;
&lt;li&gt;Name: Web-ALB&lt;/li&gt;
&lt;li&gt;Scheme: Internet-facing&lt;/li&gt;
&lt;li&gt;IP address type: IPv4&lt;/li&gt;
&lt;li&gt;VPC: Select your VPC&lt;/li&gt;
&lt;li&gt;Mappings: Select both AZs and their public subnets&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Under "Security groups", select the ALB security group&lt;/li&gt;
&lt;li&gt;Configure listeners for HTTP (80) and HTTPS (443)&lt;/li&gt;
&lt;li&gt;For now, skip target group creation (we'll create EC2 instances later)&lt;/li&gt;
&lt;li&gt;Click "Create load balancer"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;With this infrastructure in place, you're ready to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launch EC2 instances in your private subnets (attach the Web Server Security Group)&lt;/li&gt;
&lt;li&gt;Create a target group and register your instances with the ALB&lt;/li&gt;
&lt;li&gt;Set up Auto Scaling for high availability&lt;/li&gt;
&lt;li&gt;Configure Route 53 for DNS management&lt;/li&gt;
&lt;li&gt;Set up monitoring with CloudWatch&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cost Considerations
&lt;/h2&gt;

&lt;p&gt;Remember that NAT Gateways incur hourly charges and data processing fees. Consider these cost optimization strategies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use NAT Instances instead of NAT Gateways for development environments&lt;/li&gt;
&lt;li&gt;Implement S3 Gateway Endpoints (which are free) instead of Interface Endpoints where possible&lt;/li&gt;
&lt;li&gt;Monitor your data transfer costs&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;You've now set up a highly available, secure AWS architecture spanning multiple Availability Zones. This architecture provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fault tolerance through multi-AZ deployment&lt;/li&gt;
&lt;li&gt;Security through public/private subnet separation&lt;/li&gt;
&lt;li&gt;Scalability through the Application Load Balancer&lt;/li&gt;
&lt;li&gt;Private access to S3 via VPC endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This foundation can support web applications, APIs, or other services while maintaining security and availability best practices.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 TIER ARCHITECTURE PART-7</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Mon, 31 Mar 2025 15:17:49 +0000</pubDate>
      <link>https://dev.to/kamali_s/3-tier-architecture-part-7-27lg</link>
      <guid>https://dev.to/kamali_s/3-tier-architecture-part-7-27lg</guid>
      <description>&lt;h1&gt;
  
  
  External Load Balancer and Auto Scaling
&lt;/h1&gt;

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

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Instances&lt;/strong&gt; on the left-hand side of the &lt;strong&gt;EC2 dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;web tier instance&lt;/strong&gt; we created.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Actions&lt;/strong&gt;, select &lt;strong&gt;Image and templates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Image&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/image_placeholder" 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/image_placeholder" alt="Create Image" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give the image a &lt;strong&gt;name and description&lt;/strong&gt;, then click &lt;strong&gt;Create image&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;To monitor the status of the image creation:

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;AMIs&lt;/strong&gt; under &lt;strong&gt;Images&lt;/strong&gt; on the left-hand navigation panel of the &lt;strong&gt;EC2 dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

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

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Target Groups&lt;/strong&gt; under &lt;strong&gt;Load Balancing&lt;/strong&gt; on the left-hand side.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Create Target 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/image_placeholder" 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/image_placeholder" alt="Create Target Group" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Instances&lt;/strong&gt; as the target type.&lt;/li&gt;
&lt;li&gt;Give it a &lt;strong&gt;name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;protocol to HTTP&lt;/strong&gt; and &lt;strong&gt;port to 80&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;VPC&lt;/strong&gt; we’ve been using.&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;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Skip target registration and create the &lt;strong&gt;target group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Internet-Facing Load Balancer
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate 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;li&gt;Choose &lt;strong&gt;Application Load Balancer&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/image_placeholder" 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/image_placeholder" alt="Application Load Balancer" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give the load balancer a &lt;strong&gt;name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Internet-facing&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the correct &lt;strong&gt;VPC and public subnets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;security group&lt;/strong&gt; created for this ALB.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;HTTP traffic on port 80&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Forward traffic to the &lt;strong&gt;target group&lt;/strong&gt; created earlier.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Before configuring Auto Scaling, create a &lt;strong&gt;Launch Template&lt;/strong&gt; with the AMI created earlier.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Launch Template&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;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/image_placeholder" 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/image_placeholder" alt="Create Launch Template" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Name the &lt;strong&gt;Launch Template&lt;/strong&gt;.&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;li&gt;Choose &lt;strong&gt;Instance Type&lt;/strong&gt; as &lt;code&gt;t2.micro&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Do not include a &lt;strong&gt;Key pair&lt;/strong&gt; and &lt;strong&gt;Network Settings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;correct security group&lt;/strong&gt; 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;, use the same &lt;strong&gt;IAM instance profile&lt;/strong&gt; used for EC2 instances.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Auto Scaling
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate 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;li&gt;Give it a &lt;strong&gt;name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Launch Template&lt;/strong&gt; created earlier.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&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/image_placeholder" 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/image_placeholder" alt="Create Auto Scaling Group" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set &lt;strong&gt;VPC and public subnets&lt;/strong&gt; for the &lt;strong&gt;web tier&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Attach the &lt;strong&gt;Auto Scaling Group&lt;/strong&gt; to the &lt;strong&gt;Load Balancer’s target group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;desired, minimum, and maximum capacity&lt;/strong&gt; to &lt;strong&gt;2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Skip to review&lt;/strong&gt;, then &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;After completing these steps, our &lt;strong&gt;WebApp&lt;/strong&gt; is fully set up and ready to handle traffic efficiently!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 TIER ARCHITECTURE PART-6</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Mon, 31 Mar 2025 14:58:50 +0000</pubDate>
      <link>https://dev.to/kamali_s/3-tier-architecture-part-6-577i</link>
      <guid>https://dev.to/kamali_s/3-tier-architecture-part-6-577i</guid>
      <description>&lt;h1&gt;
  
  
  Update Config File
&lt;/h1&gt;

&lt;p&gt;Before we create and configure the web instances, open up the &lt;code&gt;application-code/nginx.conf&lt;/code&gt; file from the repo we downloaded. Scroll down to line 58 and replace &lt;code&gt;[INTERNAL-LOADBALANCER-DNS]&lt;/code&gt; with your internal load balancer’s DNS entry. You can find this by navigating to your internal load balancer's details page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DNS Name is,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Copy the above DNS name and replace it in your &lt;code&gt;nginx.conf&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Then, upload this file and the &lt;code&gt;application-code/web-tier&lt;/code&gt; folder to the S3 bucket you created for this lab.&lt;/p&gt;




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

&lt;ol&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;EC2 service dashboard&lt;/strong&gt; and click on &lt;strong&gt;Instances&lt;/strong&gt; on the left-hand side.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the first &lt;strong&gt;Amazon Linux 2 AMI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the free-tier eligible &lt;strong&gt;T2.micro&lt;/strong&gt; instance type and click &lt;strong&gt;Next: Configure Instance Details&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Proceed without a key-pair as we will use &lt;strong&gt;EC2-instance login&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure instance details:

&lt;ul&gt;
&lt;li&gt;Select the correct &lt;strong&gt;Network, Subnet, and IAM Role&lt;/strong&gt; created earlier.&lt;/li&gt;
&lt;li&gt;Use one of the &lt;strong&gt;private subnets&lt;/strong&gt; created for the app layer.&lt;/li&gt;
&lt;li&gt;Use the already created &lt;strong&gt;VPC and Public Subnet AZ-1&lt;/strong&gt;, and enable auto-assign &lt;strong&gt;Public IP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Assign the &lt;strong&gt;Web Tier Security Group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;IAM Role&lt;/strong&gt; created for the web tier.&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;/ol&gt;




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

&lt;ol&gt;
&lt;li&gt;Navigate to your list of running &lt;strong&gt;EC2 Instances&lt;/strong&gt; by clicking on &lt;strong&gt;Instances&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;When the instance state is &lt;strong&gt;running&lt;/strong&gt;, select the instance and click the &lt;strong&gt;Connect&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Session Manager&lt;/strong&gt; tab and click &lt;strong&gt;Connect&lt;/strong&gt; to open a new browser tab.&lt;/li&gt;
&lt;li&gt;Test connectivity by running the following command:
&lt;/li&gt;
&lt;/ol&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;h2&gt;
  
  
  Configure Web Instance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install NVM and Node.js
&lt;/h3&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;h3&gt;
  
  
  Download Web-Tier Code 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;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;h3&gt;
  
  
  Build the React App
&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; ~/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;h3&gt;
  
  
  Install and Configure 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;h4&gt;
  
  
  Configure Nginx
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the Nginx configuration file:
&lt;/li&gt;
&lt;/ol&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;ol&gt;
&lt;li&gt;Delete the existing &lt;code&gt;nginx.conf&lt;/code&gt; file and replace it with the one from S3:
&lt;/li&gt;
&lt;/ol&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;ol&gt;
&lt;li&gt;Restart Nginx:
&lt;/li&gt;
&lt;/ol&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;ol&gt;
&lt;li&gt;Ensure Nginx has permission to access files:
&lt;/li&gt;
&lt;/ol&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;ol&gt;
&lt;li&gt;Enable Nginx to start on boot:
&lt;/li&gt;
&lt;/ol&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;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%2Fkamali_s%2F3-tier-architecture-part-7-27lg" 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%2Fkamali_s%2F3-tier-architecture-part-7-27lg" alt="PART-7" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 TIER ARCHITECTURE PART-5</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Mon, 31 Mar 2025 14:58:27 +0000</pubDate>
      <link>https://dev.to/kamali_s/3-tier-architecture-part-5-41do</link>
      <guid>https://dev.to/kamali_s/3-tier-architecture-part-5-41do</guid>
      <description>&lt;h1&gt;
  
  
  Internal Load Balancing and Auto Scaling in AWS
&lt;/h1&gt;

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

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Instances&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;app tier instance&lt;/strong&gt; you created.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Actions&lt;/strong&gt;, select &lt;strong&gt;Image and Templates&lt;/strong&gt; → &lt;strong&gt;Create Image&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; and &lt;strong&gt;description&lt;/strong&gt;, then click &lt;strong&gt;Create Image&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Monitor the image creation progress under &lt;strong&gt;AMIs&lt;/strong&gt; in the left-hand navigation panel.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Create a Target Group
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Target Groups&lt;/strong&gt; under &lt;strong&gt;Load Balancing&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Target Group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the &lt;strong&gt;target type&lt;/strong&gt; to &lt;strong&gt;Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;protocol&lt;/strong&gt; to &lt;strong&gt;HTTP&lt;/strong&gt; and &lt;strong&gt;port&lt;/strong&gt; to &lt;strong&gt;4000&lt;/strong&gt; (Node.js app port).&lt;/li&gt;
&lt;li&gt;Select the appropriate &lt;strong&gt;VPC&lt;/strong&gt;.&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;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;, skip registering targets, and create the target group.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Create an Internal Load Balancer
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Load Balancers&lt;/strong&gt; under &lt;strong&gt;Load Balancing&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Application Load Balancer&lt;/strong&gt; and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt; and select &lt;strong&gt;internal&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure the &lt;strong&gt;VPC and private subnets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;security group&lt;/strong&gt; created for the internal ALB.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;listener&lt;/strong&gt; to &lt;strong&gt;HTTP (port 80)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the previously created &lt;strong&gt;target group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Create a Launch Template
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Launch Templates&lt;/strong&gt; under &lt;strong&gt;Instances&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;app tier AMI&lt;/strong&gt; created earlier.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Instance Type&lt;/strong&gt; as &lt;strong&gt;t2.micro&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Skip &lt;strong&gt;Key Pair and Network Settings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Assign the correct &lt;strong&gt;security group&lt;/strong&gt; for the app tier.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Advanced Details&lt;/strong&gt;, set the same &lt;strong&gt;IAM instance profile&lt;/strong&gt; as used in other EC2 instances.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Launch Template&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. Configure Auto Scaling
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Auto Scaling Groups&lt;/strong&gt; under &lt;strong&gt;Auto Scaling&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a &lt;strong&gt;name&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Launch Template&lt;/strong&gt; created earlier and click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Configure &lt;strong&gt;VPC and private instance subnets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Attach the &lt;strong&gt;Auto Scaling Group&lt;/strong&gt; to the previously created &lt;strong&gt;Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;desired, minimum, and maximum capacity&lt;/strong&gt; to &lt;strong&gt;2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Skip&lt;/strong&gt;, review settings, and click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. Update Configuration File
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;application-code/nginx.conf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;[INTERNAL-LOADBALANCER-DNS]&lt;/code&gt; with your &lt;strong&gt;internal load balancer’s DNS&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Upload &lt;code&gt;nginx.conf&lt;/code&gt; and &lt;code&gt;application-code/web-tier&lt;/code&gt; folder to the &lt;strong&gt;S3 bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Instances&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instances&lt;/strong&gt;.&lt;/li&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&lt;/strong&gt; instance type.&lt;/li&gt;
&lt;li&gt;Skip the key pair.&lt;/li&gt;
&lt;li&gt;Configure &lt;strong&gt;Network, Subnet, and IAM Role&lt;/strong&gt; (select a private subnet for the web layer).&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;web tier security group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the correct &lt;strong&gt;IAM role&lt;/strong&gt; for web-tier access.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instance&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Instances&lt;/strong&gt; in the EC2 dashboard.&lt;/li&gt;
&lt;li&gt;Select the running instance and click &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;Session Manager&lt;/strong&gt; tab and click &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Test connectivity with:
&lt;/li&gt;
&lt;/ol&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;h2&gt;
  
  
  9. Configure Web Instance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install NVM and Node.js
&lt;/h3&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;h3&gt;
  
  
  Download Web Tier Code 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;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;h3&gt;
  
  
  Build React App
&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; ~/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;
  
  
  10. Install and Configure NGINX
&lt;/h2&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;
  
  
  Replace Nginx Configuration
&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;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 and Configure 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;span class="nb"&gt;chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /home/ec2-user
&lt;span class="nb"&gt;sudo &lt;/span&gt;chkconfig nginx on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;This guide provides a structured and detailed approach to setting up &lt;strong&gt;internal load balancing and auto-scaling&lt;/strong&gt; in AWS, ensuring a smooth and scalable deployment.&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%2Fkamali_s%2F3-tier-architecture-part-6-577i" 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%2Fkamali_s%2F3-tier-architecture-part-6-577i" alt="PART-6" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 TIER ARCHITECTURE PART -4</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Mon, 31 Mar 2025 14:57:12 +0000</pubDate>
      <link>https://dev.to/kamali_s/3-tier-architecture-part-4-36f6</link>
      <guid>https://dev.to/kamali_s/3-tier-architecture-part-4-36f6</guid>
      <description>&lt;h1&gt;
  
  
  App Instance Deployment
&lt;/h1&gt;

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

&lt;ol&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;EC2 service dashboard&lt;/strong&gt; and click on &lt;strong&gt;Instances&lt;/strong&gt; on the left-hand side.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the first &lt;strong&gt;Amazon Linux 2 AMI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;T2.micro&lt;/strong&gt; instance type (Free Tier eligible) and click &lt;strong&gt;Next: Configure Instance Details&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proceed without key-pair&lt;/strong&gt; because we will use EC2 Instance Connect.&lt;/li&gt;
&lt;li&gt;Configure the instance details:

&lt;ul&gt;
&lt;li&gt;Select the correct &lt;strong&gt;Network, Subnet, and IAM role&lt;/strong&gt; (previously created).&lt;/li&gt;
&lt;li&gt;Use one of the &lt;strong&gt;private subnets&lt;/strong&gt; created for this layer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use the already created&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPC and Private Subnet AZ-1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Instance Security Group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;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;/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%2F0r8bczrcpbwwmxfb0z0o.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%2F0r8bczrcpbwwmxfb0z0o.png" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;EC2 dashboard&lt;/strong&gt; and click on &lt;strong&gt;Instances&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Once the instance is &lt;strong&gt;running&lt;/strong&gt;, select it and click &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Session Manager&lt;/strong&gt; tab and click &lt;strong&gt;Connect&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you cannot connect via Session Manager, verify that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The instance can route to your &lt;strong&gt;NAT Gateway&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;IAM role&lt;/strong&gt; has necessary permissions for EC2 Instance Connect.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Once connected, switch to the &lt;code&gt;ec2-user&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Check if the instance has internet access:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ping 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If there is no response, check &lt;strong&gt;route tables and subnet associations&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Install MySQL CLI:
&lt;/li&gt;
&lt;/ol&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;mysql &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you encounter errors, try:&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-e17-11.noarch.rpm
 &lt;span class="nb"&gt;sudo &lt;/span&gt;rpm &lt;span class="nt"&gt;--import&lt;/span&gt; https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
 &lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;https://dev.mysql.com/get/mysql57-community-release-e17-11.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ol&gt;
&lt;li&gt;Connect to the Aurora RDS writer endpoint:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   mysql &lt;span class="nt"&gt;-h&lt;/span&gt; &amp;lt;RDS-ENDPOINT&amp;gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &amp;lt;USER&amp;gt; &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a database:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&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;/div&gt;



&lt;ol&gt;
&lt;li&gt;Verify the database:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&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;/div&gt;



&lt;ol&gt;
&lt;li&gt;Use the database and create a table:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&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;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;EXISTS&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;/div&gt;



&lt;ol&gt;
&lt;li&gt;Insert test data:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&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="s1"&gt;'400'&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;/div&gt;



&lt;ol&gt;
&lt;li&gt;Verify the data:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&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;/div&gt;



&lt;ol&gt;
&lt;li&gt;Exit MySQL:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&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;/div&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%2Fduuzlbavmidz62qs36fx.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%2Fduuzlbavmidz62qs36fx.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring the App Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Update the database credentials in &lt;code&gt;DbConfig.js&lt;/code&gt;:

&lt;ul&gt;
&lt;li&gt;Fill in &lt;strong&gt;hostname, user, password, and database&lt;/strong&gt; details.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Aurora RDS writer endpoint&lt;/strong&gt; as hostname.&lt;/li&gt;
&lt;li&gt;Set database name as &lt;code&gt;webappdb&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Upload the &lt;code&gt;app-tier&lt;/code&gt; folder to the &lt;strong&gt;S3 bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Install &lt;strong&gt;NVM (Node Version Manager)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install &lt;strong&gt;Node.js&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   nvm &lt;span class="nb"&gt;install &lt;/span&gt;16
   nvm use 16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install &lt;strong&gt;PM2 (Process Manager)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Download the application code from S3:
&lt;/li&gt;
&lt;/ol&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://&amp;lt;BUCKET_NAME&amp;gt;/app-tier/ app-tier &lt;span class="nt"&gt;--recursive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install dependencies and start the app:
&lt;/li&gt;
&lt;/ol&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; ~/app-tier
   npm &lt;span class="nb"&gt;install
   &lt;/span&gt;pm2 start index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Verify that the app is running:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pm2 list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If &lt;strong&gt;errored&lt;/strong&gt;, check logs:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pm2 logs
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ol&gt;
&lt;li&gt;Enable &lt;strong&gt;PM2 auto-start&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pm2 startup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Copy and run the output command in your terminal.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the current processes:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pm2 save
&lt;/code&gt;&lt;/pre&gt;

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

&lt;h2&gt;
  
  
  Testing the App Tier
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test health check endpoint:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl http://localhost:4000/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Expected response:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"This is the health check"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

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

&lt;ol&gt;
&lt;li&gt;Test database connection:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl http://localhost:4000/transaction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Expected response:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"amount"&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="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"groceries"&lt;/span&gt;&lt;span class="p"&gt;}]}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&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%2Fkamali_s%2F3-tier-architecture-part-5-41do" 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%2Fkamali_s%2F3-tier-architecture-part-5-41do" alt="PART-5" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3TIRE ARCHITECTURE PART-3</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Mon, 31 Mar 2025 14:41:53 +0000</pubDate>
      <link>https://dev.to/kamali_s/3tire-architecture-part-3-2ja3</link>
      <guid>https://dev.to/kamali_s/3tire-architecture-part-3-2ja3</guid>
      <description>&lt;h1&gt;
  
  
  Database Deployment
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Subnet Groups
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Open the AWS console and go to the RDS dashboard.
&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;/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%2Fdazco6lmndaenlenko4h.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%2Fdazco6lmndaenlenko4h.png" alt="Image description" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create the Subnet Group&lt;/strong&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 subnet group.
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;VPC&lt;/strong&gt; that was created for the database layer.
&lt;strong&gt;Add Subnets&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Ensure that subnets from &lt;strong&gt;each availability zone&lt;/strong&gt; designated for the database layer are added.
&lt;/li&gt;
&lt;li&gt;If needed, go 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%2Fggq4mbtjaaqgozlfop7l.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%2Fggq4mbtjaaqgozlfop7l.png" alt="Image description" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to Databases&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;In the RDS dashboard, click on &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;/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%2Fazzrv39jbrtgbcxq6fsy.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%2Fazzrv39jbrtgbcxq6fsy.png" alt="Image description" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configuration Steps&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;Standard Create&lt;/strong&gt; for an &lt;strong&gt;Amazon Aurora (MySQL-Compatible) database&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Keep the &lt;strong&gt;Engine options&lt;/strong&gt; as default.
&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%2Fm27m4ackl4koyb9dkp06.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%2Fm27m4ackl4koyb9dkp06.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%2F7ort1i8wosaba6jofqih.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%2F7ort1i8wosaba6jofqih.png" alt="Image description" width="800" height="144"&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%2F8btnad2nswurq84skhcb.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%2F8btnad2nswurq84skhcb.png" alt="Image description" width="800" height="294"&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%2Ftwpocgdfcxgbs1421m2y.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%2Ftwpocgdfcxgbs1421m2y.png" alt="Image description" width="800" height="429"&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%2Fe8wk917hqsvxespvye9v.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%2Fe8wk917hqsvxespvye9v.png" alt="Image description" width="800" height="346"&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%2Fkqky5honx595ah7szhac.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%2Fkqky5honx595ah7szhac.png" alt="Image description" width="800" height="96"&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%2Fmnxhd26n2ien7jfluafr.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%2Fmnxhd26n2ien7jfluafr.png" alt="Image description" width="800" height="107"&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%2F1xaqg9039q6yzeoawm77.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%2F1xaqg9039q6yzeoawm77.png" alt="Image description" width="800" height="139"&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%2Fkamali_s%2F3-tier-architecture-part-4-36f6" 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%2Fkamali_s%2F3-tier-architecture-part-4-36f6" alt="PART-4" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 TIER ARCHITECTURE PART 2</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Sat, 25 Jan 2025 17:51:15 +0000</pubDate>
      <link>https://dev.to/kamali_s/3-tier-architecture-part-2-4lk9</link>
      <guid>https://dev.to/kamali_s/3-tier-architecture-part-2-4lk9</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Networking and Security&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;STEP1:&lt;/strong&gt;First we create the VPC because it forms the foundational network layer for resources in the cloud. Make sure VPC only is selected, and fill out the VPC Settings with a Name tag and a CIDR range of your choice.&lt;br&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%2Fteztuq3kh9mnlz6zhtns.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%2Fteztuq3kh9mnlz6zhtns.png" alt="Image description" width="800" height="413"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP2:&lt;/strong&gt;Create six subnet according to the 3 tier architecture across two availability zones . That means that three subnets will be in one availability zone, and three subnets will be in another zone. It has two public subnet and four private subnet.&lt;br&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%2Fg0maii4n3zomgsth1hdw.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%2Fg0maii4n3zomgsth1hdw.png" alt="Image description" width="800" height="187"&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%2Fl9ksu7x6j180bayzy4c1.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%2Fl9ksu7x6j180bayzy4c1.png" alt="Image description" width="800" height="359"&gt;&lt;/a&gt;&lt;br&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%2Frndmpax7ru9f2513aua4.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%2Frndmpax7ru9f2513aua4.png" alt="Image description" width="800" height="339"&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%2F62g14vnn990vs4kimrv0.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%2F62g14vnn990vs4kimrv0.png" alt="Image description" width="800" height="349"&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%2Fcqj0yh3u4f9n9jwombyg.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%2Fcqj0yh3u4f9n9jwombyg.png" alt="Image description" width="800" height="351"&gt;&lt;/a&gt;&lt;br&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%2Fl1201af9ap1g5zebp0x8.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%2Fl1201af9ap1g5zebp0x8.png" alt="Image description" width="800" height="328"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP3:&lt;/strong&gt;Create an internet gateway for the public subnet in both availability zones(AZ1 and AZ2).&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%2Fg2vsjdxx9yc6rc5cv8j4.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%2Fg2vsjdxx9yc6rc5cv8j4.png" alt="Image description" width="800" height="295"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP4:&lt;/strong&gt;After creating the internet gateway, attach it to your VPC.&lt;br&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%2F6ygqazslzcg2v2d8zi9y.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%2F6ygqazslzcg2v2d8zi9y.png" alt="Image description" width="800" height="150"&gt;&lt;/a&gt;&lt;br&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%2Fvfyb7f8gbg6i1qafndu5.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%2Fvfyb7f8gbg6i1qafndu5.png" alt="Image description" width="800" height="208"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP5:&lt;/strong&gt; Create two NAT gateways to provide internet access for the private subnet.&lt;br&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%2Fs84yyy6stnddnl6ap6ow.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%2Fs84yyy6stnddnl6ap6ow.png" alt="Image description" width="800" height="339"&gt;&lt;/a&gt;&lt;br&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%2F4e2a0xr1ezb1u3vkl2v7.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%2F4e2a0xr1ezb1u3vkl2v7.png" alt="Image description" width="800" height="294"&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%2Fbiysxrejk77c69t0asww.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%2Fbiysxrejk77c69t0asww.png" alt="Image description" width="800" height="132"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP6:&lt;/strong&gt; First, create a route table. After creating the route table, edit the routes, select IG (0.0.0.0/0), and save. Then, go to Subnet Associations, click Edit Subnet Associations, and add only the public subnet.&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%2Ffhzwyfquxyhzy9efxij5.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%2Ffhzwyfquxyhzy9efxij5.png" alt="Image description" width="800" height="314"&gt;&lt;/a&gt;&lt;br&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%2F7f8wyj225l2ozqg9igtc.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%2F7f8wyj225l2ozqg9igtc.png" alt="Image description" width="800" height="277"&gt;&lt;/a&gt;&lt;br&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%2Fm365oksjtqwoxeidmyco.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%2Fm365oksjtqwoxeidmyco.png" alt="Image description" width="800" height="327"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP7:&lt;/strong&gt;Now, create another route tables for the private subnets. After creating each route table, edit the routes and select the NAT gateway for AZ1 only (0.0.0.0/0). Then, edit the subnet associations and add only the private-AZ1 subnet, excluding the database subnet.&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%2F8nau398xh5skc2hwye8k.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%2F8nau398xh5skc2hwye8k.png" alt="Image description" width="800" height="314"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;STEP8:&lt;/strong&gt; We need to create five security group.&lt;br&gt;
          The first security group you’ll create is for the public, internet facing load balancer.&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%2F95jkjvgwptbw5xtr52ah.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%2F95jkjvgwptbw5xtr52ah.png" alt="Image description" width="800" height="337"&gt;&lt;/a&gt;&lt;br&gt;
          The second security group you’ll create is for the public instances in the web tier.&lt;br&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%2Fqvfjoozmrpdop9s1h1zs.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%2Fqvfjoozmrpdop9s1h1zs.png" alt="Image description" width="800" height="326"&gt;&lt;/a&gt;&lt;br&gt;
          The third security group will be for our internal load balancer.&lt;br&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%2Fd6b9hsraqt3ktswfp9yk.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%2Fd6b9hsraqt3ktswfp9yk.png" alt="Image description" width="800" height="330"&gt;&lt;/a&gt; &lt;br&gt;
          The fourth security group we’ll configure is for our private instances.&lt;br&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%2Fs08vqqv7k5x2m5zu1wql.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%2Fs08vqqv7k5x2m5zu1wql.png" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
          The fifth security group we’ll configure protects our private database instances. &lt;br&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%2Fey8vehcciws826em3kmu.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%2Fey8vehcciws826em3kmu.png" alt="Image description" width="800" height="328"&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%2Fkamali_s%2F3tire-architecture-part-3-2ja3" 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%2Fkamali_s%2F3tire-architecture-part-3-2ja3" alt="PART-2" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 TIER ARCHITECTURE PART-1</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Fri, 24 Jan 2025 15:00:03 +0000</pubDate>
      <link>https://dev.to/kamali_s/3-tier-architecture-part-1-k5o</link>
      <guid>https://dev.to/kamali_s/3-tier-architecture-part-1-k5o</guid>
      <description>&lt;p&gt;&lt;strong&gt;STEP1:&lt;/strong&gt; Dowload the code from Github Repository.&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%2F2gh8v79p4q3svog1agwn.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%2F2gh8v79p4q3svog1agwn.png" alt="Image description" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP2:&lt;/strong&gt;Create s3 bucket with unique bucket name.&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%2Fog0a6gmoq4qnpcmwfa7o.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%2Fog0a6gmoq4qnpcmwfa7o.png" alt="Image description" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP3:&lt;/strong&gt; Create IAM role and select EC2 as the trusted entity. Then allow permission for these two role that is &lt;br&gt;
         &lt;strong&gt;AmazonSSMManagedInstanceCore&lt;br&gt;
           AmazonS3ReadOnlyAccess&lt;/strong&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%2Fybfnu6cwq1jbp8lk88xf.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%2Fybfnu6cwq1jbp8lk88xf.png" alt="Image description" width="" height=""&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%2Fk06vnokj1mipj4ddn01s.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%2Fk06vnokj1mipj4ddn01s.png" alt="Image description" width="800" height="227"&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%2Fkamali_s%2F3-tier-architecture-part-2-4lk9" 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%2Fkamali_s%2F3-tier-architecture-part-2-4lk9" alt="PART-2" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>aws</category>
      <category>webdev</category>
    </item>
    <item>
      <title>EC2(PUTTY/MOBAXTERM)+IAM+S3</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Thu, 23 Jan 2025 13:26:00 +0000</pubDate>
      <link>https://dev.to/kamali_s/ec2puttymobaxtermiams3-4ajd</link>
      <guid>https://dev.to/kamali_s/ec2puttymobaxtermiams3-4ajd</guid>
      <description>&lt;p&gt;STEP1: Create EC2 instance and also create the keypair.&lt;br&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%2Fn4czvgwdlqjoeydu8ggj.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%2Fn4czvgwdlqjoeydu8ggj.png" alt="Image description" width="800" height="233"&gt;&lt;/a&gt;&lt;br&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%2Fbf5ke4on4h01q8issqnj.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%2Fbf5ke4on4h01q8issqnj.png" alt="Image description" width="669" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP2:Install the putty app&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%2Fk2lqd1qdii82936rktws.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%2Fk2lqd1qdii82936rktws.png" alt="Image description" width="800" height="271"&gt;&lt;/a&gt;&lt;br&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%2Fbgj31i6fdpp2qk8u1qbh.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%2Fbgj31i6fdpp2qk8u1qbh.png" alt="Image description" width="452" height="435"&gt;&lt;/a&gt;&lt;br&gt;
STEP3:Edit the inbound rules that is present in the security group&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%2Fb96oxvsww632o3nxei94.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%2Fb96oxvsww632o3nxei94.png" alt="Image description" width="800" height="265"&gt;&lt;/a&gt;&lt;br&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%2Fqk1awg3l0rz63py1bgx0.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%2Fqk1awg3l0rz63py1bgx0.png" alt="Image description" width="800" height="303"&gt;&lt;/a&gt;&lt;br&gt;
STEP4:Connect the instance and go to the SSH client&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%2F8vuetr6vqxklnds8iqof.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%2F8vuetr6vqxklnds8iqof.png" alt="Image description" width="800" height="384"&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%2Ffk4lrkb3xqmi9bfmlp6e.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%2Ffk4lrkb3xqmi9bfmlp6e.png" alt="Image description" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP5:Open the Puttygem and go to the load and select the pem key then save the private key.&lt;/p&gt;

&lt;p&gt;STEP6:Open the Putty app and go to the SSH-&amp;gt;Auth-&amp;gt;credentials-&amp;gt;select the private key-&amp;gt;open&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%2Fr61xb6ucknn2lvlk79ha.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%2Fr61xb6ucknn2lvlk79ha.png" alt="Image description" width="449" height="431"&gt;&lt;/a&gt;&lt;br&gt;
STEP7: After click the open button we can see the EC2 instance page and using Linux comment we create the details.txt file and upload that file into the S3 Bucket.&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%2Fwqk6a1rj3t3zj3qkm1ff.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%2Fwqk6a1rj3t3zj3qkm1ff.png" alt="Image description" width="718" height="629"&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%2F931759baba3zfbyn9941.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%2F931759baba3zfbyn9941.png" alt="Image description" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>STATIC WEB HOSTING USING REACTJS IN AWS</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Thu, 23 Jan 2025 13:09:44 +0000</pubDate>
      <link>https://dev.to/kamali_s/deploy-reactjs-4hf4</link>
      <guid>https://dev.to/kamali_s/deploy-reactjs-4hf4</guid>
      <description>&lt;p&gt;STEP1: First login the AWS console using root user&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%2Fpuk0os6vpz69bzl5a0oa.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%2Fpuk0os6vpz69bzl5a0oa.png" alt="Image description" width="418" height="539"&gt;&lt;/a&gt;&lt;br&gt;
STEP2: Create react app&lt;br&gt;
         commands are:&lt;br&gt;
           node -v&lt;br&gt;
           npm -v&lt;br&gt;
           npm create vite@latest&lt;br&gt;
           cd kamali&lt;br&gt;
           npm install&lt;br&gt;
           npm run dev&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%2Fw4rv1nfrmtut5230fse0.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%2Fw4rv1nfrmtut5230fse0.png" alt="Image description" width="406" height="671"&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%2F298332bgqtrau1w2xyrk.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%2F298332bgqtrau1w2xyrk.png" alt="Image description" width="800" height="488"&gt;&lt;/a&gt;&lt;br&gt;
  STEP3: open the App.tsx from the kamali folder and edit your name, reg number and quote.&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%2Fih0974oqlhzktv2hqrd9.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%2Fih0974oqlhzktv2hqrd9.png" alt="Image description" width="770" height="634"&gt;&lt;/a&gt;&lt;br&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%2Fnm11fj5ojwp5jmrd4q6p.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%2Fnm11fj5ojwp5jmrd4q6p.png" alt="Image description" width="800" height="476"&gt;&lt;/a&gt;.&lt;br&gt;
STEP4: Create S3 bucket in AWS&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%2F4ymrn1ug0hdehd4t8o3v.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%2F4ymrn1ug0hdehd4t8o3v.png" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;br&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%2Fmzsoxug4gkv9snq5dyce.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%2Fmzsoxug4gkv9snq5dyce.png" alt="Image description" width="800" height="328"&gt;&lt;/a&gt;&lt;br&gt;
STEP5: Enable the static web hosting&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%2Fffn9oryyajtlnp2lbznd.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%2Fffn9oryyajtlnp2lbznd.png" alt="Image description" width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
STEP5:  Generate Policy for your S3 bucket &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%2F7cumeezu62129mbybr71.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%2F7cumeezu62129mbybr71.png" alt="Image description" width="800" height="427"&gt;&lt;/a&gt;&lt;br&gt;
STEP6: Upload the dist folder from the react app folder then copy the index.html URL and paste the URL in the browser&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%2F6hmiop7jxr2s7sg54254.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%2F6hmiop7jxr2s7sg54254.png" alt="Image description" width="800" height="312"&gt;&lt;/a&gt;&lt;br&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%2Ff5n4uwm18p4an311v63y.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%2Ff5n4uwm18p4an311v63y.png" alt="Image description" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;STEP7: Create Cloudfront distribution and disable the WAF&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%2Fqkqgwqmf4787fcenl3h8.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%2Fqkqgwqmf4787fcenl3h8.png" alt="Image description" width="800" height="195"&gt;&lt;/a&gt;&lt;br&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%2Fx47p52rhgv5lnncq1f4i.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%2Fx47p52rhgv5lnncq1f4i.png" alt="Image description" width="800" height="130"&gt;&lt;/a&gt;&lt;br&gt;
STEP8: Copy the distribution Domain name then paste the URL in the Browser&lt;br&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%2Fpmot8iw6k0xxlgw35cuc.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%2Fpmot8iw6k0xxlgw35cuc.png" alt="Image description" width="800" height="483"&gt;&lt;/a&gt;&lt;br&gt;
 STEP9:Finally delete the cloudfront distridution and S3 buckets.&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%2Fehg66j37wseb9n8yg61j.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%2Fehg66j37wseb9n8yg61j.png" alt="Image description" width="800" height="367"&gt;&lt;/a&gt;&lt;br&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%2F4z57sskjh8qp4cu3kv9c.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%2F4z57sskjh8qp4cu3kv9c.png" alt="Image description" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AMAZON APPFLOW</title>
      <dc:creator>Kamali Sethurajan</dc:creator>
      <pubDate>Thu, 23 Jan 2025 03:32:51 +0000</pubDate>
      <link>https://dev.to/kamali_s/amazon-appflow-20d4</link>
      <guid>https://dev.to/kamali_s/amazon-appflow-20d4</guid>
      <description>&lt;h1&gt;
  
  
  Amazon AppFlow: Secure Data Transfer between SaaS and AWS
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Service Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Service Name:&lt;/strong&gt; Amazon AppFlow&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Logo:&lt;/strong&gt;&lt;br&gt;&lt;br&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%2Fcakii91gia8ypnm9xq94.jpg" 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%2Fcakii91gia8ypnm9xq94.jpg" alt="Image description" width="300" height="220"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tagline:&lt;/strong&gt; Securely transfer data between Software as a Service (SaaS) applications and AWS services.&lt;/p&gt;

&lt;p&gt;Amazon AppFlow enables seamless and secure data transfer between AWS services and popular SaaS applications, eliminating the need for complex custom integrations.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Key Features
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexible Data Flow Triggers&lt;/strong&gt; – Trigger data transfers on-demand, on schedule, or based on events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native SaaS Integrations&lt;/strong&gt; – Connect with applications like Salesforce, Marketo, Slack, and ServiceNow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Scale Data Transfer&lt;/strong&gt; – Handle large volumes of data efficiently with minimal latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure and Compliant Transfers&lt;/strong&gt; – Ensure data security with built-in encryption and compliance measures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Specifications:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regions Supported:&lt;/strong&gt; Available in multiple AWS regions worldwide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Limits:&lt;/strong&gt; Supports up to &lt;strong&gt;100 GB per flow&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Transformation:&lt;/strong&gt; Perform inline transformations for real-time data adjustments.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Use Cases
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Transfer&lt;/strong&gt; – Move data between AWS services and SaaS applications like Salesforce, Marketo, Slack, and ServiceNow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Mapping&lt;/strong&gt; – Map fields from source objects to destination objects with ease.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Automation&lt;/strong&gt; – Automate data transfers without writing any code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Security&lt;/strong&gt; – Ensure safe and encrypted data movement between AWS and SaaS applications.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Amazon AppFlow pricing is based on two primary factors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flow Runs&lt;/strong&gt; – Number of times data flows are executed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Volume&lt;/strong&gt; – Amount of data processed, charged per GB.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This model allows flexibility based on usage, making it cost-effective for businesses of all sizes.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Comparison with Similar Services
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud Dataflow&lt;/strong&gt; – Primarily focuses on real-time and batch data processing but lacks Amazon AppFlow’s ease of SaaS integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mulesoft &amp;amp; Zapier&lt;/strong&gt; – Offer integration capabilities but require more complex configurations and setup compared to AppFlow.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Benefits and Challenges
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fully Managed Integration&lt;/strong&gt; – No need for manual coding or third-party middleware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplified Data Preparation&lt;/strong&gt; – Automates data transformation and mapping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; – No strict limitations on usage, handling large datasets efficiently.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Learning Curve&lt;/strong&gt; – Requires some initial understanding of AWS services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connector Limitations&lt;/strong&gt; – Supports a growing but limited number of SaaS applications.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Real-World Example: Marketing Data Integration
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;global e-commerce company&lt;/strong&gt; uses Amazon AppFlow to &lt;strong&gt;synchronize Google Ads data with Amazon Redshift&lt;/strong&gt;. This setup allows them to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate &lt;strong&gt;daily data transfers&lt;/strong&gt; without manual intervention.&lt;/li&gt;
&lt;li&gt;Gain &lt;strong&gt;real-time performance insights&lt;/strong&gt; for marketing campaigns.&lt;/li&gt;
&lt;li&gt;Improve &lt;strong&gt;decision-making with accurate, up-to-date data&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Amazon AppFlow is an excellent choice for businesses looking to integrate SaaS applications with AWS services &lt;strong&gt;securely and effortlessly&lt;/strong&gt;. With &lt;strong&gt;automated flows, data transformation capabilities, and strong security features&lt;/strong&gt;, it simplifies data movement for businesses of all sizes.&lt;/p&gt;

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