<?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: Naami Ahmed</title>
    <description>The latest articles on DEV Community by Naami Ahmed (@naamiahmed).</description>
    <link>https://dev.to/naamiahmed</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2461034%2Fc98ff73b-cf88-4fb8-8711-fa19e86e846b.jpeg</url>
      <title>DEV Community: Naami Ahmed</title>
      <link>https://dev.to/naamiahmed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/naamiahmed"/>
    <language>en</language>
    <item>
      <title>AWS Architecture Unlocked: Follow a Request Through a VPC</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Mon, 05 Oct 2026 07:50:47 +0000</pubDate>
      <link>https://dev.to/naamiahmed/aws-architecture-unlocked-follow-a-request-through-a-vpc-27fp</link>
      <guid>https://dev.to/naamiahmed/aws-architecture-unlocked-follow-a-request-through-a-vpc-27fp</guid>
      <description>&lt;p&gt;&lt;em&gt;Understanding VPCs, subnets, route tables, Internet Gateway, NAT Gateway, Security Groups, NACLs, IAM, and S3 through one real-world request.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually happens when a user opens an application running on AWS?
&lt;/h2&gt;

&lt;p&gt;You have probably seen diagrams like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Load Balancer → EC2 → RDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It looks simple.&lt;/p&gt;

&lt;p&gt;But then the questions start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How does the request enter the AWS network?&lt;/li&gt;
&lt;li&gt;Why is the Load Balancer in a public subnet?&lt;/li&gt;
&lt;li&gt;Why is the application server in a private subnet?&lt;/li&gt;
&lt;li&gt;How does a private EC2 instance access the internet?&lt;/li&gt;
&lt;li&gt;What exactly does the NAT Gateway do?&lt;/li&gt;
&lt;li&gt;What is the difference between an Internet Gateway and a NAT Gateway?&lt;/li&gt;
&lt;li&gt;Where do Route Tables fit into all of this?&lt;/li&gt;
&lt;li&gt;If Security Groups protect resources, what does a Network ACL protect?&lt;/li&gt;
&lt;li&gt;How does the application access S3?&lt;/li&gt;
&lt;li&gt;Does IAM provide the network connection to S3?&lt;/li&gt;
&lt;li&gt;What actually happens to a packet as it travels through the architecture?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning AWS services individually is one thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding how those services work together is another.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is what this article is about.&lt;/p&gt;

&lt;p&gt;Rather than explaining AWS networking as a collection of definitions, let's follow a request through a realistic AWS architecture and understand what happens at each step.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Big Picture
&lt;/h2&gt;

&lt;p&gt;Let's imagine that we are running a simple web application on AWS.&lt;/p&gt;

&lt;p&gt;Our architecture contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Route 53&lt;/li&gt;
&lt;li&gt;Amazon VPC&lt;/li&gt;
&lt;li&gt;Two Availability Zones&lt;/li&gt;
&lt;li&gt;Public subnets&lt;/li&gt;
&lt;li&gt;Private application subnets&lt;/li&gt;
&lt;li&gt;Private database subnets&lt;/li&gt;
&lt;li&gt;Internet Gateway&lt;/li&gt;
&lt;li&gt;NAT Gateway&lt;/li&gt;
&lt;li&gt;Application Load Balancer&lt;/li&gt;
&lt;li&gt;EC2 application servers&lt;/li&gt;
&lt;li&gt;Amazon RDS&lt;/li&gt;
&lt;li&gt;Amazon S3&lt;/li&gt;
&lt;li&gt;VPC Endpoint&lt;/li&gt;
&lt;li&gt;Route Tables&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Network ACLs&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At a high level:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         INTERNET
                            │
                            ▼
                       Route 53
                            │
                            ▼
                 Application Load Balancer
                            │
                ┌───────────┴───────────┐
                │                       │
          Application A           Application B
                │                       │
                └───────────┬───────────┘
                            │
                           RDS
                            │
                           S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But there is much more happening underneath.&lt;/p&gt;

&lt;p&gt;Let's open this architecture step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. First: What Is a VPC?
&lt;/h2&gt;

&lt;p&gt;An Amazon VPC, or Virtual Private Cloud, is your logical network environment inside AWS.&lt;/p&gt;

&lt;p&gt;Think about a company office.&lt;/p&gt;

&lt;p&gt;The office has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different rooms&lt;/li&gt;
&lt;li&gt;entrances&lt;/li&gt;
&lt;li&gt;internal areas&lt;/li&gt;
&lt;li&gt;security controls&lt;/li&gt;
&lt;li&gt;different routes between areas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A VPC gives you a similar networking boundary in AWS.&lt;/p&gt;

&lt;p&gt;Inside a VPC, you can create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnets&lt;/li&gt;
&lt;li&gt;Route Tables&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Network ACLs&lt;/li&gt;
&lt;li&gt;Internet Gateways&lt;/li&gt;
&lt;li&gt;NAT Gateways&lt;/li&gt;
&lt;li&gt;VPC Endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A VPC spans the Availability Zones in an AWS Region, and you can create subnets in those Availability Zones.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Region
│
└── VPC
    │
    ├── Availability Zone A
    │
    └── Availability Zone B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The VPC is therefore the &lt;strong&gt;main networking boundary&lt;/strong&gt; for our application.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Why Do We Use Multiple Availability Zones?
&lt;/h2&gt;

&lt;p&gt;Before discussing public and private subnets, there is another important concept: Availability Zones.&lt;/p&gt;

&lt;p&gt;An AWS Region contains multiple Availability Zones.&lt;/p&gt;

&lt;p&gt;Instead of putting our entire application into one Availability Zone, we can distribute resources across multiple Availability Zones.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    VPC
                     │
          ┌──────────┴──────────┐
          │                     │
       AZ - A                 AZ - B
          │                     │
     Application A        Application B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because if one Availability Zone experiences a problem, resources in another Availability Zone can continue serving traffic.&lt;/p&gt;

&lt;p&gt;This is one of the basic ideas behind &lt;strong&gt;high availability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For our example, we'll use two Availability Zones.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Public Subnet vs Private Subnet
&lt;/h2&gt;

&lt;p&gt;This is one of the most important concepts to understand.&lt;/p&gt;

&lt;p&gt;We can divide our VPC into different subnets.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VPC
│
├── Availability Zone A
│   ├── Public Subnet
│   ├── Private Application Subnet
│   └── Private Database Subnet
│
└── Availability Zone B
    ├── Public Subnet
    ├── Private Application Subnet
    └── Private Database Subnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what actually makes a subnet "public"?&lt;/p&gt;

&lt;p&gt;It is not simply a label saying &lt;code&gt;Public Subnet&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The important factor is &lt;strong&gt;routing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A subnet can be considered public when its route table contains a route to an Internet Gateway. For IPv4 internet traffic, that commonly looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Destination       Target

0.0.0.0/0         Internet Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS documentation describes adding this route to a subnet's route table to provide internet access through an Internet Gateway.&lt;/p&gt;

&lt;p&gt;So:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Public subnet = subnet whose routing allows internet connectivity through an Internet Gateway, with appropriately addressed resources and security controls.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A private subnet does not have a direct route to an Internet Gateway for internet-bound traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What Does a Route Table Actually Do?
&lt;/h2&gt;

&lt;p&gt;This is where many beginners become confused.&lt;/p&gt;

&lt;p&gt;A Route Table is basically a &lt;strong&gt;traffic decision table&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Where should this traffic go?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Destination       Target

10.0.0.0/16       local
0.0.0.0/0         igw-xxxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first route says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Traffic destined for the VPC's own CIDR stays inside the VPC.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Traffic destined for anywhere else should use the Internet Gateway.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AWS describes a route table as a set of rules that determines where traffic from a subnet or gateway is directed.&lt;/p&gt;

&lt;p&gt;Think of a route table like a road-sign system.&lt;/p&gt;

&lt;p&gt;If the destination is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10.0.0.0/16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;take the local road.&lt;/p&gt;

&lt;p&gt;If the destination is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0/0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;take the configured default route.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How Does Internet Traffic Enter the VPC?
&lt;/h2&gt;

&lt;p&gt;Now let's follow a real request.&lt;/p&gt;

&lt;p&gt;Imagine a user opens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://myapp.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The simplified flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  │
  ▼
Internet
  │
  ▼
Route 53
  │
  ▼
Application Load Balancer
  │
  ▼
Private Application Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But how does the request actually enter the VPC?&lt;/p&gt;

&lt;p&gt;That's where the &lt;strong&gt;Internet Gateway&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Internet Gateway — The VPC's Connection to the Internet
&lt;/h2&gt;

&lt;p&gt;An Internet Gateway, or IGW, is attached to the VPC.&lt;/p&gt;

&lt;p&gt;It provides connectivity between the VPC and the internet when the appropriate routing and addressing are configured.&lt;/p&gt;

&lt;p&gt;A simplified view:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   │
   ▼
Internet Gateway
   │
   ▼
VPC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a public subnet, the route table may contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.0.0.0/0 → Internet Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Internet Gateway itself is &lt;strong&gt;not placed inside the subnet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is attached to the VPC.&lt;/p&gt;

&lt;p&gt;This is an important detail because architecture diagrams often make this confusing.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Application Load Balancer in the Public Subnets
&lt;/h2&gt;

&lt;p&gt;Now let's introduce an Application Load Balancer.&lt;/p&gt;

&lt;p&gt;Our architecture looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Internet
                       │
                       ▼
               Internet Gateway
                       │
             ┌─────────┴─────────┐
             │                   │
       Public Subnet A     Public Subnet B
             │                   │
             └─────────┬─────────┘
                       │
                       ▼
               Application
               Load Balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ALB can receive requests from users and distribute them to healthy application targets.&lt;/p&gt;

&lt;p&gt;Our application servers don't need to be directly exposed to the internet.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   ↓
ALB
   ↓
Private Application Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives us a cleaner security boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Why Put the Application Servers in Private Subnets?
&lt;/h2&gt;

&lt;p&gt;Suppose we have two EC2 application servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private Application Subnet A
        │
        └── EC2 App Server A

Private Application Subnet B
        │
        └── EC2 App Server B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These servers do not need public IP addresses for users to access the application.&lt;/p&gt;

&lt;p&gt;Users communicate with the ALB.&lt;/p&gt;

&lt;p&gt;The ALB communicates with the application servers.&lt;/p&gt;

&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   ↓
ALB
   ↓
Private EC2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This reduces the direct exposure of the application servers.&lt;/p&gt;

&lt;p&gt;This is a common pattern in multi-tier AWS architectures.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Security Groups: Resource-Level Protection
&lt;/h2&gt;

&lt;p&gt;Now we need security.&lt;/p&gt;

&lt;p&gt;Security Groups act as a virtual firewall associated with resources such as network interfaces.&lt;/p&gt;

&lt;p&gt;For our application, we could create three Security Groups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALB Security Group
Application Security Group
Database Security Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;/p&gt;

