<?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: Durga Vellingiri</title>
    <description>The latest articles on DEV Community by Durga Vellingiri (@durga_v).</description>
    <link>https://dev.to/durga_v</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%2F2750023%2F78850ae0-542b-40aa-be09-949d9d5646e9.jpg</url>
      <title>DEV Community: Durga Vellingiri</title>
      <link>https://dev.to/durga_v</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/durga_v"/>
    <language>en</language>
    <item>
      <title>Deploying a MERN Stack Application (FrontEnd &amp; BackEnd)</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Sun, 27 Apr 2025 10:34:47 +0000</pubDate>
      <link>https://dev.to/durga_v/deploying-a-mern-stack-application-frontend-backend-2hjm</link>
      <guid>https://dev.to/durga_v/deploying-a-mern-stack-application-frontend-backend-2hjm</guid>
      <description>&lt;p&gt;This guide provides a comprehensive step-by-step process to deploy a MERN (MongoDB, Express.js, React, Node.js) stack application on an AWS EC2 instance. It includes setting up the EC2 instance, configuring an Elastic IP, installing necessary software, cloning the repository, configuring the backend and frontend, setting up NGINX as a reverse proxy, and troubleshooting common issues.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account with access to the AWS Management Console.&lt;/li&gt;
&lt;li&gt;A MERN application hosted on a Git repository (e.g., GitHub).&lt;/li&gt;
&lt;li&gt;Basic knowledge of SSH, Linux commands, and MERN stack development.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;.pem&lt;/code&gt; key pair for SSH access to the EC2 instance.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1: Creating an EC2 Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log in to the AWS Console&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Access the AWS Management Console at &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;console.aws.amazon.com&lt;/a&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%2Ffmod48oqi6f9grwimpe9.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%2Ffmod48oqi6f9grwimpe9.png" alt="AWS Console Login" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch an EC2 Instance&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the EC2 Dashboard and click &lt;strong&gt;Launch Instance&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Ubuntu Server 20.04 LTS&lt;/strong&gt; (or a newer version).
&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;t2.micro&lt;/strong&gt; instance type (eligible for free tier).
&lt;/li&gt;
&lt;li&gt;Create or select an existing key pair (e.g., &lt;code&gt;eventhub-keypair.pem&lt;/code&gt;) for SSH access.
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Network Settings&lt;/strong&gt;, configure the security group to allow:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSH&lt;/strong&gt; (port 22) from &lt;code&gt;0.0.0.0/0&lt;/code&gt; (or your IP for restricted access).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP&lt;/strong&gt; (port 80) from &lt;code&gt;0.0.0.0/0&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTPS&lt;/strong&gt; (port 443) from &lt;code&gt;0.0.0.0/0&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Add custom TCP rules for ports used by your app (e.g., 3000 for React, 5000 for Express).
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Launch the instance.
&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%2Fczjfq7vn87y5z3zbt7vj.png" alt="EC2 Instance Creation" width="800" height="450"&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%2Ffkps55beuq9atbehg3oj.png" alt="Security Group Settings" width="800" height="450"&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%2Fs03teis3u8l0ucxtlr4g.png" alt="Security Group Ports" width="800" height="450"&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%2F38tmcc4hwlsoi6l2edn2.png" alt="Instance Summary" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 2: Setting Up an Elastic IP
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Allocate an Elastic IP&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the EC2 Dashboard, go to &lt;strong&gt;Elastic IPs&lt;/strong&gt; under &lt;strong&gt;Network &amp;amp; Security&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Allocate Elastic IP address&lt;/strong&gt; and allocate a new IP.
&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%2F1ksy0r1s5haw5rv9i57j.png" alt="Allocate Elastic IP" width="800" height="450"&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%2F6jwp5g9n9xng6dnvchf6.png" alt="Elastic IP Details" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Associate Elastic IP with EC2 Instance&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the allocated Elastic IP, click &lt;strong&gt;Actions&lt;/strong&gt;, and choose &lt;strong&gt;Associate Elastic IP address&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select your EC2 instance and associate the IP.
&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%2Fjucf2j5idzuemfm8m06z.png" alt="Associate Elastic IP" width="800" height="450"&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%2Fsa0o5727iga2lihf1yj2.png" alt="Elastic IP Confirmation" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 3: Editing Security Groups
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add Custom Ports&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the &lt;strong&gt;Security Groups&lt;/strong&gt; section in the EC2 Dashboard.
&lt;/li&gt;
&lt;li&gt;Select the security group associated with your EC2 instance.
&lt;/li&gt;
&lt;li&gt;Add inbound rules for the ports used by your application:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom TCP&lt;/strong&gt;: Port 3000 (React frontend, if applicable).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom TCP&lt;/strong&gt;: Port 5000 (Express backend).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom TCP&lt;/strong&gt;: Port 9000 (optional, if used by your app).
&lt;/li&gt;
&lt;li&gt;Set the source to &lt;code&gt;0.0.0.0/0&lt;/code&gt; (or restrict to your IP for security).
&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%2F4drns6n9nboycf9s7ra1.png" alt="Add Security Group Rules" width="800" height="450"&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%2Fchuz034zgwo193sa0rkf.png" alt="Security Group Updated" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Firewall Rules&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Later, you’ll enable these ports in the Ubuntu firewall (&lt;code&gt;ufw&lt;/code&gt;) to ensure connectivity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 4: Connecting to the EC2 Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSH into the EC2 Instance&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal or Git Bash on your local machine.
&lt;/li&gt;
&lt;li&gt;Set permissions for your &lt;code&gt;.pem&lt;/code&gt; key file:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;400 eventhub-keypair.pem
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Connect to the EC2 instance using the Elastic IP or public DNS:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"eventhub-keypair.pem"&lt;/span&gt; ubuntu@ec2-54-176-197-112.us-west-1.compute.amazonaws.com
&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz45rrgatrzuowxy8lxjj.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%2Fz45rrgatrzuowxy8lxjj.png" alt="SSH Connection" width="800" height="450"&gt;&lt;/a&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%2Fhtxaj3bb8aybmetds287.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%2Fhtxaj3bb8aybmetds287.png" alt="SSH Successful" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 5: Installing Required Software on Ubuntu
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. &lt;strong&gt;Install Node.js and npm&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Update the package index and install Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nodejs npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the installed versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
npm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the Node.js version differs from your local development environment, install &lt;code&gt;nvm&lt;/code&gt; to manage versions:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;18&lt;/code&gt; with your desired Node.js version.&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%2Fsiyrgxym082au6lo8cn0.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%2Fsiyrgxym082au6lo8cn0.png" alt="Node.js Installation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. &lt;strong&gt;Set Up MongoDB Atlas&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a free cluster on &lt;a href="https://www.mongodb.com/cloud/atlas" rel="noopener noreferrer"&gt;MongoDB Atlas&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Obtain the connection string (e.g., &lt;code&gt;mongodb+srv://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@cluster0.mongodb.net/&amp;lt;dbname&amp;gt;?retryWrites=true&amp;amp;w=majority&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Add the connection string to your backend’s &lt;code&gt;.env&lt;/code&gt; file:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;  &lt;span class="py"&gt;MONGO_URI&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;mongodb+srv://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@cluster0.mongodb.net/&amp;lt;dbname&amp;gt;?retryWrites=true&amp;amp;w=majority&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;In your Node.js backend, connect to MongoDB using Mongoose:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGO_URI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;useNewUrlParser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;useUnifiedTopology&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Install PM2&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;PM2 is a process manager to keep your Node.js application running in the background.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;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;p&gt;Start your backend server with PM2:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Useful PM2 commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 show server
pm2 status
pm2 restart server
pm2 stop server
pm2 logs
pm2 flush
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. &lt;strong&gt;Configure UFW Firewall&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Enable the firewall and allow necessary ports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable
sudo &lt;/span&gt;ufw allow ssh
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow http
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow https
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 5000/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw status
&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%2F98b0k6hngu6vxx70d85p.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%2F98b0k6hngu6vxx70d85p.png" alt="UFW Configuration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Install NGINX&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Install NGINX to serve the frontend and act as a reverse proxy for the backend:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Verify the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nginx &lt;span class="nt"&gt;-v&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%2Fb9li1ghqp30ortb6kl2u.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%2Fb9li1ghqp30ortb6kl2u.png" alt="NGINX Installation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Cloning the Repository
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the Git Repository&lt;/strong&gt;
Navigate to &lt;code&gt;/home/ubuntu&lt;/code&gt; and clone your MERN application repository:
&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; /home/ubuntu
   git clone &amp;lt;your-repository-url&amp;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%2Fvw3ptdled6bropxu68fb.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%2Fvw3ptdled6bropxu68fb.png" alt="Clone Repository" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up the Backend&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the backend directory (e.g., &lt;code&gt;cd EventHub-v2/backend&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Install dependencies:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;Create a &lt;code&gt;.env&lt;/code&gt; file with your environment variables (e.g., &lt;code&gt;MONGO_URI&lt;/code&gt;, &lt;code&gt;PORT&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start the backend with PM2:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pm2 start server.js
 pm2 save
&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-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0oo9ogjvx6wf3gw7sw9q.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%2F0oo9ogjvx6wf3gw7sw9q.png" alt="Backend Setup" width="800" height="450"&gt;&lt;/a&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%2Ftwops8yrpm8z71f5ls14.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%2Ftwops8yrpm8z71f5ls14.png" alt="PM2 Backend" width="800" height="450"&gt;&lt;/a&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%2F12vxr2hzpyihewqb2ggv.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%2F12vxr2hzpyihewqb2ggv.png" alt="PM2 List" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up the Frontend&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the frontend directory (e.g., &lt;code&gt;cd EventHub-v2/frontend&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Install dependencies and build the React app:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; npm &lt;span class="nb"&gt;install
 &lt;/span&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;Verify the &lt;code&gt;dist&lt;/code&gt; folder is created.
&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%2F8i6sr3i5q6ll35p46ej1.png" alt="Frontend Build" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Step 7: Configuring NGINX
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create an NGINX Configuration File&lt;/strong&gt;
Create a new configuration file for your 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;sudo &lt;/span&gt;nano /etc/nginx/sites-available/eventhub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Add the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;   &lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;your-elastic-ip-or-domain&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

       &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/home/ubuntu/EventHub-v2/frontend/dist&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

       &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="n"&gt;/index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;

       &lt;span class="c1"&gt;# Proxy API requests to backend&lt;/span&gt;
       &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/api/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:5000/api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;'upgrade'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
           &lt;span class="kn"&gt;proxy_cache_bypass&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;your-elastic-ip-or-domain&amp;gt;&lt;/code&gt; with your Elastic IP or domain.&lt;br&gt;&lt;br&gt;
   Save the file (&lt;code&gt;Ctrl+O&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;, &lt;code&gt;Ctrl+X&lt;/code&gt;).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enable the Configuration&lt;/strong&gt;
Link the configuration to the &lt;code&gt;sites-enabled&lt;/code&gt; directory:
&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 ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/eventhub /etc/nginx/sites-enabled/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update Default Configuration (Optional)&lt;/strong&gt;
Edit the default NGINX configuration to avoid conflicts:
&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;nano /etc/nginx/sites-available/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ensure it does not conflict with port 80 or your app’s configuration.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test and Restart NGINX&lt;/strong&gt;
Test the NGINX configuration for syntax errors:
&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;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Reload and restart NGINX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&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%2Fjzvraq6tq2q45bqhvbmo.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%2Fjzvraq6tq2q45bqhvbmo.png" alt="NGINX Configuration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Troubleshooting Common Issues
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend Connecting to &lt;code&gt;localhost:5000&lt;/code&gt;&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issue: The frontend makes API calls to &lt;code&gt;http://localhost:5000&lt;/code&gt; instead of &lt;code&gt;http://&amp;lt;your-ip&amp;gt;:5000&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Solution: Update the frontend code to use the correct backend URL. Edit the API base URL in your frontend (e.g., &lt;code&gt;src/api.js&lt;/code&gt; or environment variables):
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://&amp;lt;your-elastic-ip&amp;gt;:5000/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Rebuild the frontend:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Port 5000 Not Accessible&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issue: The backend port (e.g., 5000) is not open.
&lt;/li&gt;
&lt;li&gt;Solution: Ensure the security group allows inbound traffic on port 5000:

&lt;ul&gt;
&lt;li&gt;Add a &lt;strong&gt;Custom TCP&lt;/strong&gt; rule for port 5000 with source &lt;code&gt;0.0.0.0/0&lt;/code&gt; (or your IP range).
&lt;/li&gt;
&lt;li&gt;Enable the port in UFW:
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 5000/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Backend Not Binding to All Interfaces&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issue: The Express server only listens on &lt;code&gt;localhost&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Solution: Update the server code to listen on all interfaces:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.0.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Restart the backend with PM2:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pm2 restart server
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Server Loses Connection&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconnect to the EC2 instance using the SSH command:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"eventhub-keypair.pem"&lt;/span&gt; ubuntu@&amp;lt;your-elastic-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Check PM2 status and restart if needed:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pm2 status
 pm2 restart server
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Save PM2 Processes&lt;/strong&gt;
Ensure PM2 restarts your app on server reboot:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pm2 save
   pm2 startup
&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%2F38ajpel4ruhhge3g0lfe.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%2F38ajpel4ruhhge3g0lfe.png" alt="PM2 Save" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Verify Deployment
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access the Application&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Open a browser and navigate to &lt;code&gt;http://&amp;lt;your-elastic-ip&amp;gt;&lt;/code&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The frontend should load correctly.
&lt;/li&gt;
&lt;li&gt;Test API endpoints (e.g., &lt;code&gt;http://&amp;lt;your-elastic-ip&amp;gt;/api/health&lt;/code&gt;) to ensure the backend is operational.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test Application Features&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Verify the following:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Homepage&lt;/strong&gt;: Displays correctly.
&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%2Fvcsu8t85myf5zbqto8k8.png" alt="Homepage" width="800" height="450"&gt; 
&lt;strong&gt;User-Features&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;User Registration: Works without errors.
&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%2Fpxo9ji75j9rhjqiadbqo.png" alt="Registration Success" width="800" height="450"&gt;
&lt;/li&gt;
&lt;li&gt;User Login: Authenticates successfully.
&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%2Fc4cous9fpqaa35dqowma.png" alt="Login Success" width="800" height="450"&gt;
&lt;/li&gt;
&lt;li&gt;Events Page: Loads events correctly.
&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%2Feovkn23jkglbmlvnpqyx.png" alt="Events Page" width="800" height="450"&gt;
&lt;/li&gt;
&lt;li&gt;Event Booking: Books events successfully.
&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%2Fovw7xd7q1q1t07t737fp.png" alt="Event Booked" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin Features&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Event registration works.
&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%2Fmofqhtvqzea453rt6967.png" alt="Event Registration" width="800" height="450"&gt;
&lt;/li&gt;
&lt;li&gt;Event addition succeeds.
&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%2Fuo3hlfn8ejg7p84wdo2o.png" alt="Event Added" width="800" height="450"&gt;
&lt;/li&gt;
&lt;li&gt;Event deletion works.
&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%2F4g7568s940jmi6ac7pzn.png" alt="Event Deleted" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 10: Additional Configurations (Optional)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up a Domain Name&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Purchase a domain (e.g., via AWS Route 53 or another registrar).
&lt;/li&gt;
&lt;li&gt;Create an &lt;strong&gt;A Record&lt;/strong&gt; in your DNS settings pointing to your Elastic IP.
&lt;/li&gt;
&lt;li&gt;Update the NGINX configuration with the domain name:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt; &lt;span class="k"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;yourdomain.com&lt;/span&gt; &lt;span class="s"&gt;www.yourdomain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable HTTPS with Let’s Encrypt&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Certbot:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;certbot python3-certbot-nginx
&lt;/code&gt;&lt;/pre&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Obtain and install an SSL certificate:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; yourdomain.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.yourdomain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Follow the prompts to configure HTTPS.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automate Backups&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use AWS S3 or another service to back up your MongoDB Atlas data.
&lt;/li&gt;
&lt;li&gt;Schedule regular snapshots of your EC2 instance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitor Performance&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use AWS CloudWatch to monitor EC2 instance metrics.
&lt;/li&gt;
&lt;li&gt;Set up alerts for CPU usage, memory, or downtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;Your MERN stack application is now deployed on an AWS EC2 instance, accessible via an Elastic IP or domain. The backend is powered by Node.js and MongoDB Atlas, managed by PM2, while the React frontend is served via NGINX. Security groups, UFW, and NGINX configurations ensure secure and reliable access. Regular maintenance, such as updating dependencies and monitoring performance, will keep your application running smoothly.&lt;/p&gt;

&lt;p&gt;For further assistance, refer to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ec2/" rel="noopener noreferrer"&gt;AWS EC2 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/docs/atlas/" rel="noopener noreferrer"&gt;MongoDB Atlas Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nginx.org/en/docs/" rel="noopener noreferrer"&gt;NGINX Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pm2.keymetrics.io/docs/usage/quick-start/" rel="noopener noreferrer"&gt;PM2 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mernstackapp</category>
      <category>cloudcomputing</category>
      <category>aws</category>
      <category>ec2</category>
    </item>
    <item>
      <title>Create Your First Serverless AWS Lambda Function (Node.js)</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Fri, 25 Apr 2025 16:32:07 +0000</pubDate>
      <link>https://dev.to/durga_v/create-your-first-serverless-aws-lambda-function-nodejs-2401</link>
      <guid>https://dev.to/durga_v/create-your-first-serverless-aws-lambda-function-nodejs-2401</guid>
      <description>&lt;p&gt;Create Your First Serverless AWS Lambda Function (Node.js)&lt;/p&gt;

&lt;p&gt;Serverless computing is revolutionizing the way we build and deploy applications. Instead of managing servers, developers can focus on writing code that automatically scales, pays only for what’s used, and integrates seamlessly with cloud ecosystems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt; is one of the most popular serverless platforms, allowing you to run your code without provisioning or managing servers.&lt;/p&gt;

&lt;p&gt;In this blog post, I will guide you through creating your very first AWS Lambda function using Node.js, which simply returns a “Hello from Serverless!” message.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Navigate to AWS Lambda Console
&lt;/h2&gt;

&lt;p&gt;Go to the AWS Management Console and search for &lt;strong&gt;Lambda&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%2F66swdivea2sqtzb1xzau.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%2F66swdivea2sqtzb1xzau.png" alt="AWS Lambda Console" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Create function&lt;/strong&gt; to get started.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Create a Lambda Function
&lt;/h2&gt;

&lt;p&gt;You will see the “Create function” page with multiple options. For this tutorial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;Author from scratch&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Provide a function name, e.g., &lt;code&gt;helloServerless&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Node.js 18.x&lt;/strong&gt; (or latest available) as the runtime.&lt;/li&gt;
&lt;li&gt;Leave the rest as default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then click &lt;strong&gt;Create function&lt;/strong&gt; at the bottom.&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%2Fgcbz1l7brpwxfw7yuv6o.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%2Fgcbz1l7brpwxfw7yuv6o.png" alt="Create Function Page" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Add Simple Code to Lambda
&lt;/h2&gt;

&lt;p&gt;In the function code editor, add the following Node.js code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello from Serverless!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This handler simply returns a JSON string with your message and an HTTP 200 status.&lt;/p&gt;

&lt;p&gt;After pasting the code, click &lt;strong&gt;Deploy&lt;/strong&gt; to save and activate your function.&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%2Fc12xjcgxe0smhabyy16w.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%2Fc12xjcgxe0smhabyy16w.png" alt="Code Editor with Lambda Code" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Test Your Lambda Function
&lt;/h2&gt;

&lt;p&gt;Next, test the function by clicking on the &lt;strong&gt;Test&lt;/strong&gt; button.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new test event.&lt;/li&gt;
&lt;li&gt;Name it &lt;code&gt;testHello&lt;/code&gt; (or any name).&lt;/li&gt;
&lt;li&gt;Leave the default event JSON as-is.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt; and then &lt;strong&gt;Test&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should see the &lt;strong&gt;Execution result&lt;/strong&gt; section show your response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"statusCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Hello from Serverless!&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
&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;/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%2Fdyxwhy6jz0oycu7k7gh8.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%2Fdyxwhy6jz0oycu7k7gh8.png" alt="Test Result Output" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: View Logs in CloudWatch
&lt;/h2&gt;

&lt;p&gt;AWS Lambda automatically integrates with CloudWatch Logs.&lt;/p&gt;

&lt;p&gt;Scroll down to the &lt;strong&gt;Monitor&lt;/strong&gt; tab and click &lt;strong&gt;View logs in CloudWatch&lt;/strong&gt; to see execution logs.&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%2Fcvmegm5zg0bt8i56743b.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%2Fcvmegm5zg0bt8i56743b.png" alt="CloudWatch Logs Link" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This helps you debug and monitor your Lambda functions.&lt;/p&gt;




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

&lt;p&gt;Congratulations! You just created and tested your first AWS Lambda function that returns a simple "Hello from Serverless!" message.&lt;/p&gt;

&lt;p&gt;AWS Lambda allows you to build scalable and cost-effective serverless applications. You can now extend this function to integrate with APIs, databases, and other AWS services, unlocking powerful cloud-native architectures.&lt;/p&gt;

&lt;p&gt;Stay tuned for more tutorials on serverless development!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>lambda</category>
      <category>serverless</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Create and Use IAM Role with Custom Policy for EC2 to Access S3 – Step-by-Step Guide</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Fri, 25 Apr 2025 15:29:53 +0000</pubDate>
      <link>https://dev.to/durga_v/create-and-use-iam-role-with-custom-policy-for-ec2-to-access-s3-step-by-step-guide-29j3</link>
      <guid>https://dev.to/durga_v/create-and-use-iam-role-with-custom-policy-for-ec2-to-access-s3-step-by-step-guide-29j3</guid>
      <description>&lt;h3&gt;
  
  
  📝 Introduction
&lt;/h3&gt;

&lt;p&gt;In AWS, IAM (Identity and Access Management) Roles are essential for securely managing access between services. Rather than embedding long-term credentials in your EC2 instances, IAM Roles allow you to delegate permissions dynamically and securely. In this guide, we demonstrate how to create an IAM Role named &lt;strong&gt;&lt;code&gt;MyEC2S3AccessRole&lt;/code&gt;&lt;/strong&gt; and attach a custom inline policy &lt;strong&gt;&lt;code&gt;EC2MyPolicy&lt;/code&gt;&lt;/strong&gt; that enables your EC2 instances to access Amazon S3 buckets.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Step 1: Go to the Create Role Page
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;strong&gt;IAM &amp;gt; Roles&lt;/strong&gt; and click &lt;strong&gt;"Create Role"&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%2Fuuz4gn6jqu3sleay2gwv.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%2Fuuz4gn6jqu3sleay2gwv.png" alt="Step 1" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Step 2: Select Trusted Entity
&lt;/h2&gt;

&lt;p&gt;Choose &lt;strong&gt;"AWS service"&lt;/strong&gt; as the type of trusted entity.&lt;br&gt;&lt;br&gt;
Then, select &lt;strong&gt;"EC2"&lt;/strong&gt; as the use case — this means the role will be assumed by EC2 instances.&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%2F1a80xgvrte82zuyepmcm.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%2F1a80xgvrte82zuyepmcm.png" alt="Step 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 3: Skip Permissions for Now
&lt;/h2&gt;

&lt;p&gt;We will attach a &lt;strong&gt;custom policy later&lt;/strong&gt;, so simply &lt;strong&gt;click "Next"&lt;/strong&gt; without attaching any existing policy.&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%2Fhfbz6lk1iupfke67k592.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%2Fhfbz6lk1iupfke67k592.png" alt="Step 3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 4: Add Tags (Optional)
&lt;/h2&gt;

&lt;p&gt;You can add tags to help identify or group your resources (optional step). Click &lt;strong&gt;"Next"&lt;/strong&gt; to continue.&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%2F6z8km1afe83qo0nkr5rk.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%2F6z8km1afe83qo0nkr5rk.png" alt="Step 4" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 5: Name the Role
&lt;/h2&gt;

&lt;p&gt;Give your role a meaningful name — here we use &lt;strong&gt;&lt;code&gt;MyEC2S3AccessRole&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Add a description to document its purpose.&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%2Fd07aikkgk3d0ik06p5cq.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%2Fd07aikkgk3d0ik06p5cq.png" alt="Step 5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 6: Create the Role
&lt;/h2&gt;

&lt;p&gt;Review the details and click &lt;strong&gt;"Create Role"&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%2Flmyc6ywrk8s0m7qoxijc.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%2Flmyc6ywrk8s0m7qoxijc.png" alt="Step 6" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 7: Attach Inline Policy
&lt;/h2&gt;

&lt;p&gt;After creating the role, go to the role page → &lt;strong&gt;Permissions&lt;/strong&gt; tab → click &lt;strong&gt;“Add inline policy.”&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%2Fygy820z2h1gohow3e6o2.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%2Fygy820z2h1gohow3e6o2.png" alt="Attach Inline Policy" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 8: Create Custom Policy
&lt;/h2&gt;

&lt;p&gt;In the policy editor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;JSON&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Paste your custom policy that allows &lt;strong&gt;S3 access&lt;/strong&gt; (example below):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&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;/div&gt;


&lt;p&gt;This policy gives full access to all S3 buckets. You can restrict it further by replacing &lt;code&gt;"*"&lt;/code&gt; with specific bucket ARNs.&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%2F1yx7y55qu3do58g22suo.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%2F1yx7y55qu3do58g22suo.png" alt="Policy Editor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 9: Review and Name Policy
&lt;/h2&gt;

&lt;p&gt;Click &lt;strong&gt;Review policy&lt;/strong&gt;, and give it a name — for example, &lt;strong&gt;&lt;code&gt;EC2MyPolicy&lt;/code&gt;&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%2Fheiw3xnz12pctnjkg0xx.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%2Fheiw3xnz12pctnjkg0xx.png" alt="Name Policy" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 10: Verify Inline Policy Added
&lt;/h2&gt;

&lt;p&gt;You’ll now see &lt;strong&gt;&lt;code&gt;EC2MyPolicy&lt;/code&gt;&lt;/strong&gt; listed as an inline policy under the role’s &lt;strong&gt;Permissions&lt;/strong&gt; tab.&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%2Fu99x4f4odyy2mu32tjtl.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%2Fu99x4f4odyy2mu32tjtl.png" alt="Policy Attached" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 11: Launch an EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;strong&gt;EC2 dashboard&lt;/strong&gt;, launch a new instance, and under &lt;strong&gt;IAM Role&lt;/strong&gt;, select &lt;strong&gt;&lt;code&gt;MyEC2S3AccessRole&lt;/code&gt;&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%2Flwfvx3hac5o0jyah1jnq.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%2Flwfvx3hac5o0jyah1jnq.png" alt="Launch EC2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 12: Verify Access from EC2
&lt;/h2&gt;

&lt;p&gt;Once logged into the EC2 instance, open a terminal and run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If everything is set up correctly, it will list the S3 buckets your policy allows access to.&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%2Fcfnmnyuy4n5rdousrefs.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%2Fcfnmnyuy4n5rdousrefs.png" alt="S3 Access" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎉 Done! You Have Created an IAM Role and Policy for EC2-S3 Access
&lt;/h2&gt;

&lt;p&gt;This approach is scalable, secure, and follows AWS best practices by using IAM Roles instead of storing credentials directly on EC2.&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%2F62m1l473o9ut7444v8pw.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%2F62m1l473o9ut7444v8pw.png" alt="Success" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Bonus: View Role with AWS CLI
&lt;/h2&gt;

&lt;p&gt;To check the role later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam get-role &lt;span class="nt"&gt;--role-name&lt;/span&gt; MyEC2S3AccessRole
aws iam list-role-policies &lt;span class="nt"&gt;--role-name&lt;/span&gt; MyEC2S3AccessRole
aws iam get-role-policy &lt;span class="nt"&gt;--role-name&lt;/span&gt; MyEC2S3AccessRole &lt;span class="nt"&gt;--policy-name&lt;/span&gt; EC2MyPolicy
&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%2F276at5ujck12m4lz3dqf.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%2F276at5ujck12m4lz3dqf.png" alt="CLI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;By following this setup, you have securely enabled your EC2 instances to interact with S3 using IAM best practices — no hardcoded credentials, just temporary and managed access. This method enhances security, simplifies permission management, and aligns with the principle of least privilege. Whether you're building scalable cloud applications or just experimenting, this IAM Role and Policy pattern is a must-have in your AWS toolkit.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>ec2</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Set Up CloudFront Distribution with Geo Restriction (Country Blocking)</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Thu, 24 Apr 2025 00:33:31 +0000</pubDate>
      <link>https://dev.to/durga_v/set-up-cloudfront-distribution-with-geo-restriction-country-blocking-41dk</link>
      <guid>https://dev.to/durga_v/set-up-cloudfront-distribution-with-geo-restriction-country-blocking-41dk</guid>
      <description>&lt;p&gt;Content delivery networks (CDNs) like AWS CloudFront help serve your web content quickly and reliably across the globe. Sometimes, you might want to restrict access to your content by country—for compliance, licensing, or security reasons. This blog will guide you step-by-step on setting up a CloudFront distribution with geo restriction to block specific countries from accessing your content.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Prepare Your Origin
&lt;/h3&gt;

&lt;p&gt;Typically, your origin is an S3 bucket (for static websites) or an EC2 instance, Load Balancer, or custom origin server.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable static website hosting in the S3 bucket.
&lt;/li&gt;
&lt;li&gt;Ensure the bucket policy allows public reads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1xdunzejb4surwqb58r.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%2Fv1xdunzejb4surwqb58r.png" alt="S3 Static Website Hosting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For detailed instructions on setting up a static website on S3, check out &lt;a href="https://dev.to/durga_v/create-a-static-website-using-amazon-s3-4059"&gt;this article&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Go to CloudFront Console
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open the CloudFront console in AWS.
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;“Create Distribution.”&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%2Fser40jxao1ryzoffjwg8.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%2Fser40jxao1ryzoffjwg8.png" alt="Create Distribution" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Create Distribution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Configure your distribution settings as needed.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“Create Distribution.”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Wait until the status changes to &lt;strong&gt;“Deployed”&lt;/strong&gt; and &lt;strong&gt;“Enabled.”&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd4tpghy77fi3yz06dc9.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%2Ffd4tpghy77fi3yz06dc9.png" alt="CloudFront Settings" width="800" height="450"&gt;&lt;/a&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%2Fm4gk4uw43rhfwn99zy7f.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%2Fm4gk4uw43rhfwn99zy7f.png" alt="More CloudFront Settings" width="800" height="450"&gt;&lt;/a&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%2Fzarh6cj0802txqfhj0p8.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%2Fzarh6cj0802txqfhj0p8.png" alt="Final Settings" width="800" height="450"&gt;&lt;/a&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%2Fx73l5bbcy88tzpg81rcc.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%2Fx73l5bbcy88tzpg81rcc.png" alt="Distribution Created" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Test Your CloudFront Distribution
&lt;/h3&gt;

&lt;p&gt;Use your CloudFront domain (e.g., &lt;code&gt;d123abc456.cloudfront.net&lt;/code&gt;) to access your content.&lt;br&gt;&lt;br&gt;
Example URL: &lt;a href="https://d123abc456.cloudfront.net/index.html" rel="noopener noreferrer"&gt;https://d123abc456.cloudfront.net/index.html&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%2Fnk6cz1cof4xvu4gc9bbf.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%2Fnk6cz1cof4xvu4gc9bbf.png" alt="Security Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 5: Implement Geo Restriction (Block by Country)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Once your distribution is deployed, click on it in the CloudFront console.
&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Security&lt;/strong&gt; section.
&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Geo restriction&lt;/strong&gt;, click &lt;strong&gt;Edit&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Blacklist&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Select the countries you want to block (e.g., India).
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save changes&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%2Fvis7a6qxo4xacbwkis1m.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%2Fvis7a6qxo4xacbwkis1m.png" alt="Edit Geo Restriction" width="800" height="450"&gt;&lt;/a&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%2F3mhopfz3ouc54yj6156x.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%2F3mhopfz3ouc54yj6156x.png" alt="Select Countries" width="800" height="450"&gt;&lt;/a&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%2F2d0kubq55jem4ub2jady.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%2F2d0kubq55jem4ub2jady.png" alt="Blocked View" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;And there you have it! Your CloudFront distribution now restricts access by country, helping you control who can view your content. If needed, you can easily remove or update these geo restrictions by returning to the settings.&lt;/p&gt;

&lt;p&gt;This method is perfect for compliance, content licensing, or blocking unwanted traffic from certain regions. Pair this with custom error pages to provide a better user experience for blocked users.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudfront</category>
      <category>webhost</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Implement an S3 Lifecycle Policy</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Wed, 23 Apr 2025 16:43:39 +0000</pubDate>
      <link>https://dev.to/durga_v/implement-an-s3-lifecycle-policy-47o2</link>
      <guid>https://dev.to/durga_v/implement-an-s3-lifecycle-policy-47o2</guid>
      <description>&lt;p&gt;Amazon S3's &lt;strong&gt;Lifecycle Policies&lt;/strong&gt; are powerful tools to automate transitions and deletions of objects between storage classes. However, if not configured correctly, they can result in &lt;strong&gt;unexpected storage costs&lt;/strong&gt;, especially when objects move to &lt;strong&gt;GLACIER&lt;/strong&gt; or &lt;strong&gt;DEEP_ARCHIVE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’ve created a lifecycle rule (like "TransitionAndExpirationRule") just for trial and want to &lt;strong&gt;delete it&lt;/strong&gt; to stop incurring additional charges, follow this simple step-by-step guide.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ 1. Go to the AWS Console
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43pcws58h27trb60liqb.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%2F43pcws58h27trb60liqb.png" alt="Go to AWS Console" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head over to &lt;a href="https://aws.amazon.com/console/" rel="noopener noreferrer"&gt;AWS Console&lt;/a&gt; and log in with your credentials.&lt;/p&gt;




&lt;h3&gt;
  
  
  🪣 2. Navigate to the S3 Dashboard
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lew00ktpnk2y08h7hnp.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%2F5lew00ktpnk2y08h7hnp.png" alt="S3 Dashboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;“S3”&lt;/strong&gt; under the “Storage” category or use the search bar to find it.&lt;/p&gt;




&lt;h3&gt;
  
  
  📂 3. Select Your Bucket
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfmajxf4zrkbviihv5w8.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%2Fsfmajxf4zrkbviihv5w8.png" alt="Select Bucket" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose the S3 bucket that has the lifecycle rule you want to remove.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ 4. Go to the "Management" Tab
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19xp824bjt7bxl5nhzmy.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%2F19xp824bjt7bxl5nhzmy.png" alt="Management Tab" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the &lt;strong&gt;“Management”&lt;/strong&gt; tab where all lifecycle rules are listed.&lt;/p&gt;




&lt;h3&gt;
  
  
  📜 5. Identify Your Lifecycle Rule
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtjsmlh5wf1uhvws4ny6.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%2Fqtjsmlh5wf1uhvws4ny6.png" alt="Rule Name" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Locate the rule you created earlier, such as &lt;strong&gt;TransitionAndExpirationRule&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ 6. Click the Rule Name
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1m8nkaam0lptq264ch2.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%2Fd1m8nkaam0lptq264ch2.png" alt="Rule Details" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the rule name to view its configuration and actions.&lt;/p&gt;




&lt;h3&gt;
  
  
  🗑️ 7. Add expiration days
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzr8xb2h3la5uoxu0l8rv.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%2Fzr8xb2h3la5uoxu0l8rv.png" alt="Delete Rule" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔒 8. Confirm Deletion
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feov8hgxvxkp3hmda6lfw.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%2Feov8hgxvxkp3hmda6lfw.png" alt="Confirm Delete" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirm the deletion when prompted. Once deleted, this rule will &lt;strong&gt;no longer transition or delete&lt;/strong&gt; objects.&lt;/p&gt;




&lt;h2&gt;
  
  
  💸 Why Delete Lifecycle Policies?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prevent accidental data transitions&lt;/strong&gt; to high-cost storage like &lt;strong&gt;GLACIER&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Avoid automatic deletions of critical files.&lt;/li&gt;
&lt;li&gt;Regain manual control over object storage.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Once deleted, you’ll see that the rule no longer exists in the management tab:&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%2F8j6yefx5afxs5bbe1xv0.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%2F8j6yefx5afxs5bbe1xv0.png" alt="Deleted Successfully" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>s3</category>
    </item>
    <item>
      <title>Set Up an Amazon RDS Database</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Mon, 21 Apr 2025 21:57:11 +0000</pubDate>
      <link>https://dev.to/durga_v/set-up-an-amazon-rds-database-3ane</link>
      <guid>https://dev.to/durga_v/set-up-an-amazon-rds-database-3ane</guid>
      <description>&lt;p&gt;Amazon Relational Database Service (RDS) allows you to easily set up, operate, and scale a relational database in the cloud. In this guide, we will walk you through setting up an Amazon RDS MySQL database instance.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;1. Go to the RDS Console&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open the &lt;a href="https://console.aws.amazon.com/" rel="noopener noreferrer"&gt;AWS Management Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In the search bar, type &lt;strong&gt;RDS&lt;/strong&gt; and select &lt;strong&gt;RDS&lt;/strong&gt; from the dropdown.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;2. Click “Create Database”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once you’re in the RDS dashboard, click on the &lt;strong&gt;“Create database”&lt;/strong&gt; button.&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%2Fayrdnf7n015evfih3r0a.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%2Fayrdnf7n015evfih3r0a.png" alt="Create Database" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3. Choose Database Creation Method&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In this step, you will choose how you want to create the database. Select &lt;strong&gt;“Standard Create”&lt;/strong&gt; for full control over your configuration.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;4. Choose Engine&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You’ll now need to choose the database engine. For this guide, select &lt;strong&gt;MySQL&lt;/strong&gt;. You can also choose from other engines such as PostgreSQL, MariaDB, or Oracle.&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%2Fet98vozgkaeiuctu1kir.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%2Fet98vozgkaeiuctu1kir.png" alt="Choose Engine" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;5. Specify DB Details&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Enter the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DB Instance Identifier&lt;/strong&gt;: This is the name of your database instance (e.g., &lt;code&gt;mydbinstance&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Master Username&lt;/strong&gt;: The username for your admin account (e.g., &lt;code&gt;admin&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Master Password&lt;/strong&gt;: Set a password for your admin user. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirm Password&lt;/strong&gt;: Re-enter the password to confirm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you don’t want to manually set a password, you can choose to &lt;strong&gt;auto-generate&lt;/strong&gt; a password.&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%2Felj83it6fz1ervh68w3k.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%2Felj83it6fz1ervh68w3k.png" alt="DB Details" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;6. Choose DB Instance Size&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In this section, you’ll choose the instance type that fits your needs. If you are using the AWS Free Tier, select the &lt;strong&gt;db.t3.micro&lt;/strong&gt; class (1 vCPU, 1 GiB RAM).&lt;/p&gt;

&lt;p&gt;For production environments or larger applications, you may want to select larger instance sizes.&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%2Fneggp4y7c90g7syp9xmi.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%2Fneggp4y7c90g7syp9xmi.png" alt="DB Instance Size" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;7. Storage Settings&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For most cases, the default storage settings will be sufficient. However, if you need more storage, you can &lt;strong&gt;modify the allocated storage&lt;/strong&gt; or enable &lt;strong&gt;storage autoscaling&lt;/strong&gt; to automatically adjust the storage based on your usage.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;8. Connectivity&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In this step, configure your network settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPC&lt;/strong&gt;: Choose the Virtual Private Cloud (VPC) where your database will reside.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public Access&lt;/strong&gt;: Set this to &lt;strong&gt;Yes&lt;/strong&gt; if you want to access the database from outside the VPC (i.e., from your local machine or other networks).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPC Security Group&lt;/strong&gt;: Select an existing security group or create a new one to allow access to your RDS instance. Ensure &lt;strong&gt;port 3306&lt;/strong&gt; (for MySQL) is allowed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynraa1jcw0aw1a7ths46.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%2Fynraa1jcw0aw1a7ths46.png" alt="Connectivity Settings" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;9. Database Authentication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The default authentication method is &lt;strong&gt;Password authentication&lt;/strong&gt;. You can leave this as is or enable &lt;strong&gt;IAM database authentication&lt;/strong&gt; for enhanced security.&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%2Fjhbqgr5kwigeh39nz76j.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%2Fjhbqgr5kwigeh39nz76j.png" alt="Database Authentication" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;10. Additional Settings (Optional)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In this step, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set an &lt;strong&gt;initial DB name&lt;/strong&gt; (this will create a database within your RDS instance).&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;automatic backups&lt;/strong&gt;, &lt;strong&gt;monitoring&lt;/strong&gt;, and other features based on your requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ziduvf3xqf7c1h242xw.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%2F6ziduvf3xqf7c1h242xw.png" alt="Additional Settings" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;11. Click "Create Database"&lt;/strong&gt; 🚀
&lt;/h3&gt;

&lt;p&gt;Once you have configured all settings, click the &lt;strong&gt;“Create Database”&lt;/strong&gt; button. AWS will begin provisioning your MySQL database instance.&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%2F6mv9w5and3u8sqb6bhqn.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%2F6mv9w5and3u8sqb6bhqn.png" alt="Create Database" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Accessing Your RDS Instance:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;After the database is created, you can access it using MySQL Workbench, DBeaver, or the terminal.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Go to RDS Dashboard&lt;/strong&gt;: Navigate to the &lt;strong&gt;Databases&lt;/strong&gt; section in the RDS console.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy the Endpoint&lt;/strong&gt;: Find your database instance and copy the &lt;strong&gt;endpoint URL&lt;/strong&gt; (e.g., &lt;code&gt;database-new-instance-1.cr0gosscc0ry.ap-south-1.rds.amazonaws.com&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect via MySQL Client&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use a MySQL client like &lt;strong&gt;MySQL Workbench&lt;/strong&gt; or the &lt;strong&gt;terminal&lt;/strong&gt; to connect to your database.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For terminal:&lt;br&gt;
&lt;/p&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; database-new-instance-1.cr0gosscc0ry.ap-south-1.rds.amazonaws.com &lt;span class="nt"&gt;-u&lt;/span&gt; admin &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will be prompted to enter the &lt;strong&gt;password&lt;/strong&gt; you set earlier.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Tips for Using Amazon RDS:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: Enable &lt;strong&gt;CloudWatch logs&lt;/strong&gt; and &lt;strong&gt;Performance Insights&lt;/strong&gt; to keep track of your database’s health and performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backups&lt;/strong&gt;: Regularly back up your database to ensure data recovery in case of failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Always use a strong password, and limit access to your RDS instance using security groups and IAM roles.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;By following these steps, you should have a fully functional MySQL database running on Amazon RDS. Whether you're using it for development, testing, or production, RDS offers scalability, high availability, and security for your data management needs.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>AWS VPC Setup: Public &amp; Private Subnets with IGW, NAT, and EC2</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Mon, 21 Apr 2025 09:04:53 +0000</pubDate>
      <link>https://dev.to/durga_v/aws-vpc-setup-public-private-subnets-with-igw-nat-and-ec2-4hkm</link>
      <guid>https://dev.to/durga_v/aws-vpc-setup-public-private-subnets-with-igw-nat-and-ec2-4hkm</guid>
      <description>&lt;p&gt;Setting up a Virtual Private Cloud (VPC) is foundational when deploying resources in AWS securely. This guide walks you through creating:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; A VPC
&lt;/li&gt;
&lt;li&gt; Public &amp;amp; Private Subnets
&lt;/li&gt;
&lt;li&gt; Internet Gateway
&lt;/li&gt;
&lt;li&gt; NAT Gateway
&lt;/li&gt;
&lt;li&gt; Route Tables
&lt;/li&gt;
&lt;li&gt; Optional EC2 Instances &lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ✅ 1. Create a VPC
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;VPC Dashboard&lt;/strong&gt; &amp;gt; &lt;strong&gt;Your VPCs&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create VPC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;VPC only&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;MyVPC&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;IPv4 CIDR block: &lt;code&gt;10.0.0.0/16&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Leave other fields as default
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create VPC&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg67oceow0315pgr78s3s.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%2Fg67oceow0315pgr78s3s.png" alt="Create VPC" width="800" height="450"&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%2F0cnpjehsn5suzfef39ym.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%2F0cnpjehsn5suzfef39ym.png" alt="VPC Created" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 2. Create Subnets
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Subnets&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create Subnet&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ➤ Public Subnet:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;PublicSubnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VPC: &lt;code&gt;MyVPC&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;AZ: &lt;code&gt;ap-south-1a&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;CIDR block: &lt;code&gt;10.0.1.0/24&lt;/code&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%2Fav3gtiykkz5mru3hoyve.png" alt="Create Public Subnet" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ➤ Private Subnet:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;PrivateSubnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VPC: &lt;code&gt;MyVPC&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;AZ: &lt;code&gt;ap-south-1b&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;CIDR block: &lt;code&gt;10.0.2.0/24&lt;/code&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%2Fjsjrr9sbj8be406yh5gc.png" alt="Create Private Subnet" width="800" height="400"&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%2F80wfvt11xtxruahncuun.png" alt="Subnets Created" width="800" height="450"&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 3. Create and Attach Internet Gateway
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Internet Gateways&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create Internet Gateway&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;MyIGW&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Attach to VPC&lt;/strong&gt; and select &lt;code&gt;MyVPC&lt;/code&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%2Foedcoahynj6z1nltkcn2.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%2Foedcoahynj6z1nltkcn2.png" alt="Create IGW" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 4. Create a Public Route Table
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to &lt;strong&gt;Route Tables&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create Route Table&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;PublicRT&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VPC: &lt;code&gt;MyVPC&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;code&gt;PublicRT&lt;/code&gt; &amp;gt; &lt;strong&gt;Routes&lt;/strong&gt; &amp;gt; &lt;strong&gt;Edit Routes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add route:

&lt;ul&gt;
&lt;li&gt;Destination: &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Target: &lt;strong&gt;Internet Gateway&lt;/strong&gt; → &lt;code&gt;MyIGW&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fl473rp7f6pkc8y0p4w2n.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%2Fl473rp7f6pkc8y0p4w2n.png" alt="Create Public RT" width="800" height="450"&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%2F2ckp5rqpbv6zgmumzykq.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%2F2ckp5rqpbv6zgmumzykq.png" alt="Edit Routes" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Subnet Associations&lt;/strong&gt; &amp;gt; &lt;strong&gt;Edit Subnet Associations&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Select: &lt;code&gt;PublicSubnet&lt;/code&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%2F2f4gon2fdaq9e77prd2b.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%2F2f4gon2fdaq9e77prd2b.png" alt="Edit Subnet Association" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 5. Allocate Elastic IP (EIP)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Elastic IPs&lt;/strong&gt; &amp;gt; &lt;strong&gt;Allocate Elastic IP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Note the allocation ID
&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%2F8ape5hvman27omfx04fr.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%2F8ape5hvman27omfx04fr.png" alt="Allocate EIP" width="800" height="450"&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%2Fp41lq27aji3he5jfq76r.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%2Fp41lq27aji3he5jfq76r.png" alt="EIP Allocated" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 6. Create NAT Gateway
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;NAT Gateways&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create NAT Gateway&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;MyNATGW&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;PublicSubnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Elastic IP: select the one you just allocated&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%2Fkmk175ljsnuq8m6dcdzm.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%2Fkmk175ljsnuq8m6dcdzm.png" alt="Create NAT Gateway" width="800" height="450"&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%2F1g2ev737yrm2vgt4ll7z.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%2F1g2ev737yrm2vgt4ll7z.png" alt="NAT Gateway in Progress" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⏳ Wait a few minutes for the NAT Gateway to become active.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 7. Create a Private Route Table
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to &lt;strong&gt;Route Tables&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create Route Table&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;PrivateRT&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VPC: &lt;code&gt;MyVPC&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;code&gt;PrivateRT&lt;/code&gt; &amp;gt; &lt;strong&gt;Routes&lt;/strong&gt; &amp;gt; &lt;strong&gt;Edit Routes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add route:

&lt;ul&gt;
&lt;li&gt;Destination: &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Target: &lt;strong&gt;NAT Gateway&lt;/strong&gt; → &lt;code&gt;MyNATGW&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fnu0uyklctzbmdhhm5rvc.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%2Fnu0uyklctzbmdhhm5rvc.png" alt="Private RT - Edit Route" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Subnet Associations&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Attach &lt;code&gt;PrivateSubnet&lt;/code&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%2Fbh2o3u2n5afchc69j325.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%2Fbh2o3u2n5afchc69j325.png" alt="Attach Private Subnet" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 8. Launch EC2 Instances (Optional)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ➤ Public EC2:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AMI: Amazon Linux 2
&lt;/li&gt;
&lt;li&gt;Network: &lt;code&gt;MyVPC&lt;/code&gt;, Subnet: &lt;code&gt;PublicSubnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Auto-assign Public IP: &lt;strong&gt;Enabled&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Security Group: Allow &lt;strong&gt;SSH (port 22)&lt;/strong&gt; from your IP&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ➤ Private EC2:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Same AMI&lt;/li&gt;
&lt;li&gt;Subnet: &lt;code&gt;PrivateSubnet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Auto-assign Public IP: &lt;strong&gt;Disabled&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohw4enlczrpp405othsq.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%2Fohw4enlczrpp405othsq.png" alt="Launch EC2" width="800" height="450"&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%2Fcvwy2k06alac12e4dn8g.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%2Fcvwy2k06alac12e4dn8g.png" alt="EC2 Setup" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ SSH Connection Established
&lt;/h2&gt;

&lt;p&gt;Use your terminal to SSH into the public instance, and from there connect to the private one using its private IP.&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%2F0vi71n42nwn0abmcexbh.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%2F0vi71n42nwn0abmcexbh.png" alt="SSH Connection" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Troubleshooting Tip
&lt;/h2&gt;

&lt;p&gt;If you're unable to connect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check your &lt;strong&gt;Security Group's inbound rules&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Type: SSH
&lt;/li&gt;
&lt;li&gt;Protocol: TCP
&lt;/li&gt;
&lt;li&gt;Port: 22
&lt;/li&gt;
&lt;li&gt;Source: &lt;code&gt;My IP&lt;/code&gt; or &lt;code&gt;0.0.0.0/0&lt;/code&gt; (for open access - use carefully!)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




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

&lt;p&gt;To avoid unnecessary charges, clean up:&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%2F8122tngij4xb9d26z3dw.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%2F8122tngij4xb9d26z3dw.png" alt="Clean Up Resources" width="800" height="450"&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%2Fpdrflcjuwyco158gazcy.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%2Fpdrflcjuwyco158gazcy.png" alt="Delete Resources" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Summary Diagram
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VPC: 10.0.0.0/16
├── PublicSubnet (10.0.1.0/24)
│   ├── Internet Gateway → Public RT → 0.0.0.0/0
│   └── NAT Gateway (for private subnet)
├── PrivateSubnet (10.0.2.0/24)
    └── NAT Gateway → Private RT → 0.0.0.0/0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✨ Happy Cloud Building!&lt;/p&gt;

</description>
      <category>vpc</category>
      <category>aws</category>
      <category>awscloud</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Simple Guide to Setting Up EC2 with Auto Scaling Groups (ASG) on AWS</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Sun, 20 Apr 2025 03:42:34 +0000</pubDate>
      <link>https://dev.to/durga_v/simple-guide-to-setting-up-ec2-with-auto-scaling-groups-asg-on-aws-4j0m</link>
      <guid>https://dev.to/durga_v/simple-guide-to-setting-up-ec2-with-auto-scaling-groups-asg-on-aws-4j0m</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Create an EC2 Instance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before creating an Auto Scaling Group (ASG), we need an EC2 instance to use as a base for the Auto Scaling template.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Go to the EC2 Dashboard&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;EC2 Dashboard&lt;/strong&gt; in your AWS console.&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%2Fppn37chtnp8aj7jqfeck.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%2Fppn37chtnp8aj7jqfeck.png" alt="EC2 Dashboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Launch an EC2 Instance&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instance&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select an Amazon Machine Image (AMI)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose an &lt;strong&gt;Amazon Linux 2&lt;/strong&gt; or any preferred AMI for your EC2 instance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Choose an Instance Type&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;t2.micro&lt;/strong&gt; (Free Tier) or &lt;strong&gt;t3.micro&lt;/strong&gt; for a test environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Instance&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave the default settings unless you need specific configurations.&lt;/li&gt;
&lt;li&gt;Set the number of instances to &lt;strong&gt;1&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add Storage&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The default 8GB is enough for a simple test setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Security Group&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add rules for:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP (port 80)&lt;/strong&gt; – for web access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH (port 22)&lt;/strong&gt; – for remote access (you can restrict to your IP for security)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Review and Launch&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select or create a &lt;strong&gt;key pair&lt;/strong&gt; to SSH into the instance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Launch the Instance&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Create a Launch Template&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Launch Template&lt;/strong&gt; defines the configuration for your EC2 instances.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Go to EC2 Dashboard&lt;/strong&gt; and click &lt;strong&gt;Launch Templates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click “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/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbyc2kqbjszgtukhiazs.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%2Fcbyc2kqbjszgtukhiazs.png" alt="Launch Template" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fill in the following fields&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: Choose a name for the template (e.g., &lt;code&gt;MyWebAppTemplate&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AMI&lt;/strong&gt;: Select the same AMI you used for the EC2 instance (e.g., &lt;strong&gt;Amazon Linux 2&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instance Type&lt;/strong&gt;: Select the instance type (e.g., &lt;strong&gt;t2.micro&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Pair&lt;/strong&gt;: Select the key pair you created earlier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Group&lt;/strong&gt;: Select the same security group you used for the EC2 instance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Click Create Launch Template&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Create an Auto Scaling Group (ASG)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now that we have the Launch Template, let’s create an Auto Scaling Group.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Go to EC2 Dashboard &amp;gt; Auto Scaling Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click “Create Auto Scaling group”&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febaccvl8c7dgtm046ou4.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%2Febaccvl8c7dgtm046ou4.png" alt="Create ASG" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure the Auto Scaling Group&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: Enter a name (e.g., &lt;code&gt;MyWebAppASG&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Launch Template&lt;/strong&gt;: Choose the template you created earlier (e.g., &lt;code&gt;MyWebAppTemplate&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version&lt;/strong&gt;: Select the latest version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desired Capacity&lt;/strong&gt;: Set to &lt;strong&gt;2&lt;/strong&gt; (this means 2 instances should be running).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimum Capacity&lt;/strong&gt;: Set to &lt;strong&gt;2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum Capacity&lt;/strong&gt;: Set to &lt;strong&gt;3&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure Scaling Policies&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scaling Type&lt;/strong&gt;: Choose &lt;strong&gt;Target Tracking Policy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target Value&lt;/strong&gt;: Set to &lt;strong&gt;30%&lt;/strong&gt; for CPU utilization.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review and Create&lt;/strong&gt; the Auto Scaling Group.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Monitor EC2 Instances Scaling&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;After setting up the ASG, AWS will automatically create the required instances.&lt;/p&gt;

&lt;p&gt;You will see something like this, where EC2 instances are automatically managed:&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%2Fvfvm2y7asc2z8zoa1rd8.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%2Fvfvm2y7asc2z8zoa1rd8.png" alt="EC2 Instances Running" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even if you terminate an instance manually, the ASG will automatically launch a new one to replace it.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Clean Up to Avoid Extra Costs&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When you're done testing, it's important to clean up resources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Terminate the Auto Scaling Group&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This will stop it from launching new instances.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Delete EC2 Instances&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminate any EC2 instances that are still running.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Delete Launch Templates&lt;/strong&gt; (if no longer needed):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This will prevent clutter in your account.&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%2Fe6sytre0ujxv8rgdqewq.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%2Fe6sytre0ujxv8rgdqewq.png" alt="ASG Terminated" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Final Notes&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto Scaling Groups incur costs&lt;/strong&gt;, so remember to clean up after you’re done testing.&lt;/li&gt;
&lt;li&gt;You can use this setup to automatically scale your application based on traffic and performance metrics.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;That’s it! You’ve now created an EC2 instance, Launch Template, Auto Scaling Group, and learned how to clean up afterward to save costs.&lt;/p&gt;

&lt;p&gt;Feel free to ask if you have any questions!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>ec2</category>
    </item>
    <item>
      <title>Setting Up EC2 Instances with an Application Load Balancer (ALB) on AWS</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Sat, 19 Apr 2025 16:50:09 +0000</pubDate>
      <link>https://dev.to/durga_v/setting-up-ec2-instances-with-an-application-load-balancer-alb-on-aws-59lo</link>
      <guid>https://dev.to/durga_v/setting-up-ec2-instances-with-an-application-load-balancer-alb-on-aws-59lo</guid>
      <description>&lt;p&gt;In this, we’ll go step by step through the process of launching two EC2 instances in different availability zones, setting up Apache web servers, uploading a website template, and configuring an &lt;strong&gt;Application Load Balancer (ALB)&lt;/strong&gt; with target groups for high availability and load distribution.&lt;/p&gt;




&lt;h2&gt;
  
  
  🖥️ Step 1: Create the First EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Go to the AWS EC2 dashboard and follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;Web Server&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;AMI: &lt;strong&gt;Amazon Linux&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Instance Type: &lt;strong&gt;t2.micro&lt;/strong&gt; (Free Tier eligible)&lt;/li&gt;
&lt;li&gt;Key Pair: Select an existing key or create a new one&lt;/li&gt;
&lt;li&gt;Network Settings: 

&lt;ul&gt;
&lt;li&gt;Edit settings&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Default VPC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Auto-assign Public IP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Availability Zone: ap-south-1a&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Security Group: Choose &lt;strong&gt;existing security group (Launch Wizard 1)&lt;/strong&gt;
&lt;/li&gt;

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

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcmnexhpcfs6v1f9kral.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%2Ffcmnexhpcfs6v1f9kral.png" alt="First Instance Created" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🖥️ Step 2: Create the Second EC2 Instance (in a different zone)
&lt;/h2&gt;

&lt;p&gt;Repeat the process above with a slight change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Availability Zone&lt;/strong&gt;: Select &lt;code&gt;ap-south-1b&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures your setup is &lt;strong&gt;multi-AZ&lt;/strong&gt; for better fault tolerance.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Step 3: Security Group Settings
&lt;/h2&gt;

&lt;p&gt;For simplicity in testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;Security Groups&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Launch Wizard 1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Edit inbound rules:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type&lt;/strong&gt;: All traffic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol&lt;/strong&gt;: All&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port Range&lt;/strong&gt;: All&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source&lt;/strong&gt;: Custom – &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Warning: Allowing all traffic from anywhere is only recommended for testing/demo purposes.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📁 Step 4: Upload Website Template to EC2 Instances
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Connect to EC2:
&lt;/h3&gt;

&lt;p&gt;In EC2 dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the instance&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Connect&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;EC2 Instance Connect → Connect&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Run the Following Commands:
&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;su
yum update &lt;span class="nt"&gt;-y&lt;/span&gt;
yum &lt;span class="nb"&gt;install &lt;/span&gt;httpd &lt;span class="nt"&gt;-y&lt;/span&gt;
service httpd start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Move to Web Directory:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Download Free Template:
&lt;/h3&gt;

&lt;p&gt;Go to &lt;a href="https://www.free-css.com/free-css-templates" rel="noopener noreferrer"&gt;Free CSS Templates&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Copy the &lt;strong&gt;ZIP link&lt;/strong&gt; of your favorite template.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &amp;lt;paste-template-zip-link&amp;gt;
&lt;span class="nb"&gt;ls
&lt;/span&gt;unzip &amp;lt;template-name&amp;gt;.zip
&lt;span class="nb"&gt;ls
cd&lt;/span&gt; &amp;lt;unzipped-folder&amp;gt;
&lt;span class="nb"&gt;mv&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repeat the same steps for the second instance, but use a &lt;strong&gt;different template&lt;/strong&gt; for differentiation in load balancing.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚖️ Step 5: Create Target Groups
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Target Group 1:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Target Groups&lt;/strong&gt; → &lt;strong&gt;Create Target Group&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Type: &lt;code&gt;Instances&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Protocol: &lt;code&gt;HTTP&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Port: &lt;code&gt;80&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VPC: Default&lt;/li&gt;
&lt;li&gt;Health Check Path: &lt;code&gt;/index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;TG1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Register the &lt;strong&gt;first EC2 instance&lt;/strong&gt; and set port to &lt;code&gt;80&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8yvollvksyo4q8chwx7.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%2Fu8yvollvksyo4q8chwx7.png" alt="First TG Group" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Target Group 2:
&lt;/h3&gt;

&lt;p&gt;Repeat the steps, name it &lt;code&gt;TG2&lt;/code&gt;, and register the &lt;strong&gt;second EC2 instance&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%2Fbw2uskcuwav2hz5doisq.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%2Fbw2uskcuwav2hz5doisq.png" alt="Second TG Group" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌍 Step 6: Create Application Load Balancer
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Load Balancers&lt;/strong&gt; → &lt;strong&gt;Create Load Balancer&lt;/strong&gt; → &lt;strong&gt;Application Load Balancer&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;App-LB&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Scheme: &lt;code&gt;Internet-facing&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;IP address type: &lt;code&gt;IPv4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;VPC: Default&lt;/li&gt;
&lt;li&gt;Availability Zones: Select both Zone A and Zone B&lt;/li&gt;
&lt;li&gt;Security Group: &lt;code&gt;Launch Wizard 1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03jj669pmguhdontdeb9.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%2F03jj669pmguhdontdeb9.png" alt="Load Balancer Created" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Step 7: Add Listeners and Target Groups
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Listener 1&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Port: &lt;code&gt;80&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Forward to: &lt;code&gt;TG1&lt;/code&gt; (First Instance)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff27mza2f43glgqadxy6w.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%2Ff27mza2f43glgqadxy6w.png" alt="First Site in LB" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Listener 2&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Add another port like &lt;code&gt;81&lt;/code&gt; or &lt;code&gt;89&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Forward to: &lt;code&gt;TG2&lt;/code&gt; (Second Instance)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhn9oe9z99tk12jjall0.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%2Fmhn9oe9z99tk12jjall0.png" alt="Second Site in LB" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Step 8: Test the Load Balancer
&lt;/h2&gt;

&lt;p&gt;After creating the load balancer, go to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Load Balancer &amp;gt; Description&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;DNS name&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open the DNS in your browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;http://&amp;lt;DNS&amp;gt;&lt;/code&gt; will load the first instance&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;http://&amp;lt;DNS&amp;gt;:81&lt;/code&gt; (or 89) will load the second one&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;You’ve successfully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;strong&gt;multi-AZ EC2 instances&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Deployed different web templates&lt;/li&gt;
&lt;li&gt;Set up &lt;strong&gt;target groups&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Created an &lt;strong&gt;Application Load Balancer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Configured multiple &lt;strong&gt;listeners for routing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, you’ve got a scalable, resilient architecture ready for production (with more secure settings, of course).&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>aws</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Launch and Configure an EC2 Instance( Step-by-Step EC2 Setup + SSH Connection (Windows)</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Fri, 18 Apr 2025 06:43:03 +0000</pubDate>
      <link>https://dev.to/durga_v/launch-and-configure-an-ec2-instance-step-by-step-ec2-setup-ssh-connection-windows-23oi</link>
      <guid>https://dev.to/durga_v/launch-and-configure-an-ec2-instance-step-by-step-ec2-setup-ssh-connection-windows-23oi</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Launching an EC2 instance is one of the first and most crucial steps when working with Amazon Web Services (AWS). It allows you to run virtual servers in the cloud, providing you with flexibility and scalability. In this tutorial, we’ll go step-by-step to &lt;strong&gt;launch an EC2 instance&lt;/strong&gt; and connect to it via &lt;strong&gt;SSH&lt;/strong&gt; using &lt;strong&gt;Windows&lt;/strong&gt;. This guide is designed for beginners, so even if you're just starting out with AWS, you'll be able to follow along easily.&lt;/p&gt;

&lt;p&gt;Let’s dive into how to launch your first EC2 instance and establish an SSH connection.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Step 1: &lt;strong&gt;Launch a New EC2 Instance&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Go to the EC2 Dashboard&lt;/strong&gt;: &lt;br&gt;
Open the EC2 console by visiting &lt;a href="https://us-east-2.console.aws.amazon.com/ec2/v2/home" rel="noopener noreferrer"&gt;EC2 Dashboard&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Click “Launch Instance”&lt;/strong&gt;: &lt;br&gt;
On the EC2 dashboard, find and click the &lt;strong&gt;Launch Instance&lt;/strong&gt; button to start the process of creating a new instance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configure the Instance&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name your instance&lt;/strong&gt;: This is for identification purposes. You can name your instance anything you'd like (e.g., &lt;code&gt;Durga-EC2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose an Amazon Machine Image (AMI)&lt;/strong&gt;: For simplicity, we’ll choose &lt;strong&gt;Amazon Linux 2 AMI (HVM), SSD Volume Type&lt;/strong&gt;, which is free-tier eligible and suitable for most use cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select Instance Type&lt;/strong&gt;: 
Choose &lt;code&gt;t2.micro&lt;/code&gt; (Free tier eligible) for a low-cost option. This instance type is great for lightweight workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure Key Pair&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Key Pair (login)&lt;/strong&gt;: Here, you can either choose an existing key pair or create a new one. For this guide, let’s create a new key pair with any name you like (e.g., &lt;code&gt;my-key-pair&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Pair Type&lt;/strong&gt;: Select &lt;code&gt;.pem&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download the key pair&lt;/strong&gt;: Ensure that you &lt;strong&gt;download and save&lt;/strong&gt; the &lt;code&gt;.pem&lt;/code&gt; file in a safe location (e.g., &lt;code&gt;C:\Users\Durga V\Downloads\my-key-pair.pem&lt;/code&gt;). You’ll need this file later to connect to your instance securely.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Settings&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;“Edit inbound rules”&lt;/strong&gt; and add a new rule to allow SSH access:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type&lt;/strong&gt;: SSH&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port&lt;/strong&gt;: 22&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source&lt;/strong&gt;: &lt;code&gt;Anywhere (0.0.0.0/0)&lt;/code&gt;, which allows access from any IP address (you can adjust this for more security if needed).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Launch the Instance&lt;/strong&gt;:&lt;br&gt;
After configuring the settings, click &lt;strong&gt;“Launch Instance”&lt;/strong&gt; to create your EC2 instance.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkrzx82jmm1bp84jsae5.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%2Fnkrzx82jmm1bp84jsae5.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Step 2: &lt;strong&gt;Verify Instance Is Running&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Once the instance is launched:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Instances&lt;/strong&gt; in the EC2 console.&lt;/li&gt;
&lt;li&gt;Find your instance in the list and verify that:

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Instance State&lt;/strong&gt; = &lt;strong&gt;Running&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;✅ The &lt;strong&gt;Public IPv4 or DNS name&lt;/strong&gt; is visible (you’ll need this to connect via SSH).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  ✅ Step 3: &lt;strong&gt;Open Git Bash (Not CMD)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Windows users should use &lt;strong&gt;Git Bash&lt;/strong&gt; for the SSH connection process. Git Bash is a terminal emulator that supports the necessary Linux commands for SSH.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open Git Bash&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press the &lt;strong&gt;Start&lt;/strong&gt; menu, search for &lt;strong&gt;Git Bash&lt;/strong&gt;, and open it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Navigate to the Folder&lt;/strong&gt;:&lt;br&gt;
Use the &lt;code&gt;cd&lt;/code&gt; command to change the directory to where you saved the &lt;code&gt;.pem&lt;/code&gt; key pair file:&lt;br&gt;
&lt;/p&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;cd&lt;/span&gt; &lt;span class="s2"&gt;"/c/Users/Durga V/Downloads"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ Step 4: &lt;strong&gt;Fix File Permission (Only Once)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before connecting via SSH, ensure your key file has the correct permissions by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;400 my-key-pair.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command ensures that your key file is only readable by you, which is a requirement for secure SSH connections.&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%2Fczbd6cfc0wbkgkd5phl9.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%2Fczbd6cfc0wbkgkd5phl9.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Step 5: &lt;strong&gt;Connect to the EC2 Instance via SSH&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now, it’s time to connect to your EC2 instance using the SSH protocol.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use the SSH Command&lt;/strong&gt;:
In Git Bash, replace &lt;code&gt;ec2-XX-XX-XX-XX.us-east-2.compute.amazonaws.com&lt;/code&gt; with your instance’s &lt;strong&gt;Public IPv4 DNS&lt;/strong&gt; (or IP address). The general SSH command looks like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"my-key-pair.pem"&lt;/span&gt; ec2-user@ec2-XX-XX-XX-XX.us-east-2.compute.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or you can use the public IP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ssh &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"my-key-pair.pem"&lt;/span&gt; ec2-user@&amp;lt;your-public-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accept the Security Warning&lt;/strong&gt;: &lt;br&gt;
The first time you connect, you may see a warning about the authenticity of the host. Type &lt;strong&gt;yes&lt;/strong&gt; to accept and proceed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Login&lt;/strong&gt;:&lt;br&gt;
If everything is set up correctly, you’ll be connected to your EC2 instance and be presented with a terminal prompt for the &lt;code&gt;ec2-user&lt;/code&gt; account.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xhvhowvjwb58dia9529.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%2F8xhvhowvjwb58dia9529.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cleanup or delete the 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%2Fumd7khi6ytwiy8gvz51b.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%2Fumd7khi6ytwiy8gvz51b.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 &lt;strong&gt;Quick Notes&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default Username&lt;/strong&gt;: For Amazon Linux 2, use &lt;code&gt;ec2-user&lt;/code&gt; as the default login username. If you're using an Ubuntu AMI, the username will be &lt;code&gt;ubuntu&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git Bash&lt;/strong&gt;: Always use &lt;strong&gt;Git Bash&lt;/strong&gt; for SSH on Windows, as it avoids potential path and permission issues that CMD may cause.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Groups&lt;/strong&gt;: Double-check that your &lt;strong&gt;security group&lt;/strong&gt; allows incoming traffic on &lt;strong&gt;Port 22 (SSH)&lt;/strong&gt; from &lt;strong&gt;Anywhere (0.0.0.0/0)&lt;/strong&gt; (or restrict it to specific IPs for better security).&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Congratulations! You’ve successfully launched an EC2 instance and connected to it using SSH from your Windows machine. This process is a foundational skill when working with AWS, and mastering it opens the door to managing servers, hosting applications, and scaling your infrastructure in the cloud.&lt;/p&gt;

&lt;p&gt;Remember, you can always go back and adjust instance settings, security groups, or key pairs as needed. AWS is highly flexible and scalable, and this hands-on experience will help you in your cloud journey.&lt;/p&gt;

&lt;p&gt;Feel free to drop your EC2 instance IP or a screenshot of your EC2 dashboard, and I can help you generate the exact SSH command if you run into any issues! Keep experimenting, and happy cloud computing!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Create a Static Website Using Amazon S3</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Thu, 17 Apr 2025 04:53:19 +0000</pubDate>
      <link>https://dev.to/durga_v/create-a-static-website-using-amazon-s3-4059</link>
      <guid>https://dev.to/durga_v/create-a-static-website-using-amazon-s3-4059</guid>
      <description>&lt;p&gt;Amazon S3 (Simple Storage Service) allows you to host static websites easily and cost-effectively. Whether it’s a personal portfolio, project landing page, or simple blog, here’s a step-by-step guide to help you set it up in minutes!&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;em&gt;To create a bucket&lt;/em&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to the AWS Management Console and open the Amazon S3 console: &lt;a href="https://console.aws.amazon.com/s3/" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/s3/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter your &lt;strong&gt;Bucket name&lt;/strong&gt; (e.g., &lt;code&gt;example.com&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Choose your desired &lt;strong&gt;AWS Region&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt; to proceed with the default settings.&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%2Fdxzzycv69qa0akdpnggq.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%2Fdxzzycv69qa0akdpnggq.png" alt="Create Bucket" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 &lt;em&gt;To enable bucket versioning&lt;/em&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the buckets list, click the bucket you just created.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Properties&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Static website hosting&lt;/strong&gt; and click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Use this bucket to host a website&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Static website hosting&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Index document&lt;/strong&gt;, enter &lt;code&gt;index.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save changes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You’ll now see a &lt;strong&gt;Website endpoint&lt;/strong&gt; at the bottom of the section.&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%2F9v35goea2e44fa44j2zu.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%2F9v35goea2e44fa44j2zu.png" alt="Enable Hosting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔓 &lt;em&gt;Edit Block Public Access settings&lt;/em&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In the buckets list, click your bucket name.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Permissions&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Block public access (bucket settings)&lt;/strong&gt;, click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Uncheck &lt;strong&gt;Block all public access&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Confirm and click &lt;strong&gt;Save changes&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%2F6wmge88tw2p3ciusx4ah.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%2F6wmge88tw2p3ciusx4ah.png" alt="Block Access 1" width="800" height="450"&gt;&lt;/a&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%2Fyswic10vy2i577rx6fwv.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%2Fyswic10vy2i577rx6fwv.png" alt="Block Access 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 &lt;em&gt;Add a bucket policy that makes your bucket content publicly available&lt;/em&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Under your bucket, go to the &lt;strong&gt;Permissions&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Bucket policy&lt;/strong&gt; and click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste the following JSON policy (replace &lt;code&gt;Bucket-Name&lt;/code&gt; with your actual bucket name):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PublicReadGetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::Bucket-Name/*"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&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;/div&gt;



&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save&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%2Fv0igu6c8gemht2f5lhpo.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%2Fv0igu6c8gemht2f5lhpo.png" alt="Bucket Policy" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📁 &lt;em&gt;Configure an index document&lt;/em&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create an &lt;code&gt;index.html&lt;/code&gt; file. Here's a simple example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My Website&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome to my website!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Now hosted on Amazon S3!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Go back to your bucket and make sure website hosting is enabled with &lt;code&gt;index.html&lt;/code&gt; set as your index document.&lt;/li&gt;
&lt;li&gt;Upload the file:

&lt;ul&gt;
&lt;li&gt;Drag and drop it into the bucket, or&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Upload&lt;/strong&gt;, choose the file, and complete the upload process.&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%2Fb5twxovsptq9uv24fgip.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%2Fb5twxovsptq9uv24fgip.png" alt="Upload File" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🌍 &lt;em&gt;Test your website endpoint&lt;/em&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In your bucket, go to the &lt;strong&gt;Properties&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Static website hosting&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click your &lt;strong&gt;Bucket website endpoint&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Your website should now open in a new tab, live and hosted!&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%2Fqq0n29r55sty8uku7xrt.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%2Fqq0n29r55sty8uku7xrt.png" alt="Website Test" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;That’s it! 🎉 You’ve successfully hosted your static website using &lt;strong&gt;Amazon S3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This setup is not only &lt;strong&gt;free or low-cost&lt;/strong&gt; (especially with the AWS Free Tier), but also super scalable and efficient for quick deployments. Whether you're showcasing your portfolio, sharing a project, or building a micro site — S3 makes it incredibly easy.&lt;/p&gt;

&lt;p&gt;You can now customize your HTML file, add more pages, or even integrate it with a custom domain and SSL using Amazon Route 53 + CloudFront.&lt;/p&gt;

&lt;p&gt;Happy hosting! 💻✨&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AWS 101 WORKSHOP ARCHITECTURE</title>
      <dc:creator>Durga Vellingiri</dc:creator>
      <pubDate>Mon, 31 Mar 2025 12:12:56 +0000</pubDate>
      <link>https://dev.to/durga_v/aws-101-workshop-architecture-12f5</link>
      <guid>https://dev.to/durga_v/aws-101-workshop-architecture-12f5</guid>
      <description>&lt;h2&gt;
  
  
  1. Creating a Virtual Private Cloud (VPC)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Navigate to VPC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to AWS Management Console.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;VPC&lt;/strong&gt; in the services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Create a New VPC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Create VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter a suitable name and CIDR block.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create VPC&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mn5y46yx3b2zov9wrnb.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%2F8mn5y46yx3b2zov9wrnb.png" alt="Create VPC" width="800" height="450"&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%2Fdwjll9xopfx77sii4ocw.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%2Fdwjll9xopfx77sii4ocw.png" alt="VPC Confirmation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Configuring Security Groups
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Navigate to Security Groups
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;VPC Dashboard&lt;/strong&gt;, go to &lt;strong&gt;Security Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Security Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Define Security Rules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add inbound rules (e.g., HTTP, HTTPS, SSH).&lt;/li&gt;
&lt;li&gt;Define source IP ranges.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ltssnid0f0i98trzwew.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%2F2ltssnid0f0i98trzwew.png" alt="Security Group" width="800" height="450"&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%2Fllivn74khxqnmaghpfn1.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%2Fllivn74khxqnmaghpfn1.png" alt="Adding Rules" width="800" height="450"&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%2Fzfdyzsxa6dxnt7uwm8un.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%2Fzfdyzsxa6dxnt7uwm8un.png" alt="Security Group Details" width="800" height="450"&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%2F52dfnufxnbz4gjgai63h.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%2F52dfnufxnbz4gjgai63h.png" alt="Rule Confirmation" width="800" height="450"&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%2Fnayf0nul10mdgxgrnsn8.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%2Fnayf0nul10mdgxgrnsn8.png" alt="Security Group Configured" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Creating IAM Role
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Go to AWS &lt;strong&gt;IAM Console&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Roles&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create Role&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Assign Policies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Choose a trusted entity (e.g., AWS Service).&lt;/li&gt;
&lt;li&gt;Attach necessary permissions.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Role&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qbcjxk4eayhp8oirpka.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%2F2qbcjxk4eayhp8oirpka.png" alt="IAM Role" width="800" height="450"&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%2Fuihnqhyr0j77cyq0w3x7.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%2Fuihnqhyr0j77cyq0w3x7.png" alt="IAM Policy" width="800" height="450"&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%2Fqnr40yfz1ddu1xqygwov.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%2Fqnr40yfz1ddu1xqygwov.png" alt="IAM Role Creation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Step 1: Navigate to EC2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to AWS &lt;strong&gt;EC2 Console&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch Instance&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Configure the Instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Select an AMI.&lt;/li&gt;
&lt;li&gt;Choose an instance type.&lt;/li&gt;
&lt;li&gt;Assign the previously created &lt;strong&gt;IAM Role&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Attach the &lt;strong&gt;Security Group&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Launch&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F82umdsdt05swl3mrym4a.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%2F82umdsdt05swl3mrym4a.png" alt="Launch EC2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Connecting to AWS Session Manager
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Open AWS Systems Manager
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Systems Manager&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Session Manager&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Connect to EC2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Start Session&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the EC2 instance and connect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwatx76usriir22igyzv.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%2Fcwatx76usriir22igyzv.png" alt="Session Manager" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Step 1: Navigate to Target Groups
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;EC2&lt;/strong&gt; &amp;gt; &lt;strong&gt;Load Balancing&lt;/strong&gt; &amp;gt; &lt;strong&gt;Target Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Target Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Register Targets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Select EC2 instances.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8ajipzidbzytp4urbjy.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%2Fa8ajipzidbzytp4urbjy.png" alt="Target Group" width="800" height="450"&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%2Fpbu7ukqsgg37j9s1795m.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%2Fpbu7ukqsgg37j9s1795m.png" alt="Target Configuration" width="800" height="450"&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%2F8e7no9e5hklsr3tjphds.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%2F8e7no9e5hklsr3tjphds.png" alt="Target Group Created" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Creating a Load Balancer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Navigate to Load Balancers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;EC2&lt;/strong&gt; &amp;gt; &lt;strong&gt;Load Balancing&lt;/strong&gt; &amp;gt; &lt;strong&gt;Load Balancers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Load Balancer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Configure Load Balancer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Choose an application or network load balancer.&lt;/li&gt;
&lt;li&gt;Assign the target group.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3r2sd4ukd5k8q3l5qy3.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%2Fk3r2sd4ukd5k8q3l5qy3.png" alt="Load Balancer" width="800" height="450"&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%2Fr0yc8mzjmai5rz22ngo8.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%2Fr0yc8mzjmai5rz22ngo8.png" alt="Load Balancer Config" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Creating an S3 Bucket
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Navigate to S3
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;S3 Console&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Configure Bucket
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enter a unique name.&lt;/li&gt;
&lt;li&gt;Choose a region and configure settings.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnc3zprw5qbv5wfkz2bjr.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%2Fnc3zprw5qbv5wfkz2bjr.png" alt="S3 Bucket" width="800" height="450"&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%2Fqa41cal0kmnrvvnbjhuc.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%2Fqa41cal0kmnrvvnbjhuc.png" alt="S3 Configuration" width="800" height="450"&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%2Ff3vb97uz1bxycib05hz2.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%2Ff3vb97uz1bxycib05hz2.png" alt="S3 Bucket Created" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Assigning Permissions to IAM Role
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Navigate to IAM Roles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Select the created IAM role.&lt;/li&gt;
&lt;li&gt;Attach necessary policies.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfrupatm1n3pfkwwd3pf.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%2Fkfrupatm1n3pfkwwd3pf.png" alt="IAM Role Permissions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Step 1: Navigate to Launch Templates
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;EC2&lt;/strong&gt; &amp;gt; &lt;strong&gt;Launch Templates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Template&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Configure the Template
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Define instance settings.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0p3aib6lu9o8y6j5wpr.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%2Fv0p3aib6lu9o8y6j5wpr.png" alt="Launch Template" width="800" height="450"&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%2Fns00wo974vvnpxntpghn.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%2Fns00wo974vvnpxntpghn.png" alt="Template Configuration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Setting Up Auto Scaling Groups
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Navigate to Auto Scaling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;EC2&lt;/strong&gt; &amp;gt; &lt;strong&gt;Auto Scaling Groups&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create Auto Scaling Group&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Define Scaling Policies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Select the launch template.&lt;/li&gt;
&lt;li&gt;Set desired instance count.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdmp77h9dcxycp492kkh.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%2Ffdmp77h9dcxycp492kkh.png" alt="Auto Scaling" width="800" height="450"&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%2Fkwksuouu9f04nv1wnbc2.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%2Fkwksuouu9f04nv1wnbc2.png" alt="Scaling Policy" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Output
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfnpkwv0iyml8p8d7mbv.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%2Fkfnpkwv0iyml8p8d7mbv.png" alt="Output1" width="800" height="450"&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%2Fuh2ty0161xhl3lyw6jdt.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%2Fuh2ty0161xhl3lyw6jdt.png" alt="Output2" width="800" height="450"&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%2Fqdqhtatpc8up6op9j9cc.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%2Fqdqhtatpc8up6op9j9cc.png" alt="Output3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Successfully implementing this AWS project has provided me with valuable hands-on experience in cloud infrastructure. By setting up VPCs, configuring security groups, deploying EC2 instances, integrating IAM roles, and managing scalable resources, I have gained a deeper understanding of AWS services. This structured approach ensures a secure, efficient, and scalable cloud environment, which is essential for modern cloud-based applications.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>aws101workshop</category>
      <category>awschallenge</category>
      <category>awscloud</category>
    </item>
  </channel>
</rss>