&lt;h3&gt;
  
  
  ALB Security Group
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inbound:
HTTPS 443
Source: Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Application Security Group
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inbound:
Application port
Source: ALB Security Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Database Security Group
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inbound:
PostgreSQL 5432
Source: Application Security Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   │
   │ HTTPS 443
   ▼
ALB
   │
   │ Application traffic
   ▼
EC2
   │
   │ PostgreSQL 5432
   ▼
RDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice something important.&lt;/p&gt;

&lt;p&gt;We don't say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Allow the entire internet to access RDS on port 5432."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, we restrict database access to the application tier.&lt;/p&gt;

&lt;p&gt;This is the principle of &lt;strong&gt;least privilege applied to network access&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Security Groups Are Stateful
&lt;/h2&gt;

&lt;p&gt;Security Groups are stateful.&lt;/p&gt;

&lt;p&gt;If an allowed inbound connection is established, the response traffic is automatically allowed back without requiring a separate outbound rule for that response.&lt;/p&gt;

&lt;p&gt;Security Groups also support allow rules rather than explicit deny rules.&lt;/p&gt;

&lt;p&gt;This is different from Network ACLs.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Network ACLs — Subnet-Level Protection
&lt;/h2&gt;

&lt;p&gt;A Network Access Control List, or NACL, works at the subnet level.&lt;/p&gt;

&lt;p&gt;Think about it this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             VPC
              │
        ┌─────┴─────┐
        │           │
      Subnet      Subnet
        │           │
       NACL        NACL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Security Group protects resources.&lt;/p&gt;

&lt;p&gt;A NACL controls traffic at the subnet boundary.&lt;/p&gt;

&lt;p&gt;The basic comparison is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Security Group&lt;/th&gt;
&lt;th&gt;Network ACL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Resource / network interface&lt;/td&gt;
&lt;td&gt;Subnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stateful&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Allow rules&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deny rules&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main purpose&lt;/td&gt;
&lt;td&gt;Resource-level traffic control&lt;/td&gt;
&lt;td&gt;Subnet-level traffic control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Because NACLs are stateless, you need to think about both directions of traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Now the Interesting Question: How Does a Private EC2 Reach the Internet?
&lt;/h2&gt;

&lt;p&gt;Our application server is private.&lt;/p&gt;

&lt;p&gt;It has no public IP address.&lt;/p&gt;

&lt;p&gt;But suppose the application needs to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;call an external API&lt;/li&gt;
&lt;li&gt;download a package&lt;/li&gt;
&lt;li&gt;access an external service&lt;/li&gt;
&lt;li&gt;retrieve some internet-hosted resource&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How does it access the internet?&lt;/p&gt;

&lt;p&gt;The answer is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NAT Gateway.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  14. NAT Gateway — Private to Internet
&lt;/h2&gt;

&lt;p&gt;We put a NAT Gateway in a public subnet.&lt;/p&gt;

&lt;p&gt;The architecture becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private EC2
     │
     ▼
Private Route Table
     │
     ▼
NAT Gateway
     │
     ▼
Internet Gateway
     │
     ▼
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The private subnet route table can contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Destination       Target

0.0.0.0/0         NAT Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS documents this pattern: a NAT device can allow resources in private subnets to initiate connections to the internet while those resources cannot receive unsolicited inbound connection requests from the internet. AWS recommends NAT Gateway as the managed NAT option for this use case.&lt;/p&gt;

&lt;p&gt;The important concept is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Private resources can initiate outbound internet connections through NAT without requiring direct inbound internet connectivity.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  15. Internet Gateway vs NAT Gateway
&lt;/h2&gt;

&lt;p&gt;This is a common interview question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internet Gateway
&lt;/h3&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;VPC ↔ Internet&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It provides the VPC's connection to the internet when routing and addressing permit it.&lt;/p&gt;

&lt;h3&gt;
  
  
  NAT Gateway
&lt;/h3&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Private Subnet → Internet&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It allows private resources to make outbound connections without requiring them to have public IP addresses.&lt;/p&gt;

&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PUBLIC:

EC2 / ALB
   ↓
Route Table
   ↓
Internet Gateway
   ↓
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PRIVATE:

EC2
   ↓
Route Table
   ↓
NAT Gateway
   ↓
Internet Gateway
   ↓
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  16. Important: NAT Gateway Does Not Make a Private Subnet Public
&lt;/h2&gt;

&lt;p&gt;This is a common misunderstanding.&lt;/p&gt;

&lt;p&gt;Some beginners think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If my private EC2 uses NAT Gateway, then it becomes public."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;The EC2 remains without a public IP address.&lt;/p&gt;

&lt;p&gt;The NAT Gateway performs the network address translation for outbound traffic.&lt;/p&gt;

&lt;p&gt;The return traffic is translated back to the private resource.&lt;/p&gt;

&lt;p&gt;So the architecture remains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   X
   │
   │ No direct unsolicited inbound connection
   │
NAT Gateway
   │
Private EC2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  17. Why Do We Need Multiple NAT Gateways?
&lt;/h2&gt;

&lt;p&gt;For a highly available architecture, we generally avoid depending on one NAT Gateway in only one Availability Zone.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                VPC

        AZ-A              AZ-B
         │                  │
    Public Subnet       Public Subnet
         │                  │
    NAT Gateway A       NAT Gateway B
         │                  │
    Private App A       Private App B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This avoids making one NAT Gateway a single point of failure for both Availability Zones.&lt;/p&gt;

&lt;p&gt;There is also a cost consideration because NAT Gateways are billed resources.&lt;/p&gt;

&lt;p&gt;For a learning architecture, you can show two NAT Gateways and explain that real architectures must balance &lt;strong&gt;availability, complexity, and cost&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. What About the Database?
&lt;/h2&gt;

&lt;p&gt;Our application needs a database.&lt;/p&gt;

&lt;p&gt;Let's use Amazon RDS.&lt;/p&gt;

&lt;p&gt;We can place RDS in private database subnets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private Application Subnet
        │
        ▼
Application Server
        │
        │ TCP 5432
        ▼
Private Database Subnet
        │
        ▼
       RDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The RDS database does not need to be directly accessible from the internet.&lt;/p&gt;

&lt;p&gt;The database Security Group can allow PostgreSQL traffic only from the application Security Group.&lt;/p&gt;

&lt;p&gt;This gives us:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   │
   X
   │
   └── No direct access to RDS

Application
   │
   ▼
RDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a very important production-style security pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Now Let's Talk About S3
&lt;/h2&gt;

&lt;p&gt;Amazon S3 is different from EC2 and RDS.&lt;/p&gt;

&lt;p&gt;You don't create an S3 bucket inside your VPC.&lt;/p&gt;

&lt;p&gt;S3 is an AWS managed service.&lt;/p&gt;

&lt;p&gt;So we shouldn't draw it as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VPC
└── S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as if S3 were a subnet resource.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              VPC
               │
          Application
               │
               ▼
              S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But now we have two separate questions:&lt;/p&gt;

&lt;h3&gt;
  
  
  Question 1:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Is the application allowed to access the S3 bucket?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's an authorization question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Question 2:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;How does the network traffic reach S3?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a networking question.&lt;/p&gt;

&lt;p&gt;These are different concepts.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. IAM Controls Authorization
&lt;/h2&gt;

&lt;p&gt;Suppose our EC2 application needs to download an object from S3.&lt;/p&gt;

&lt;p&gt;We can attach an IAM Role to the EC2 instance.&lt;/p&gt;

&lt;p&gt;That role can contain permissions such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3:GetObject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for a specific bucket or path.&lt;/p&gt;

&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2
 │
 ▼
IAM Role
 │
 ▼
Permission to access S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;IAM answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Is this identity allowed to perform this AWS action?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;IAM does &lt;strong&gt;not&lt;/strong&gt; create the network path to S3.&lt;/p&gt;

&lt;p&gt;That distinction is extremely important.&lt;/p&gt;

&lt;h2&gt;
  
  
  21. VPC Endpoint: Private Connectivity to S3
&lt;/h2&gt;

&lt;p&gt;Now let's look at the networking side.&lt;/p&gt;

&lt;p&gt;For Amazon S3, we can use a &lt;strong&gt;Gateway VPC Endpoint&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The traffic can be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private EC2
     │
     ▼
Route Table
     │
     ▼
S3 VPC Endpoint
     │
     ▼
Amazon S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows access to S3 without requiring an Internet Gateway or NAT Gateway for that S3 traffic. AWS also documents that gateway endpoints can be associated with route tables and that they can be used for private access to S3.&lt;/p&gt;

&lt;p&gt;For example, our private route table could conceptually contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10.0.0.0/16       local
S3 prefix list    S3 VPC Endpoint
0.0.0.0/0         NAT Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The more-specific S3 route can send S3 traffic to the endpoint, while other internet-bound traffic can continue through the NAT Gateway. AWS documents this routing pattern as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  22. IAM vs VPC Endpoint
&lt;/h2&gt;

&lt;p&gt;This is worth remembering.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Application
                    │
          ┌─────────┴─────────┐
          │                   │
       IAM Role          VPC Endpoint
          │                   │
          ▼                   ▼
   Authorization          Network Path
          │                   │
          └─────────┬─────────┘
                    ▼
                   S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In simple words:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IAM says:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You are allowed to do this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;VPC Endpoint says:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is the private network path to the AWS service."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These two concepts work together, but they are not the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  23. Let's Follow the Complete User Request
&lt;/h2&gt;

&lt;p&gt;Now let's put everything together.&lt;/p&gt;

&lt;p&gt;Imagine a user opens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://myapp.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1 — DNS
&lt;/h3&gt;

&lt;p&gt;The user's request needs to find where the application is hosted.&lt;/p&gt;

&lt;p&gt;Route 53 provides DNS functionality.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
Route 53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2 — Internet
&lt;/h3&gt;

&lt;p&gt;The request travels through the internet toward our AWS application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3 — Internet Gateway
&lt;/h3&gt;

&lt;p&gt;The traffic enters the VPC through the Internet Gateway according to the configured routing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
 ↓
Internet Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4 — Load Balancer
&lt;/h3&gt;

&lt;p&gt;The Application Load Balancer receives the request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet Gateway
 ↓
Application Load Balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5 — Application Server
&lt;/h3&gt;

&lt;p&gt;The ALB forwards the request to a healthy application server in a private subnet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALB
 ↓
Private EC2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6 — Database
&lt;/h3&gt;

&lt;p&gt;If the application needs data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2
 ↓
RDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The database Security Group controls whether the application is allowed to connect.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7 — S3
&lt;/h3&gt;

&lt;p&gt;If the application needs an image or file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2
 ↓
VPC Endpoint
 ↓
S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;IAM permissions determine whether the application is authorized to access the required S3 object.&lt;/p&gt;

&lt;h2&gt;
  
  
  24. What If the Application Calls an External API?
&lt;/h2&gt;

&lt;p&gt;Now imagine the application needs to call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application is still in a private subnet.&lt;/p&gt;

&lt;p&gt;The traffic follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private EC2
     ↓
Private Route Table
     ↓
NAT Gateway
     ↓
Internet Gateway
     ↓
Internet
     ↓
External API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is one of the most useful traffic flows to understand when working with AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  25. The Architecture at a Glance
&lt;/h2&gt;

&lt;p&gt;Now we can understand the complete architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                              INTERNET
                                 │
                                 ▼
                             Route 53
                                 │
                                 ▼
                         Internet Gateway
                                 │
                   ┌─────────────┴─────────────┐
                   │                           │
              Public Subnet A            Public Subnet B
                   │                           │
                   └─────────────┬─────────────┘
                                 │
                        Application LB
                                 │
                 ┌───────────────┴───────────────┐
                 │                               │
          Private App Subnet A            Private App Subnet B
                 │                               │
              EC2 App A                       EC2 App B
                 │                               │
                 ├──────────────┐  ┌─────────────┤
                 │              │  │             │
                 ▼              │  │             ▼
                RDS             │  │            S3
                 │              │  │             ▲
                 │              │  │             │
                 │              └──┴──── VPC Endpoint
                 │
                 │
          Private outbound traffic
                 │
                 ▼
             NAT Gateway
                 │
                 ▼
          Internet Gateway
                 │
                 ▼
              INTERNET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  26. One Simple Mental Model
&lt;/h2&gt;

&lt;p&gt;If you forget everything else from this article, remember these questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  VPC
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where is my network?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Subnet
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where inside the network is my resource?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Route Table
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where should the traffic go?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Internet Gateway
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How does my VPC communicate with the internet?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  NAT Gateway
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How can private resources initiate outbound internet connections?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Security Group
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which traffic is allowed to reach this resource?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Network ACL
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which traffic is allowed or denied at the subnet boundary?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  IAM
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is this identity allowed to perform this AWS action?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  VPC Endpoint
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can my VPC privately reach a supported AWS service?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you understand these questions, AWS networking becomes much less confusing.&lt;/p&gt;

&lt;h2&gt;
  
  
  27. The Most Important Lesson
&lt;/h2&gt;

&lt;p&gt;AWS architecture is not about memorizing hundreds of services.&lt;/p&gt;

&lt;p&gt;It is about understanding &lt;strong&gt;relationships&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A real application is not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2
RDS
S3
VPC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as four independent services.&lt;/p&gt;

&lt;p&gt;It is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
DNS
  ↓
Internet
  ↓
VPC
  ↓
Load Balancer
  ↓
Application
  ↓
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while security and networking operate around those components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                IAM
                 │
                 ▼
Application ──── RDS
    │
    ├── Security Groups
    │
    ├── Route Tables
    │
    ├── NACLs
    │
    └── VPC Endpoint ─── S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you start thinking in terms of &lt;strong&gt;traffic flow, trust boundaries, routing, and authorization&lt;/strong&gt;, AWS architecture becomes much easier to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  28. Final Takeaway
&lt;/h2&gt;

&lt;p&gt;You don't need to memorize every AWS service to start understanding cloud architecture.&lt;/p&gt;

&lt;p&gt;Start with one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Where does the request come from, where does it go, and what controls it along the way?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From that one question, many AWS concepts become connected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
   │
   ▼
DNS
   │
   ▼
Internet
   │
   ▼
Internet Gateway
   │
   ▼
Public Subnet
   │
   ▼
Load Balancer
   │
   ▼
Private Subnet
   │
   ▼
Application
   │
   ├──────────► RDS
   │
   ├──────────► S3 through VPC Endpoint
   │
   └──────────► Internet through NAT Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And around that traffic flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route Tables
Security Groups
Network ACLs
IAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;work together to control &lt;strong&gt;where traffic goes, what traffic is allowed, and what an identity is permitted to do&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is the AWS architecture mental model I wish I had when I first started learning cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Would Add to the Architecture Next
&lt;/h2&gt;

&lt;p&gt;This article intentionally focuses on the networking foundation.&lt;/p&gt;

&lt;p&gt;Once this mental model is clear, you can extend the architecture with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS WAF&lt;/li&gt;
&lt;li&gt;CloudFront&lt;/li&gt;
&lt;li&gt;Auto Scaling&lt;/li&gt;
&lt;li&gt;ECS/EKS&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;SQS&lt;/li&gt;
&lt;li&gt;EventBridge&lt;/li&gt;
&lt;li&gt;CloudWatch&lt;/li&gt;
&lt;li&gt;AWS Secrets Manager&lt;/li&gt;
&lt;li&gt;AWS KMS&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;li&gt;Multi-region architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But don't put everything into the first diagram.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A good architecture diagram should explain a system, not display every AWS service you know.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Final Note
&lt;/h2&gt;

&lt;p&gt;This article is based on my current understanding of AWS networking and architecture as a Cloud/DevOps engineer.&lt;/p&gt;

&lt;p&gt;I'm still learning, and that's exactly why I wanted to explain these concepts from the perspective of someone who is learning how individual AWS services connect to form a complete system.&lt;/p&gt;

&lt;p&gt;If this helped you understand AWS architecture a little better, feel free to share it with someone who is learning AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy building! ☁️&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>networking</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Getting Started with Kiro as a DevOps Engineer</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Sun, 10 May 2026 13:27:09 +0000</pubDate>
      <link>https://dev.to/naamiahmed/getting-started-with-kiro-as-a-devops-engineer-177</link>
      <guid>https://dev.to/naamiahmed/getting-started-with-kiro-as-a-devops-engineer-177</guid>
      <description>&lt;p&gt;Artificial Intelligence is rapidly changing modern software engineering. Today, developers are no longer using AI only for code completion. Instead, AI tools are becoming engineering assistants that help with planning, debugging, architecture, automation, and project workflows.&lt;/p&gt;

&lt;p&gt;Recently, I started exploring Kiro, an AI-powered development environment focused on structured and agentic software engineering workflows. As someone interested in Cloud and DevOps engineering, I wanted to understand how Kiro could help with real-world development tasks such as CI/CD, deployment automation, cloud infrastructure, and production-style workflows.&lt;/p&gt;

&lt;p&gt;In this article, I’ll share my first experience with Kiro, what I explored, and why I think tools like this are becoming important for modern developers.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Kiro?
&lt;/h1&gt;

&lt;p&gt;Kiro is an AI-powered IDE and engineering assistant designed to support developers throughout the software development lifecycle.&lt;/p&gt;

&lt;p&gt;Unlike traditional AI coding assistants that mainly focus on autocomplete or generating small code snippets, Kiro focuses on a more structured engineering workflow.&lt;/p&gt;

&lt;h1&gt;
  
  
  Kiro can help developers with:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Requirement understanding&lt;/li&gt;
&lt;li&gt;Project planning&lt;/li&gt;
&lt;li&gt;Code generation&lt;/li&gt;
&lt;li&gt;Architecture guidance&lt;/li&gt;
&lt;li&gt;Workflow organization&lt;/li&gt;
&lt;li&gt;Deployment-related tasks&lt;/li&gt;
&lt;li&gt;Debugging support&lt;/li&gt;
&lt;li&gt;Multi-step development assistance&lt;/li&gt;
&lt;li&gt;Engineering documentation&lt;/li&gt;
&lt;li&gt;Automation ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes Kiro feel more like a development partner instead of only an autocomplete tool.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why I Started Exploring Kiro
&lt;/h1&gt;

&lt;p&gt;As a DevOps and cloud-focused engineer, I usually work with technologies and workflows such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS services&lt;/li&gt;
&lt;li&gt;Docker containers&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Linux environments&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Nginx reverse proxy configurations&lt;/li&gt;
&lt;li&gt;Deployment automation&lt;/li&gt;
&lt;li&gt;Full-stack application deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern DevOps projects are not only about writing code. They also involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infrastructure setup&lt;/li&gt;
&lt;li&gt;Deployment planning&lt;/li&gt;
&lt;li&gt;Automation workflows&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;System architecture decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because of this, I wanted to explore whether Kiro could support engineering workflows beyond basic code generation.&lt;/p&gt;

&lt;h1&gt;
  
  
  My Current Development Setup
&lt;/h1&gt;

&lt;p&gt;For my experiments with Kiro, I used the following environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development Tools&lt;/li&gt;
&lt;li&gt;Kiro IDE&lt;/li&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;Docker Desktop&lt;/li&gt;
&lt;li&gt;Linux terminal environment&lt;/li&gt;
&lt;li&gt;Cloud &amp;amp; DevOps Tools&lt;/li&gt;
&lt;li&gt;AWS EC2&lt;/li&gt;
&lt;li&gt;AWS IAM&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Docker containers&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Languages &amp;amp; Frameworks&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Bash scripting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup helped me test Kiro in realistic cloud and deployment-related scenarios.&lt;/p&gt;

&lt;h1&gt;
  
  
  My First Use Cases with Kiro
&lt;/h1&gt;

&lt;p&gt;After setting up Kiro, I started experimenting with several common DevOps and cloud engineering tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Dockerfile Generation
&lt;/h2&gt;

&lt;p&gt;I tested Kiro by asking it to generate Docker configurations for frontend and backend applications.&lt;/p&gt;

&lt;p&gt;It helped with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dockerfile structure&lt;/li&gt;
&lt;li&gt;Base image suggestions&lt;/li&gt;
&lt;li&gt;Dependency installation&lt;/li&gt;
&lt;li&gt;Port exposure&lt;/li&gt;
&lt;li&gt;Container optimization ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was useful because containerization is one of the most common workflows in DevOps projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. CI/CD Workflow Assistance
&lt;/h2&gt;

&lt;p&gt;I also experimented with GitHub Actions workflow generation.&lt;/p&gt;

&lt;p&gt;Kiro helped generate ideas for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build pipelines&lt;/li&gt;
&lt;li&gt;Docker image creation&lt;/li&gt;
&lt;li&gt;Deployment steps&lt;/li&gt;
&lt;li&gt;Environment variable handling&lt;/li&gt;
&lt;li&gt;Automated workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was interesting because CI/CD pipelines can become complex when projects scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Deployment Workflow Planning
&lt;/h2&gt;

&lt;p&gt;I tested Kiro with deployment-related prompts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying applications to AWS EC2&lt;/li&gt;
&lt;li&gt;Nginx reverse proxy setup&lt;/li&gt;
&lt;li&gt;Docker-based deployment architecture&lt;/li&gt;
&lt;li&gt;Multi-service deployment flow ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of only generating commands, Kiro tried to provide more structured workflow guidance.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Debugging Support
&lt;/h2&gt;

&lt;p&gt;I also experimented with debugging scenarios.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Docker issues&lt;/li&gt;
&lt;li&gt;Deployment errors&lt;/li&gt;
&lt;li&gt;Configuration mistakes&lt;/li&gt;
&lt;li&gt;CI/CD workflow problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro helped identify possible causes and suggested improvements step by step.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I Like About Kiro
&lt;/h1&gt;

&lt;p&gt;After spending some time exploring Kiro, a few things stood out to me.&lt;/p&gt;

&lt;p&gt;Engineering-Focused Workflow&lt;/p&gt;

&lt;p&gt;One of the biggest differences I noticed is that Kiro focuses on engineering workflows instead of only code completion.&lt;/p&gt;

&lt;p&gt;This is important because real-world software projects involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;planning&lt;/li&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;deployment&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;not just writing code.&lt;/p&gt;

&lt;p&gt;Structured Development Assistance&lt;/p&gt;

&lt;p&gt;Kiro tries to guide development in a more organized way.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding project goals&lt;/li&gt;
&lt;li&gt;breaking tasks into steps&lt;/li&gt;
&lt;li&gt;suggesting workflow improvements&lt;/li&gt;
&lt;li&gt;helping organize implementations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feels closer to real software engineering practices.&lt;/p&gt;

&lt;p&gt;Useful for DevOps Learning&lt;/p&gt;

&lt;p&gt;As someone learning and working with DevOps workflows, I found Kiro useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deployment planning&lt;/li&gt;
&lt;li&gt;automation ideas&lt;/li&gt;
&lt;li&gt;Docker workflows&lt;/li&gt;
&lt;li&gt;CI/CD generation&lt;/li&gt;
&lt;li&gt;infrastructure thinking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-assisted workflows can help learners understand engineering processes faster.&lt;/p&gt;

&lt;p&gt;Multi-Step Workflow Thinking&lt;/p&gt;

&lt;p&gt;Another interesting part is that Kiro does not only focus on a single prompt-response cycle.&lt;/p&gt;

&lt;p&gt;Instead, it attempts to support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;continuous workflows&lt;/li&gt;
&lt;li&gt;project context&lt;/li&gt;
&lt;li&gt;implementation planning&lt;/li&gt;
&lt;li&gt;iterative improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feels more practical for larger projects.&lt;/p&gt;

&lt;h1&gt;
  
  
  Challenges and Learning Curve
&lt;/h1&gt;

&lt;p&gt;Since I recently started exploring Kiro, I’m still learning how to fully utilize its capabilities.&lt;/p&gt;

&lt;p&gt;Some challenges I noticed include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning effective prompting&lt;/li&gt;
&lt;li&gt;Understanding workflow patterns&lt;/li&gt;
&lt;li&gt;Verifying generated outputs&lt;/li&gt;
&lt;li&gt;Adapting AI suggestions to real projects&lt;/li&gt;
&lt;li&gt;Integrating AI assistance into existing workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like all AI tools, developer knowledge is still important. AI-generated solutions should always be reviewed and validated before production use.&lt;/p&gt;

&lt;h1&gt;
  
  
  How I Plan to Use Kiro Next
&lt;/h1&gt;

&lt;p&gt;I’m planning to continue exploring Kiro with more practical DevOps and cloud engineering projects.&lt;/p&gt;

&lt;p&gt;Some areas I want to test further include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS deployment workflows&lt;/li&gt;
&lt;li&gt;Infrastructure automation&lt;/li&gt;
&lt;li&gt;CI/CD optimization&lt;/li&gt;
&lt;li&gt;Docker orchestration&lt;/li&gt;
&lt;li&gt;Monitoring workflows&lt;/li&gt;
&lt;li&gt;Cloud-native applications&lt;/li&gt;
&lt;li&gt;AI-assisted architecture planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also hope to create more technical content and share my learning journey with the developer community.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;My journey with Kiro is still at an early stage, but my first experience has been positive so far.&lt;/p&gt;

&lt;p&gt;What makes Kiro interesting to me is its focus on structured engineering workflows rather than simple code autocomplete.&lt;/p&gt;

&lt;p&gt;For cloud engineers, DevOps learners, and full-stack developers, tools like Kiro may become very useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improving productivity&lt;/li&gt;
&lt;li&gt;understanding workflows&lt;/li&gt;
&lt;li&gt;automating repetitive tasks&lt;/li&gt;
&lt;li&gt;organizing projects&lt;/li&gt;
&lt;li&gt;accelerating learning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As AI-assisted engineering continues to evolve, it will be exciting to see how tools like Kiro shape the future of software development.&lt;/p&gt;

</description>
      <category>kiro</category>
      <category>aws</category>
      <category>ai</category>
      <category>developer</category>
    </item>
    <item>
      <title>AWS Student Community Day Sri Lanka 2026 - Event Recap</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Thu, 30 Apr 2026 17:29:37 +0000</pubDate>
      <link>https://dev.to/naamiahmed/aws-student-community-day-sri-lanka-2026-event-recap-1fnp</link>
      <guid>https://dev.to/naamiahmed/aws-student-community-day-sri-lanka-2026-event-recap-1fnp</guid>
      <description>&lt;p&gt;AWS Student Community Day is a one day, student led conference, organized by AWS Cloud Clubs for the community. It is a great way to bringing an AWS conference into your university.&lt;/p&gt;

&lt;p&gt;AWS Student Community Day Sri Lanka 2026 was co-organized by AWS Cloud Club at University of Kelaniya and AWS Cloud Club at ITUM. The event had 14 speakers and over 200 student attendees. It was a full day of community building and learning for the students.&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%2F949ar6dkpj53gt69v7fu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F949ar6dkpj53gt69v7fu.jpeg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created this article based on how we prepared to host this event.&lt;/p&gt;

&lt;p&gt;The approach I took was first I made an organizing committee of student enthusiast who would like to work towards this event. The first OC meeting was taken 45 days before the planned event day.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web page
&lt;/h3&gt;

&lt;p&gt;This is one of the first things you are going to need. It's up to you whether you create your own or use some template. We used a template from AWS Community Day China and asked lovable to generate a similar one. Then we customized it to our needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Registation
&lt;/h3&gt;

&lt;p&gt;We used to local ticketing platform called MyTickets to track registrations and generate QR codes for attendees.&lt;/p&gt;

&lt;h3&gt;
  
  
  Call for speakers and sponsors
&lt;/h3&gt;

&lt;p&gt;We used two google forms, one for speakers and the other for sponsors to call for them. We attached the sponsorship prospectus in the form calling for sponsors.&lt;/p&gt;

&lt;p&gt;Based on my past experience hosting events, I learnt that each member in a team needs to know their responsibilities clearly. To ensure this, I created a document laying out the responsibilities that each role would have before I called in for applications for the OC. In this way every team member was aware of their responsibilities.&lt;/p&gt;

&lt;p&gt;We took meetings each week and made a plan for the following week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Free or paid
&lt;/h3&gt;

&lt;p&gt;The community day organizers are always dealing with this one... and there is no right or wrong way. Both have pros and cons.&lt;/p&gt;

&lt;p&gt;Paid Event - Even symbolic price can reduce the no-shows (ratio between registered and the ones that actually showed-up) and increase the budget you get. But there is a chance you have to pay taxes, as you are creating the profit.&lt;/p&gt;

&lt;p&gt;Free Event - Prepare yourself for a no-shows... 😬 It's frustrating, but it is what is is.&lt;/p&gt;

&lt;p&gt;We decided to go with paid.&lt;/p&gt;

&lt;p&gt;All being said, organizing AWS Student Community Day was a lot of fun, but also lots of hard work went into it. It took us 3 months of work, from idea that we are doing that, to the actual event.&lt;/p&gt;

&lt;p&gt;If you are still thinking if to do it or not - by all means we say Yes, go for it! 😉&lt;/p&gt;

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

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

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

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

</description>
      <category>aws</category>
      <category>studentcommunityday</category>
      <category>srilanka</category>
      <category>leadership</category>
    </item>
    <item>
      <title>How to Prevent Unnecessary Charges on AWS: Free Billing Alerts for Beginners</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Fri, 14 Nov 2025 15:15:34 +0000</pubDate>
      <link>https://dev.to/naamiahmed/how-to-prevent-unnecessary-charges-on-aws-free-billing-alerts-for-beginners-1g4</link>
      <guid>https://dev.to/naamiahmed/how-to-prevent-unnecessary-charges-on-aws-free-billing-alerts-for-beginners-1g4</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;AWS is one of the most popular cloud platforms, but beginners often get surprised by unexpected charges. Luckily, AWS provides free tools to monitor your spending and prevent unnecessary costs. In this article, we will guide you step by step to set up free billing alerts, understand usage limits, and stay safe while learning AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target Audience:&lt;/strong&gt; Beginners who want to avoid surprises in their AWS billing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Enable AWS Billing Alerts (Free)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before creating alerts, you must enable billing alerts in your account. This allows AWS to track your usage and send notifications if you approach your free tier or budget limits.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to AWS Management Console.&lt;/li&gt;
&lt;li&gt;Go to Billing &amp;amp; Cost Management → Billing Preferences.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Receive Free Tier Usage Alerts – This sends alerts when you are nearing the free tier limits, so you can avoid accidental charges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click Save to activate this alert.&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%2Ffg3cu080a6zj4tso3tfu.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%2Ffg3cu080a6zj4tso3tfu.png" alt="Billing Preferences page" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create an AWS Budget Alert (Free)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The AWS Budget feature allows you to define a spending limit and get email notifications when your usage reaches specific thresholds. This gives beginners more control and peace of mind while learning.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Billing → Budgets → Create Budget.&lt;/li&gt;
&lt;li&gt;Choose Cost Budget and set your monthly limit (for example, $2 USD). This is the maximum you are willing to spend in a month.&lt;/li&gt;
&lt;li&gt;Add alert thresholds to receive notifications at 50%, 80%, and 100% of your budget. Each alert warns you before reaching the full limit.&lt;/li&gt;
&lt;li&gt;Add your email address for notifications and click Save.&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%2Fk65rrgxxka7okme5el0y.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%2Fk65rrgxxka7okme5el0y.png" alt="Create Budget page" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Tip: Always use email notifications, as SMS alerts may incur small charges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Enable Cost Explorer (Optional, Free)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Cost Explorer helps you visualize your spending over time. By tracking daily usage and costs, you can better understand which services may contribute to charges and make adjustments before they become an issue.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Billing → Cost Explorer.&lt;/li&gt;
&lt;li&gt;Click Enable to activate the tool. Once enabled, you can view your usage in graphs and tables.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Safe to use (Free):&lt;/p&gt;

&lt;p&gt;IAM (users &amp;amp; permissions) – Manage access without creating cost.&lt;/p&gt;

&lt;p&gt;Billing dashboard &amp;amp; CloudWatch billing alerts – Free tools to monitor your usage.&lt;/p&gt;

&lt;p&gt;AWS Budgets &amp;amp; Cost Explorer – Tools to track spending and visualize data for free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Additional Tips to Stay Safe&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Regularly check Free Tier usage: Even small services can exceed limits if forgotten. Monitoring usage helps avoid surprises.&lt;/li&gt;
&lt;li&gt;Use tags to track resources: Tags make it easy to identify and manage resources, especially if you try multiple services at once.&lt;/li&gt;
&lt;li&gt;Delete resources you are not using: Unused resources, like instances or storage, can lead to unexpected charges.&lt;/li&gt;
&lt;li&gt;Monitor daily billing with Cost Explorer: Keeping an eye on daily costs helps you react before reaching your budget.&lt;/li&gt;
&lt;li&gt;Set low budgets initially: Beginners can start with $1–$2 per month to test alerts and get familiar with AWS billing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Setting up AWS billing alerts is simple, free, and essential for beginners. By combining budget alerts, free tier alerts, and monitoring tools, you can confidently explore AWS without worrying about unexpected charges. Adding screenshots and visuals in your article or video will make these steps even clearer and more engaging for beginners.&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%2Fz14pbf3ujj2y3ra8eu2o.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz14pbf3ujj2y3ra8eu2o.jpeg" alt="Thanks for Reading" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>free</category>
      <category>bill</category>
    </item>
    <item>
      <title>🎮 Building a Mini Tic-Tac-Toe Game Using Amazon Q Developer and Python</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Mon, 10 Nov 2025 14:51:56 +0000</pubDate>
      <link>https://dev.to/naamiahmed/building-a-mini-tic-tac-toe-game-using-amazon-q-developer-and-python-4de2</link>
      <guid>https://dev.to/naamiahmed/building-a-mini-tic-tac-toe-game-using-amazon-q-developer-and-python-4de2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Artificial Intelligence (AI) is becoming more accessible for developers to integrate into their projects. Amazon Q Developer is a powerful AI coding assistant from AWS that helps developers generate, debug, and improve code directly inside their IDE.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk you through a practical example: creating a mini Tic-Tac-Toe game in Python using Amazon Q Developer. This will give you hands-on experience with AI-assisted coding while exploring how AWS’s developer tools work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 What is Amazon Q Developer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q Developer is an AI-powered coding assistant integrated into IDEs like VS Code.&lt;br&gt;
It helps developers by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating or explaining code.&lt;/li&gt;
&lt;li&gt;Suggesting fixes or optimizations.&lt;/li&gt;
&lt;li&gt;Improving documentation and refactoring logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s part of AWS’s effort to make development more intelligent and cloud-ready.&lt;br&gt;
You can also use Amazon Q Business (for enterprise workflows) or Q Developer (for coding).&lt;/p&gt;

&lt;p&gt;Free Usage: The Developer (Free) tier gives you full AI assistance inside VS Code without any extra cost — perfect for personal learning or experiments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Step 1: Environment Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Python 3.10+ on your computer. &lt;/li&gt;
&lt;li&gt;Install VS Code.&lt;/li&gt;
&lt;li&gt;Add the Amazon Q Developer extension in VS Code.&lt;/li&gt;
&lt;li&gt;Sign in using your AWS Builder ID.&lt;/li&gt;
&lt;li&gt;Create a project folder:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TicTacToe-Q
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Create a file named:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💻 &lt;strong&gt;Step 2: Writing a Simple Tic-Tac-Toe Game&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with a simple console-based Python version (If you want, you can start the code generation using Amazon Q):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import tkinter as tk
import random

# --- Basic Setup ---
root = tk.Tk()
root.title("Tic Tac Toe - Amazon Q AI")
root.configure(bg='#2c3e50')
root.geometry('400x500')

# Game variables
board = [""] * 9
player = "X"
game_active = True

# --- AI Functions ---
def ai_move():
    # Try to win
    for i in range(9):
        if board[i] == "":
            board[i] = "O"
            if check_winner() == "O":
                return i
            board[i] = ""

    # Block player from winning
    for i in range(9):
        if board[i] == "":
            board[i] = "X"
            if check_winner() == "X":
                board[i] = ""
                return i
            board[i] = ""

    # Take center if available
    if board[4] == "":
        return 4

    # Take corners
    corners = [0, 2, 6, 8]
    available_corners = [i for i in corners if board[i] == ""]
    if available_corners:
        return random.choice(available_corners)

    # Take any available spot
    available = [i for i in range(9) if board[i] == ""]
    return random.choice(available) if available else None

# --- Functions ---
def check_winner():
    wins = [(0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6)]
    for a,b,c in wins:
        if board[a] == board[b] == board[c] != "":
            return board[a]
    if "" not in board:
        return "Draw"
    return None

def show_winner_overlay(winner):
    if winner == "Draw":
        winner_overlay.config(text="🤝 It's a Draw!", fg='#95a5a6')
    else:
        symbol = "🎉" if winner == "X" else "🤖"
        player_name = "You" if winner == "X" else "AI"
        color = '#e74c3c' if winner == 'X' else '#f39c12'
        winner_overlay.config(text=f"{symbol} {player_name} ({winner}) Wins!", fg=color)
    winner_overlay.place(relx=0.5, rely=0.4, anchor='center')
    restart_overlay_btn.place(relx=0.5, rely=0.55, anchor='center')
    reset_button.grid_remove()

def reset_game():
    global board, player, game_active
    board = [""] * 9
    player = "X"
    game_active = True
    winner_overlay.place_forget()
    restart_overlay_btn.place_forget()
    reset_button.grid(row=5, column=0, columnspan=3, pady=15)
    for btn in buttons:
        btn.config(text="", bg='#34495e', fg='white')
    status_label.config(text="Your Turn (X)", fg='#3498db')

def update_button_color(btn, symbol):
    if symbol == "X":
        btn.config(fg='#e74c3c', bg='#ecf0f1')
    else:
        btn.config(fg='#f39c12', bg='#ecf0f1')

def click_button(i):
    global player, game_active
    if board[i] == "" and game_active and player == "X":
        board[i] = player
        buttons[i].config(text=player)
        update_button_color(buttons[i], player)

        winner = check_winner()
        if winner:
            game_active = False
            show_winner_overlay(winner)
            return

        # AI turn
        player = "O"
        status_label.config(text="AI is thinking...", fg='#f39c12')
        root.after(500, ai_turn)

def ai_turn():
    global player, game_active
    if game_active:
        move = ai_move()
        if move is not None:
            board[move] = "O"
            buttons[move].config(text="O")
            update_button_color(buttons[move], "O")

            winner = check_winner()
            if winner:
                game_active = False
                show_winner_overlay(winner)
                return

            player = "X"
            status_label.config(text="Your Turn (X)", fg='#3498db')

# --- Create UI ---
title_label = tk.Label(root, text="🎮 Tic Tac Toe AI", font=("Arial", 18, "bold"), 
                      bg='#2c3e50', fg='#ecf0f1')
title_label.grid(row=0, column=0, columnspan=3, pady=10)

buttons = []
for i in range(9):
    btn = tk.Button(root, text="", width=6, height=3, font=("Arial", 24, "bold"),
                    bg='#34495e', fg='white', relief='raised', bd=3,
                    command=lambda i=i: click_button(i))
    btn.grid(row=i//3+1, column=i%3, padx=5, pady=5)
    buttons.append(btn)

status_label = tk.Label(root, text="Your Turn (X)", font=("Arial", 16), 
                       bg='#2c3e50', fg='#3498db')
status_label.grid(row=4, column=0, columnspan=3, pady=10)

reset_button = tk.Button(root, text="🔄 New Game", font=("Arial", 12, "bold"),
                        bg='#27ae60', fg='white', relief='raised', bd=2,
                        command=reset_game)
reset_button.grid(row=5, column=0, columnspan=3, pady=15)

# Winner overlay (hidden initially)
winner_overlay = tk.Label(root, text="", font=("Arial", 20, "bold"),
                         bg='#2c3e50', relief='solid', bd=2, padx=20, pady=10)

# Restart button for winner overlay (hidden initially)
restart_overlay_btn = tk.Button(root, text="🔄 Play Again", font=("Arial", 12, "bold"),
                               bg='#e67e22', fg='white', relief='raised', bd=2,
                               command=reset_game)

root.mainloop()


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this code (click Run ▶️ at the top or press F5) once to make sure it works fine.&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;Step 4: Installing Amazon Q in VS Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before starting your project, you need the Amazon Q Developer extension in VS Code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open VS Code.&lt;/li&gt;
&lt;li&gt;Go to the Extensions panel (click the square icon on the left sidebar or press Ctrl + Shift + X).
3.In the search bar, type:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Amazon Q Developer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Click Install on the extension.&lt;/li&gt;
&lt;li&gt;After installation, sign in using your AWS Builder ID (or create one if you don’t have it).
6.You’ll now see the Amazon Q panel on the side of VS Code.
This is where you can:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Chat with Amazon Q.&lt;/li&gt;
&lt;li&gt;Generate or improve code.&lt;/li&gt;
&lt;li&gt;Ask for explanations of your Python scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Now your VS Code is ready to use Amazon Q for interactive AI coding.&lt;/p&gt;

&lt;p&gt;🤖 &lt;strong&gt;Step 4: Using Amazon Q to Improve the Game&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that your base version works, let’s make it more advanced using Amazon Q.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Inside VS Code:&lt;br&gt;
Open Amazon Q Chat (Ctrl + Shift + P → Amazon Q: Chat).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask questions like:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;“Convert this Tic-Tac-Toe game to GUI using Tkinter.”&lt;/li&gt;
&lt;li&gt;“Add AI logic so the computer can play automatically.”&lt;/li&gt;
&lt;li&gt;“Refactor this into object-oriented Python code.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon Q will generate improved snippets or even a full new version of your code.&lt;br&gt;
You can directly replace or merge suggestions.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q Developer is a promising tool from AWS that brings AI into your coding workflow.&lt;br&gt;
While it may seem a little complex to set up, it offers great educational value — especially for those who plan to grow their skills in the AWS ecosystem.&lt;/p&gt;

&lt;p&gt;Starting with a small project like Tic-Tac-Toe is a fun and practical way to understand how AI-assisted coding can help you improve your logic, refactor code, and experiment confidently.&lt;/p&gt;

&lt;p&gt;Keep exploring — and maybe your next project could integrate AWS Lambda or DynamoDB with your game! ☁️🎮&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Thank You for Reading 🙌🙌🙌&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ai</category>
      <category>python</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Thu, 02 Oct 2025 02:34:28 +0000</pubDate>
      <link>https://dev.to/naamiahmed/-251d</link>
      <guid>https://dev.to/naamiahmed/-251d</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/naamiahmed" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2461034%2Fc98ff73b-cf88-4fb8-8711-fa19e86e846b.jpeg" alt="naamiahmed"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/naamiahmed/become-an-aws-cloud-club-captain-sri-lanka-2025-23nb" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Become an AWS Cloud Club Captain – Sri Lanka 2025&lt;/h2&gt;
      &lt;h3&gt;Naami Ahmed ・ Oct 1&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Become an AWS Cloud Club Captain – Sri Lanka 2025</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Wed, 01 Oct 2025 13:33:53 +0000</pubDate>
      <link>https://dev.to/naamiahmed/become-an-aws-cloud-club-captain-sri-lanka-2025-23nb</link>
      <guid>https://dev.to/naamiahmed/become-an-aws-cloud-club-captain-sri-lanka-2025-23nb</guid>
      <description>&lt;p&gt;Cloud is shaping the future of technology, and students around the world are stepping up to lead this change. The AWS Cloud Club Captain program is an initiative by Amazon Web Services that empowers students to build and grow their own tech communities. As a Captain, you don’t just learn cloud — you share knowledge, organize events, and become the face of AWS on your campus.&lt;/p&gt;

&lt;p&gt;For students in Sri Lanka, this is a chance to stand out as a leader in the growing cloud ecosystem and open doors to new opportunities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📅 Application Deadline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application deadline has been extended to October 6th, 2025. If you are passionate about technology, leadership, and community building, now is the best time to apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who Can Apply?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To be eligible for the program, you must be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A university or institute student who is currently enrolled.&lt;/li&gt;
&lt;li&gt;Someone who will graduate after October 2026.&lt;/li&gt;
&lt;li&gt;Interested in leadership, community building, and cloud technologies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The program is designed for students who want to go beyond personal learning and create a bigger impact by supporting peers and driving cloud adoption on campus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Become a Cloud Club Captain?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Being a Captain is more than just a title. It’s an opportunity to grow your technical and leadership skills while connecting with a global network of students and professionals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some of the key benefits include&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Certification Vouchers: Captains receive exam vouchers to pursue industry-recognized AWS certifications.&lt;/li&gt;
&lt;li&gt;AWS Credits: Hands-on learning is supported through credits to explore AWS services.&lt;/li&gt;
&lt;li&gt;Recognition Badges: Captains can earn Bronze, Silver, Gold, and Platinum badges as they progress and achieve milestones.&lt;/li&gt;
&lt;li&gt;Networking Opportunities: Gain access to AWS experts, professionals, and other captains worldwide.&lt;/li&gt;
&lt;li&gt;Leadership Development: From organizing workshops to leading hackathons, you will build skills that strengthen both your resume and confidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The value of this program is not just in the resources, but in the real-world leadership experience and the strong community connections you build along the way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Process&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application is designed to help AWS understand your passion, leadership potential, and vision. It consists of three main parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Written Application&lt;br&gt;
You will be asked to answer questions about your background, leadership journey, and ideas for growing a student cloud community. This is your chance to share your story and vision.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Video Submission&lt;br&gt;
A short (2–3 minute) video introducing yourself and explaining why you want to become a Cloud Club Captain. Keep it natural, authentic, and enthusiastic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Faculty Support Letter&lt;br&gt;
A recommendation letter from a faculty member is required to confirm your suitability and support your application.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After preparing these, you can submit them directly through the AWS Cloud Club Captain application portal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters for Sri Lanka&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sri Lanka’s tech landscape is growing rapidly, and cloud skills are in high demand. Programs like AWS Cloud Clubs give students the platform to gain skills, share knowledge, and contribute to the country’s future workforce.&lt;/p&gt;

&lt;p&gt;Captains play a vital role in this ecosystem — bringing together students, organizing events, and creating opportunities that go beyond the classroom. By stepping into this role, you are not only helping yourself, but also shaping the next generation of cloud leaders in Sri Lanka.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re a student graduating after October 2026, this is your opportunity to take the lead and make an impact. The AWS Cloud Club Captain program combines learning, leadership, and community in one platform.&lt;/p&gt;

&lt;p&gt;📅 Deadline: October 6th, 2025&lt;br&gt;
📹 Watch my application video here: &lt;a href="https://youtu.be/VbGNlV9Mqog?si=Zfgv627rbSNIq6qy" rel="noopener noreferrer"&gt;https://youtu.be/VbGNlV9Mqog?si=Zfgv627rbSNIq6qy&lt;/a&gt;&lt;br&gt;
🔗 Apply here: &lt;a href="https://pulse.aws/application/TAWKU3CJ?p=0" rel="noopener noreferrer"&gt;https://pulse.aws/application/TAWKU3CJ?p=0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s build the future of cloud in Sri Lanka, together. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Host a Static Website on AWS S3 — Complete Step-by-Step Guide</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Tue, 01 Jul 2025 13:30:58 +0000</pubDate>
      <link>https://dev.to/naamiahmed/how-to-host-a-static-website-on-aws-s3-complete-step-by-step-guide-4cgf</link>
      <guid>https://dev.to/naamiahmed/how-to-host-a-static-website-on-aws-s3-complete-step-by-step-guide-4cgf</guid>
      <description>&lt;p&gt;Hosting a website no longer requires a complex server setup or expensive infrastructure. If you’re looking for a quick, reliable, and low-cost way to publish your HTML/CSS/JavaScript site, then Amazon S3 is your best friend. In this article, I’ll guide you through the complete process of hosting a static website on AWS S3, and we’ll also include a live demo at each key step to make things easy to follow.&lt;/p&gt;

&lt;p&gt;** What is Amazon S3?**&lt;br&gt;
Amazon Simple Storage Service (S3) is a highly scalable object storage service offered by AWS. It allows you to store and retrieve any amount of data from anywhere on the internet. From backups and application data to static websites and image hosting, S3 is a powerful tool used by developers and businesses worldwide.&lt;/p&gt;

&lt;p&gt;With built-in redundancy, versioning, encryption, and fine-grained access control, S3 is more than just a file storage system — it’s an enterprise-level solution. For this article, we’ll focus on one of its most practical features: hosting static websites.&lt;/p&gt;

&lt;p&gt;🌍** Why Use S3 to Host a Website?**&lt;br&gt;
There are many reasons why S3 is perfect for hosting static sites:&lt;/p&gt;

&lt;p&gt;No server management: You don’t need to worry about Apache, Nginx, or scaling.&lt;br&gt;
Highly reliable and durable: 99.999999999% durability ensures your files are safe.&lt;br&gt;
Cheap or even free (with the AWS Free Tier).&lt;br&gt;
Fast performance, especially when combined with AWS CloudFront (CDN).&lt;br&gt;
Perfect for portfolios, landing pages, resumes, and documentation websites.&lt;/p&gt;

&lt;p&gt;🛠️ Prerequisites&lt;br&gt;
Before you begin, make sure you have the following:&lt;/p&gt;

&lt;p&gt;A working AWS account (the free tier is sufficient).&lt;br&gt;
A static website ready to upload. This could be your personal portfolio or a sample HTML/CSS project.&lt;br&gt;
IAM (Identity and Access Management) user credentials — avoid using the root account for safety.&lt;br&gt;
🧭 Overview: 5 Key Steps to Host a Website on S3&lt;br&gt;
Here’s what we’ll be doing in this tutorial:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an S3 bucket&lt;/li&gt;
&lt;li&gt;Upload the website files&lt;/li&gt;
&lt;li&gt;Enable public access&lt;/li&gt;
&lt;li&gt;Set a bucket policy&lt;/li&gt;
&lt;li&gt;Enable static website hosting
Let’s dive in.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;📦 Step 1: Create an S3 Bucket&lt;/strong&gt;&lt;br&gt;
After logging in to your AWS Management Console, search for S3 using the top search bar. Click on the S3 service and then click the “Create bucket” button.&lt;/p&gt;

&lt;p&gt;You’ll be prompted to enter a unique bucket name (bucket names must be globally unique). Choose your preferred AWS region (like Asia Pacific — Mumbai) and leave most settings at their default.&lt;/p&gt;

&lt;p&gt;Click Create bucket, and you’re done! You’ve just created a cloud storage container that will hold your website files.&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%2Flxqksdhh3jm23n92htn0.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%2Flxqksdhh3jm23n92htn0.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📁 Step 2: Upload Website Files&lt;/strong&gt;&lt;br&gt;
Next, open your newly created bucket and click on the “Upload” button. You’ll need to upload your static website files — typically index.html, along with folders for CSS, images, and JavaScript.&lt;/p&gt;

&lt;p&gt;It’s important to keep your folder structure consistent so your site behaves the same after upload. Start by uploading the root-level files (like index.html), then add folders like /css, /img, or /js.&lt;/p&gt;

&lt;p&gt;Once all files and folders are selected, click Upload and wait until the upload succeeds.&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%2Fb3a6bpgvdm6tc0ko6fsd.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%2Fb3a6bpgvdm6tc0ko6fsd.png" alt=" " width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔓 Step 3: Enable Public Access&lt;/strong&gt;&lt;br&gt;
By default, all files and buckets in S3 are private. To allow users to access your website, you must enable public access to the bucket.&lt;/p&gt;

&lt;p&gt;To do this, go to the Permissions tab of your bucket. Click Edit under “Block public access,” uncheck “Block all public access,” and then confirm your change. AWS may prompt you to type a confirmation statement to avoid accidental misconfiguration.&lt;/p&gt;

&lt;p&gt;Once this is saved, your bucket is now publicly accessible — but we still need to set permissions for each file. That’s where the next step comes in.&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%2Fn2juwrxcv1ot250cml06.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%2Fn2juwrxcv1ot250cml06.png" alt=" " width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📝 Step 4: Set a Bucket Policy&lt;/strong&gt;&lt;br&gt;
Now let’s configure a bucket policy — a JSON-based configuration that defines who can access your bucket and what actions they can perform.&lt;/p&gt;

&lt;p&gt;In the Permissions tab, scroll down to Bucket policy, click Edit, and paste this policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to replace "your-bucket-name" with your actual bucket name. This policy gives the public read-only access to all files in your bucket — exactly what we need for a static website.&lt;/p&gt;

&lt;p&gt;Save the policy to apply the settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Step 5: Enable Static Website Hosting&lt;/strong&gt;&lt;br&gt;
Now for the final touch — let’s tell AWS to serve this bucket as a website.&lt;/p&gt;

&lt;p&gt;Go to the Properties tab of your bucket and scroll down to find Static website hosting. Click Edit, then enable the setting.&lt;/p&gt;

&lt;p&gt;You’ll need to provide the name of your entry file, usually index.html. You can leave the error document field empty or add error.html if your site has one.&lt;/p&gt;

&lt;p&gt;Click Save changes, and AWS will generate a public URL for your website in the format:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ttp://your-bucket-name.s3-website.region.amazonaws.com/&lt;/code&gt;&lt;br&gt;
Open this link in your browser — and voila! Your website is live and accessible to the world.&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%2Fubrya122i3qkyz3bnmxv.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%2Fubrya122i3qkyz3bnmxv.png" alt=" " width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;🏁 Final Result&lt;/strong&gt;&lt;br&gt;
At this point, you’ve completed all the essential steps to host a website on Amazon S3:&lt;/p&gt;

&lt;p&gt;You created a secure bucket&lt;br&gt;
Uploaded all required files&lt;br&gt;
Set public access and policies&lt;br&gt;
Enabled static website hosting&lt;br&gt;
Received a live link to your project&lt;br&gt;
You can now share this link with clients, friends, or on your resume. And next time someone asks how to host a simple website, you’ll be ready!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Pro Tips (Optional but Helpful)&lt;/strong&gt;&lt;br&gt;
Use IAM roles instead of root access for better security and monitoring.&lt;br&gt;
Enable versioning on your bucket to track changes and recover deleted files.&lt;br&gt;
Connect a custom domain via Route 53, and add CloudFront for global speed boost.&lt;br&gt;
If needed, create CI/CD pipelines to auto-upload files using GitHub Actions or AWS CLI.&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%2F15lm4v9rb4vddx6x6owl.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15lm4v9rb4vddx6x6owl.jpeg" alt=" " width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>⚠️ What Happens to Your AWS RDS Instances After Account Suspension? Author: Naami Ahmed</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Fri, 27 Jun 2025 04:38:29 +0000</pubDate>
      <link>https://dev.to/naamiahmed/what-happens-to-your-aws-rds-instances-after-account-suspensionauthor-naami-ahmed-456c</link>
      <guid>https://dev.to/naamiahmed/what-happens-to-your-aws-rds-instances-after-account-suspensionauthor-naami-ahmed-456c</guid>
      <description>&lt;p&gt;Have you ever wondered what happens to your AWS resources if your account gets suspended—especially your RDS databases?&lt;/p&gt;

&lt;p&gt;Recently, I encountered a situation where an AWS account was suspended due to billing issues. After reactivation, some services were still there—like EC2 and VPC—but surprisingly, the RDS database instances were missing. This led me to investigate why RDS behaves differently from other services during suspension.&lt;/p&gt;

&lt;p&gt;In this blog post, I’ll explain what I learned, how RDS is treated differently, and what you can do to protect your data.&lt;/p&gt;

&lt;p&gt;🔍 AWS Account Suspension: What Actually Happens?&lt;br&gt;
When AWS suspends your account—usually because of unpaid bills—it restricts your access to most services. However, not all resources behave the same way.&lt;/p&gt;

&lt;p&gt;Let’s break it down:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ EC2 and VPC Resources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2 instances are stopped, not terminated.&lt;/li&gt;
&lt;li&gt;VPC configurations (like subnets, route tables, security groups) remain intact.&lt;/li&gt;
&lt;li&gt;After reactivating the account, EC2 instances can be restarted manually—or automatically if configured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So far, so good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠️ RDS Resources (The Catch)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon RDS (Relational Database Service) behaves differently from EC2. Here’s what I found:&lt;/li&gt;
&lt;li&gt;RDS is fully managed, meaning AWS handles the infrastructure, maintenance, and operations.&lt;/li&gt;
&lt;li&gt;During account suspension, AWS may automatically delete RDS instances, typically within 3–7 days of the suspension.&lt;/li&gt;
&lt;li&gt;There’s no fixed public retention policy from AWS for RDS after suspension.&lt;/li&gt;
&lt;li&gt;AWS might delete these instances earlier to free up storage and reduce management cost, since databases require persistent storage and monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This behavior can lead to permanent data loss if you’re not prepared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💾 Can You Recover the Deleted RDS Database?&lt;/strong&gt;&lt;br&gt;
Yes—but only if you had backups. There are two ways this could save you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automated Backups: If you enabled automated backups, AWS retains daily backups for a defined retention period (usually 7–35 days).&lt;/li&gt;
&lt;li&gt;Manual Snapshots: If you manually created DB snapshots, you can restore from them any time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you restore from a backup or snapshot, a new RDS instance is created, and that means:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;➡️ The database endpoint (URL) changes.&lt;br&gt;
➡️ All connected apps must be updated with the new endpoint.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you don’t have any backups or snapshots? Unfortunately, there’s no way to recover the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 Best Practices to Avoid RDS Surprises&lt;/strong&gt;&lt;br&gt;
To stay safe and avoid losing your databases, follow these tips:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Enable Automated Backups&lt;/strong&gt;&lt;br&gt;
Make sure every RDS instance has automated backups turned on with a suitable retention period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Take Regular Manual Snapshots&lt;/strong&gt;&lt;br&gt;
Automated backups can disappear after account issues. Snapshots are manual and can be kept longer—even after deletion of the instance.&lt;/p&gt;

&lt;p&gt;**3. Use CloudWatch Billing Alerts&lt;br&gt;
**Set up AWS Billing alerts to get notified when your usage charges increase or when you’re at risk of suspension.&lt;/p&gt;

&lt;p&gt;**4. Keep a Recovery Checklist&lt;br&gt;
**When recovering from account suspension or restoring a DB:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirm that backups exist.&lt;/li&gt;
&lt;li&gt;Note the new endpoint.&lt;/li&gt;
&lt;li&gt;Update connection strings in your applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Document Your Incident Recovery Plan&lt;/strong&gt;&lt;br&gt;
Have a disaster recovery plan ready—especially if your app depends heavily on RDS. A simple document can save hours of troubleshooting.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Nginx Configuration on AWS EC2 Deployment</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Sun, 13 Apr 2025 15:42:56 +0000</pubDate>
      <link>https://dev.to/naamiahmed/nginx-configuration-on-aws-ec2-deployment-4fbd</link>
      <guid>https://dev.to/naamiahmed/nginx-configuration-on-aws-ec2-deployment-4fbd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cjflma7habx3si6ef3q.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%2F9cjflma7habx3si6ef3q.png" alt=" " width="800" height="308"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;This guide explains how to configure an EC2 instance, install Nginx, and set up auto deployment using GitHub Actions for a UAT environment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ 1. Create EC2 Instance&lt;/strong&gt;&lt;br&gt;
Steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login to AWS Console → Go to EC2 Dashboard.&lt;/li&gt;
&lt;li&gt;Launch Instance → Choose Amazon Linux 2 as your OS.&lt;/li&gt;
&lt;li&gt;Configure basic settings like name, instance type, and network settings.&lt;/li&gt;
&lt;li&gt;Create/Use Key Pair → This key will be used later for SSH connection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In the Security Group, allow:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Port 22 (SSH): For connecting remotely to EC2.&lt;/li&gt;
&lt;li&gt;Port 80 (HTTP): For regular web traffic.&lt;/li&gt;
&lt;li&gt;Port 443 (HTTPS): For secure (SSL) web traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;br&gt;
Security groups act like a firewall. Opening ports allows your instance to communicate with the internet properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 2. Connect to EC2 via SSH&lt;/strong&gt;&lt;br&gt;
Windows Users (PowerShell using OpenSSH):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh -i "path/to/your-key.pem" ec2-user@&amp;lt;your-ec2-public-ip&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;br&gt;
This command connects your local computer to the EC2 instance using the .pem key. You need this to log in securely.&lt;/p&gt;

&lt;p&gt;⚙️ 3. Install and Configure Nginx&lt;br&gt;
For Amazon Linux 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo yum update -y
sudo amazon-linux-extras enable nginx1
sudo yum install nginx -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Ubuntu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nginx -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start Nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start nginx
sudo systemctl enable nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🧪 Check Nginx:&lt;/strong&gt;&lt;br&gt;
Open a browser and visit &lt;code&gt;http://&amp;lt;your-ec2-public-ip&amp;gt;&lt;/code&gt; – You should see the default Nginx welcome page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;br&gt;
Nginx is a web server used to serve your frontend app. We’re installing and starting it here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ 4. Configure Nginx to Serve Your App&lt;/strong&gt;&lt;br&gt;
Create New Config File:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/nginx/conf.d/app-proxy.conf

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample Config (Generic):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
    listen 80;
    server_name your-subdomain.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your-subdomain.example.com;
    root /usr/share/nginx/html/your-app-folder;
    index index.html;

    location / {
        try_files $uri /index.html;
    }

    error_page 404 /404.html;

    ssl_certificate /etc/letsencrypt/live/your-domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain/privkey.pem;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First block: Redirects HTTP to HTTPS.&lt;/li&gt;
&lt;li&gt;Second block: Serves the app using SSL (HTTPS).&lt;/li&gt;
&lt;li&gt;root: The directory where your built frontend app files are copied.&lt;/li&gt;
&lt;li&gt;try_files &lt;code&gt;$uri /index.html&lt;/code&gt;: This is for frontend routing support (like React or Angular apps).&lt;/li&gt;
&lt;li&gt;SSL certs are from Let's Encrypt (set up using Certbot separately).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Test and Restart Nginx:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nginx -t
sudo systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🚀 5. Auto Deployment Using GitHub Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In your GitHub repo, create folder: &lt;code&gt;.github/workflows/&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Inside it, add a file: deploy-uat.yml&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub Actions Example:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Deploy Frontend App to EC2 with Nginx

on:
  push:
    branches:
      - deploy

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 20

      - name: Install Dependencies
        run: npm ci --legacy-peer-deps

      - name: Build App
        env:
          CI: false
        run: |
          npm run build
          ls -l build/

      - name: Archive Build Folder
        run: tar -czf build.tar.gz -C build .

      - name: Deploy to EC2
        run: |
          echo "${{ secrets.SSH_PRIVATE_KEY }}" &amp;gt; my-key
          chmod 600 my-key
          scp -i my-key -o StrictHostKeyChecking=no build.tar.gz ec2-user@&amp;lt;EC2_PUBLIC_IP&amp;gt;:/usr/share/nginx/html/your-app-folder/

      - name: Extract Build on EC2
        run: |
          ssh -i my-key -o StrictHostKeyChecking=no ec2-user@&amp;lt;EC2_PUBLIC_IP&amp;gt; &amp;lt;&amp;lt; EOF
            cd /usr/share/nginx/html/your-app-folder/
            if [ -f build.tar.gz ]; then
              tar -xzf build.tar.gz
              rm build.tar.gz
              echo "Deployment successful!"
            else
              echo "Error: build.tar.gz not found!"
              exit 1
            fi
          EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger: Runs when you push to the deploy branch.&lt;/li&gt;
&lt;li&gt;Build: Installs dependencies and builds the frontend app.&lt;/li&gt;
&lt;li&gt;Archive: Compresses the build files.&lt;/li&gt;
&lt;li&gt;Upload: Sends the files to the EC2 server using scp.&lt;/li&gt;
&lt;li&gt;Extract: Unzips files on EC2 to serve them with Nginx.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔐 &lt;strong&gt;Use GitHub Secrets:&lt;/strong&gt;&lt;br&gt;
To avoid hardcoding private keys, store them as GitHub repository secrets like &lt;code&gt;SSH_PRIVATE_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 6. Test Auto Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Make a small change in your frontend code.&lt;br&gt;
Push to deploy branch.&lt;br&gt;
Check GitHub → Actions tab to monitor the workflow.&lt;br&gt;
Visit your subdomain or EC2 public IP to confirm the changes are live.&lt;/p&gt;

</description>
      <category>nginx</category>
      <category>webtesting</category>
      <category>aws</category>
      <category>github</category>
    </item>
    <item>
      <title>Automating AWS RDS Management Using IAM, Lambda, CloudWatch, and EventBridge</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Sun, 09 Mar 2025 08:30:29 +0000</pubDate>
      <link>https://dev.to/naamiahmed/automating-aws-rds-management-using-iam-lambda-cloudwatch-and-eventbridge-2l47</link>
      <guid>https://dev.to/naamiahmed/automating-aws-rds-management-using-iam-lambda-cloudwatch-and-eventbridge-2l47</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k6u9pl0th66yqhsn9cg.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%2F0k6u9pl0th66yqhsn9cg.png" alt="WorkFlow " width="720" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In cloud computing, cost and resource optimization are critical for efficient infrastructure management. AWS provides various services that help automate database management, enhance security, and ensure high availability. This article explores how to automate Amazon RDS instance management using AWS IAM, Lambda, CloudWatch, and EventBridge. We will walk through a common scenario, benefits, and implementation steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Common Scenario&lt;/strong&gt;: Managing RDS Instance Availability
&lt;/h2&gt;

&lt;p&gt;Many organizations use Amazon RDS for databases, but keeping instances running 24/7 can be costly. To optimize costs, businesses prefer running their RDS instances only during business hours. This scenario requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Starting RDS at 6 AM IST&lt;/strong&gt; (before business hours begin).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stopping RDS at 6 PM IST&lt;/strong&gt; (after business hours end).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automating the process&lt;/strong&gt; to avoid manual intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring performance and logs&lt;/strong&gt; to track execution and troubleshoot issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. IAM (Identity and Access Management)&lt;/strong&gt;IAM is used to define permissions for the Lambda function to start and stop RDS instances securely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Lambda (Serverless Compute Function)&lt;/strong&gt;AWS Lambda helps execute the function that starts and stops RDS instances based on a predefined schedule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. CloudWatch (Monitoring and Logging)&lt;/strong&gt;CloudWatch is used to capture logs, monitor execution, and track failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. EventBridge (Automated Scheduling)&lt;/strong&gt;Amazon EventBridge (formerly CloudWatch Events) triggers the Lambda function based on a cron schedule, ensuring automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow: Automating RDS Start and Stop
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create an IAM Role for Lambda&lt;/strong&gt; with permissions to start and stop RDS instances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a Lambda Function&lt;/strong&gt; to check the time and perform the necessary action (start/stop RDS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Up EventBridge Rules&lt;/strong&gt; to schedule the function execution (6 AM IST &amp;amp; 6 PM IST).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Execution Logs using CloudWatch&lt;/strong&gt; to ensure proper functioning.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 1: Create an IAM Role for Lambda&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Go to the AWS IAM Console.&lt;br&gt;
&lt;strong&gt;2.&lt;/strong&gt; Create a new role with the following policies&lt;br&gt;
&lt;strong&gt;3.&lt;/strong&gt; AmazonRDSFullAccess (or custom policy with StartDBInstance &amp;amp; StopDBInstance permissions).&lt;br&gt;
&lt;strong&gt;4.&lt;/strong&gt; AWSLambdaBasicExecutionRole (for CloudWatch logging)&lt;br&gt;
&lt;strong&gt;5.&lt;/strong&gt; Attach this role to the Lambda function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Write the Lambda Function&lt;/strong&gt;&lt;br&gt;
This function will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch the current time in IST.&lt;/li&gt;
&lt;li&gt;Determine if it’s a weekday and within working hours.&lt;/li&gt;
&lt;li&gt;Start or stop the RDS instance accordingly
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3
import datetime
from dateutil import tz
import logging
import os
# Configure logging
logging.basicConfig(level=logging.INFO)
# AWS RDS Client
region = os.getenv("AWS_REGION", "us-east-1")  # Default to 'us-east-1' if not set
rds = boto3.client('rds', region_name=region)
# Configurable Tags (Default: Empty Dict)
REQUIRED_TAGS = {
    os.getenv("TAG_KEY", "Environment"): os.getenv("TAG_VALUE", "Production")
}
# Configurable Timezone (Default: UTC)
TIMEZONE = tz.gettz(os.getenv("TIMEZONE", "UTC"))
def get_tagged_rds_instances():
    """Fetches RDS instances with required tags."""
    try:
        instances = rds.describe_db_instances()['DBInstances']
        tagged_instances = []
for db in instances:
            tags = rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
            tag_dict = {tag['Key']: tag['Value'] for tag in tags}
# Check if all required tags match
            if all(REQUIRED_TAGS[key] == tag_dict.get(key, "") for key in REQUIRED_TAGS):
                tagged_instances.append(db['DBInstanceIdentifier'])
return tagged_instances
    except Exception as e:
        logging.error(f"Error fetching RDS instances: {str(e)}")
        return []
def lambda_handler(event, context):
    """Lambda function to start/stop RDS based on time and day."""
    now = datetime.datetime.now(tz=TIMEZONE)
    current_hour = now.hour
    current_day = now.weekday()
tagged_rds_instances = get_tagged_rds_instances()
for db_identifier in tagged_rds_instances:
        if 0 &amp;lt;= current_day &amp;lt;= 4:  # Weekdays (Monday-Friday)
            if 6 &amp;lt;= current_hour &amp;lt; 18:
                logging.info(f"Starting RDS {db_identifier}...")
                rds.start_db_instance(DBInstanceIdentifier=db_identifier)
            else:
                logging.info(f"Stopping RDS {db_identifier}...")
                rds.stop_db_instance(DBInstanceIdentifier=db_identifier)
        else:  # Weekends (Saturday-Sunday)
            logging.info(f"Stopping RDS {db_identifier} for the weekend...")
            rds.stop_db_instance(DBInstanceIdentifier=db_identifier)
return "Lambda execution completed."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Configure EventBridge Rules&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Amazon EventBridge.&lt;/li&gt;
&lt;li&gt;Create two rules:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start RDS at 6 AM IST:&lt;/strong&gt; cron(30 0 * * ? *) (UTC → 6:30 AM IST)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop RDS at 6 PM IST:&lt;/strong&gt; cron(30 12 * * ? *) (UTC → 6:30 PM IST)&lt;/li&gt;
&lt;li&gt;Set the target as the Lambda function.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Monitor Execution Using CloudWatch&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to CloudWatch Logs.&lt;/li&gt;
&lt;li&gt;Navigate to the log group for your Lambda function.&lt;/li&gt;
&lt;li&gt;Check execution details, errors, or any unexpected behaviors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Benefits of This Approach&lt;/strong&gt;&lt;br&gt;
✅ Cost Optimization — RDS instances run only when needed, reducing AWS costs.&lt;br&gt;
✅ Automation — Eliminates manual intervention and improves efficiency.&lt;br&gt;
✅ Security &amp;amp; Access Control — IAM roles restrict unnecessary access.&lt;br&gt;
✅ Monitoring &amp;amp; Logging — CloudWatch ensures visibility into function execution.&lt;br&gt;
✅ Scalability — Easily extend this setup for multiple RDS instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Automating Amazon RDS using IAM, Lambda, CloudWatch, and EventBridge is a powerful way to optimize cloud resources efficiently. By implementing this workflow, businesses can reduce costs, improve reliability, and maintain secure access control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This setup can be further enhanced by integrating SNS notifications for alerts or using AWS Systems Manager for more complex automation tasks.&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%2Fl2gm4c7r2ugcld67mz0h.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2gm4c7r2ugcld67mz0h.jpeg" alt="Thank You" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awsrds</category>
      <category>costoptimize</category>
      <category>programming</category>
    </item>
    <item>
      <title>AWS EC2 (Elastic Compute Cloud)</title>
      <dc:creator>Naami Ahmed</dc:creator>
      <pubDate>Sun, 05 Jan 2025 04:37:33 +0000</pubDate>
      <link>https://dev.to/naamiahmed/aws-ec2-elastic-compute-cloud-ka</link>
      <guid>https://dev.to/naamiahmed/aws-ec2-elastic-compute-cloud-ka</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Amazon EC2 (Elastic Compute Cloud) is a web service that provides resizable compute capacity in the cloud. It is designed to make web-scale cloud computing easier for developers by offering scalable, flexible, and cost-effective compute resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview of Amazon EC2&lt;/strong&gt;&lt;br&gt;
Elastic Compute Capacity: EC2 allows you to scale your compute capacity up or down based on your needs.&lt;br&gt;
Instances: Virtual servers for running applications. Instances can be launched in multiple regions and availability zones to ensure high availability.&lt;br&gt;
Instance Types: EC2 offers a variety of instance types optimized for different purposes, such as general-purpose, compute-optimized, memory-optimized, storage-optimized, and GPU instances.&lt;br&gt;
Pricing Models:&lt;/p&gt;

&lt;p&gt;On-Demand Instances: Pay for compute capacity by the hour or second with no long-term commitments.&lt;br&gt;
Reserved Instances: Purchase instances for a significant discount compared to On-Demand pricing.&lt;br&gt;
Spot Instances: Bid on spare EC2 capacity and run instances for even lower costs.&lt;br&gt;
Savings Plans: Flexible pricing model offering lower prices on EC2 usage in exchange for a commitment to a consistent amount of usage (measured in $/hour) for a 1- or 3-year term.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features of Amazon EC2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; EC2 allows you to automatically scale your infrastructure up or down based on demand using Auto Scaling.&lt;br&gt;
&lt;strong&gt;Flexibility:&lt;/strong&gt; Choose from a wide range of instance types to fit different use cases, ensuring optimal performance for your applications.&lt;br&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; EC2 instances are hosted in multiple locations worldwide, providing high availability and fault tolerance.&lt;br&gt;
&lt;strong&gt;Security:&lt;/strong&gt; EC2 integrates with AWS Identity and Access Management (IAM) to provide robust security features such as security groups, key pairs, and IAM roles.&lt;br&gt;
&lt;strong&gt;Networking:&lt;/strong&gt; Options include Virtual Private Cloud (VPC) for isolated networks, Elastic IP addresses for static IPs, and Elastic Load Balancing for distributing traffic across instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases for Amazon EC2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Web Hosting:&lt;/strong&gt; Run scalable and reliable web applications with the ability to handle varying levels of traffic.&lt;br&gt;
&lt;strong&gt;Big Data:&lt;/strong&gt; Process and analyze large datasets using EC2 instances optimized for high performance.&lt;br&gt;
&lt;strong&gt;Development and Testing:&lt;/strong&gt; Quickly create and scale environments for development and testing purposes.&lt;br&gt;
&lt;strong&gt;Machine Learning:&lt;/strong&gt; Train and deploy machine learning models on powerful GPU instances.&lt;br&gt;
Gaming: Host gaming servers with low latency and high availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of Amazon EC2&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Cost-Effective:&lt;/strong&gt; Only pay for the compute capacity you actually use, with options to save costs through Reserved Instances and Spot Instances.&lt;br&gt;
&lt;strong&gt;High Performance:&lt;/strong&gt; Choose from a variety of instance types optimized for specific workloads to ensure optimal performance.&lt;br&gt;
&lt;strong&gt;Global Reach:&lt;/strong&gt; Deploy instances in multiple regions worldwide, bringing your applications closer to your users.&lt;br&gt;
&lt;strong&gt;Secure:&lt;/strong&gt; Built-in security features and compliance certifications ensure your data and applications are protected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Amazon EC2 provides scalable, flexible, and cost-effective compute capacity in the cloud. By leveraging its features and following best practices, you can effectively manage and optimize your cloud infrastructure, ensuring high performance and security for your applications.&lt;/p&gt;

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