<?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: Muhammad Nadeem</title>
    <description>The latest articles on DEV Community by Muhammad Nadeem (@muhammad-nadeem).</description>
    <link>https://dev.to/muhammad-nadeem</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%2F4035722%2F1192293e-9bfa-435a-9278-83d400b1298a.jpg</url>
      <title>DEV Community: Muhammad Nadeem</title>
      <link>https://dev.to/muhammad-nadeem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammad-nadeem"/>
    <language>en</language>
    <item>
      <title>Build a Production-Ready Auto Scaling Infrastructure on AWS</title>
      <dc:creator>Muhammad Nadeem</dc:creator>
      <pubDate>Thu, 13 Aug 2026 11:56:13 +0000</pubDate>
      <link>https://dev.to/muhammad-nadeem/build-a-production-ready-auto-scaling-infrastructure-on-aws-4k49</link>
      <guid>https://dev.to/muhammad-nadeem/build-a-production-ready-auto-scaling-infrastructure-on-aws-4k49</guid>
      <description>&lt;h2&gt;
  
  
  **🚀 Introduction
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Auto Scaling is one of the most powerful features of AWS, but many beginners find it confusing. In this hands-on lab, you'll build a complete auto-scaling infrastructure from scratch and watch servers automatically scale up and down based on demand.&lt;/p&gt;

&lt;p&gt;By the end of this guide, you'll understand:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How EC2 Auto Scaling Groups work&lt;/li&gt;
&lt;li&gt;Load balancing and traffic distribution&lt;/li&gt;
&lt;li&gt;CloudWatch metrics and alarms&lt;/li&gt;
&lt;li&gt;Real-world scaling in action&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;🏗️ Architecture We're Building&lt;/p&gt;

&lt;p&gt;**┌─────────────────────────────────────────────────┐&lt;br&gt;
│            User Traffic (Internet)              │&lt;br&gt;
└────────────────────┬────────────────────────────┘&lt;br&gt;
                     │&lt;br&gt;
                     ▼&lt;br&gt;
        ┌────────────────────────┐&lt;br&gt;
        │   Application Load     │&lt;br&gt;
        │     Balancer (ALB)     │&lt;br&gt;
        └─────────┬──────────────┘&lt;br&gt;
                  │&lt;br&gt;
         ┌────────┴────────┐&lt;br&gt;
         │                 │&lt;br&gt;
         ▼                 ▼&lt;br&gt;
    ┌─────────┐       ┌─────────┐&lt;br&gt;
    │ Server  │       │ Server  │&lt;br&gt;
    │   #1    │       │   #2    │&lt;br&gt;
    │ (Port80)│       │ (Port80)│&lt;br&gt;
    └─────────┘       └─────────┘&lt;br&gt;
         │                 │&lt;br&gt;
         └────────┬────────┘&lt;br&gt;
                  │&lt;br&gt;
         Auto Scaling Group&lt;br&gt;
      (Manages server count)&lt;br&gt;
                  │&lt;br&gt;
         CloudWatch Monitoring&lt;br&gt;
      (Triggers scaling rules)&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1️⃣: Launch Your First EC2 Instance
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
This will be the template for our auto-scaling servers.&lt;/p&gt;

&lt;p&gt;1.1 Open AWS Console&lt;/p&gt;

&lt;p&gt;Navigate to: &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;https://console.aws.amazon.com&lt;/a&gt; → EC2 Dashboard&lt;/p&gt;

&lt;p&gt;1.2 Launch an Instance&lt;br&gt;
EC2 → Instances → Launch Instances&lt;br&gt;
1.3 Configure Instance Details&lt;/p&gt;

&lt;p&gt;Fill in these settings:&lt;/p&gt;

&lt;p&gt;Setting Value&lt;br&gt;
Name    MyWebServer&lt;br&gt;
AMI Amazon Linux 2 (Free tier)&lt;br&gt;
Instance Type   t2.micro&lt;br&gt;
Key Pair    Create new: my-keypair.pem&lt;br&gt;
Security Group  Allow SSH (22) + HTTP (80)&lt;br&gt;
Storage 8 GB (default)&lt;br&gt;
1.4 Add Startup Script&lt;/p&gt;

&lt;p&gt;In Advanced Details → User Data, paste this script:&lt;/p&gt;

&lt;p&gt;bash&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;yum update -y&lt;br&gt;
yum install -y httpd&lt;br&gt;
systemctl start httpd&lt;br&gt;
systemctl enable httpd&lt;/p&gt;

&lt;h1&gt;
  
  
  Create simple website
&lt;/h1&gt;

&lt;p&gt;echo "&lt;/p&gt;
&lt;h1&gt;Server: $(hostname -f)&lt;/h1&gt;" &amp;gt; /var/www/html/index.html&lt;br&gt;
echo "&lt;p&gt;CPU Load: $(uptime)&lt;/p&gt;" &amp;gt;&amp;gt; /var/www/html/index.html

&lt;p&gt;What this does:&lt;/p&gt;

&lt;p&gt;Updates system packages&lt;br&gt;
Installs Apache web server (httpd)&lt;br&gt;
Creates a simple HTML page showing server info&lt;br&gt;
1.5 Launch &amp;amp; Verify&lt;br&gt;
Click Launch Instance&lt;br&gt;
Wait 2-3 minutes for it to boot&lt;br&gt;
Note the Public IPv4 address&lt;br&gt;
Open in browser:&lt;a href="http://54.245.76.10" rel="noopener noreferrer"&gt;http://54.245.76.10&lt;/a&gt;&lt;br&gt;
_**&lt;/p&gt;

&lt;p&gt;Step 2️⃣: Create a Launch Template&lt;/p&gt;

&lt;p&gt;**_&lt;br&gt;
A Launch Template is like a blueprint that Auto Scaling will use to create new servers.&lt;/p&gt;

&lt;p&gt;2.1 Navigate to Launch Templates&lt;br&gt;
EC2 → Launch Templates → Create Launch Template&lt;br&gt;
2.2 Fill Template Details&lt;br&gt;
Name: MyWebServerTemplate&lt;br&gt;
Description: Web server with auto-startup&lt;br&gt;
AMI: Amazon Linux 2&lt;br&gt;
Instance Type: t2.micro&lt;br&gt;
Key Pair: my-keypair.pem&lt;br&gt;
Security Group: Allow HTTP + SSH&lt;br&gt;
2.3 Add User Data&lt;/p&gt;

&lt;p&gt;Paste the same startup script from Step 1.4:&lt;/p&gt;

&lt;p&gt;bash&lt;/p&gt;

&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;yum update -y&lt;br&gt;
yum install -y httpd&lt;br&gt;
systemctl start httpd&lt;br&gt;
systemctl enable httpd&lt;br&gt;
echo "&lt;/p&gt;
&lt;h1&gt;Server: $(hostname -f)&lt;/h1&gt;" &amp;gt; /var/www/html/index.html&lt;br&gt;
echo "&lt;p&gt;CPU Load: $(uptime)&lt;/p&gt;" &amp;gt;&amp;gt; /var/www/html/index.html&lt;br&gt;
2.4 Create Template

&lt;p&gt;Click Create Launch Template ✅&lt;/p&gt;

&lt;p&gt;What we accomplished:&lt;/p&gt;

&lt;p&gt;Template created that can spawn servers automatically&lt;br&gt;
All servers will have identical configuration&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3️⃣: Create a Target Group
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Target Groups tell the Load Balancer which servers to send traffic to.&lt;/p&gt;

&lt;p&gt;3.1 Navigate to Target Groups&lt;br&gt;
EC2 → Target Groups → Create Target Group&lt;br&gt;
3.2 Configure Target Group&lt;br&gt;
Name: MyWebServers&lt;br&gt;
Protocol: HTTP&lt;br&gt;
Port: 80&lt;br&gt;
VPC: Default&lt;br&gt;
3.3 Health Check Settings&lt;/p&gt;

&lt;p&gt;This is crucial - it monitors if servers are healthy:&lt;/p&gt;

&lt;p&gt;Protocol: HTTP&lt;br&gt;
Path: /&lt;br&gt;
Matcher: 200&lt;br&gt;
Interval: 30 seconds&lt;br&gt;
Timeout: 5 seconds&lt;br&gt;
Healthy threshold: 2&lt;br&gt;
Unhealthy threshold: 3&lt;/p&gt;

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

&lt;p&gt;Every 30 seconds, check if server responds with HTTP 200&lt;br&gt;
If 2 checks pass → server is healthy&lt;br&gt;
If 3 checks fail → server is unhealthy (remove from rotation)&lt;br&gt;
3.4 Create Target Group&lt;/p&gt;

&lt;p&gt;Click Create Target Group ✅&lt;/p&gt;

&lt;p&gt;What we accomplished:&lt;/p&gt;

&lt;p&gt;Created health monitoring for our servers&lt;br&gt;
Load Balancer will use this to route traffic&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;Step 4️⃣: Create Application Load Balancer&lt;br&gt;
**&lt;br&gt;
The Load Balancer distributes traffic across multiple servers.&lt;/p&gt;

&lt;p&gt;4.1 Navigate to Load Balancers&lt;br&gt;
EC2 → Load Balancers → Create Load Balancer&lt;br&gt;
4.2 Select Type&lt;br&gt;
Type: Application Load Balancer (ALB)&lt;br&gt;
4.3 Basic Configuration&lt;br&gt;
Name: MyALB&lt;br&gt;
Scheme: Internet-facing&lt;br&gt;
IP Type: IPv4&lt;br&gt;
4.4 Network Configuration&lt;br&gt;
VPC: Default VPC&lt;br&gt;
Subnets: Select ALL (minimum 2)&lt;br&gt;
4.5 Security Group&lt;br&gt;
Allow: HTTP (port 80) from 0.0.0.0/0&lt;br&gt;
4.6 Listener Configuration&lt;br&gt;
Protocol: HTTP&lt;br&gt;
Port: 80&lt;br&gt;
Forward to: MyWebServers (Target Group)&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;Step 5️⃣: Create Auto Scaling Group (The Main Event!)&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
This is where the magic happens!&lt;/p&gt;

&lt;p&gt;5.1 Navigate to Auto Scaling Groups&lt;br&gt;
EC2 → Auto Scaling Groups → Create Auto Scaling Group&lt;br&gt;
5.2 Select Launch Template&lt;br&gt;
Name: MyWebServers-ASG&lt;br&gt;
Launch Template: MyWebServerTemplate&lt;br&gt;
Version: Latest&lt;br&gt;
5.3 Network Configuration&lt;br&gt;
VPC: Default&lt;br&gt;
Subnets: Select ALL (minimum 2 different AZs)&lt;br&gt;
5.4 Load Balancer Settings&lt;br&gt;
✅ Enable load balancing&lt;br&gt;
Target Groups: MyWebServers&lt;br&gt;
5.5 Group Size (IMPORTANT!)&lt;br&gt;
Min Size: 1&lt;br&gt;
Desired Capacity: 2&lt;br&gt;
Max Size: 4&lt;/p&gt;

&lt;p&gt;What this means:&lt;/p&gt;

&lt;p&gt;Always keep minimum 1 server (no downtime)&lt;br&gt;
Normally run 2 servers (desired state)&lt;br&gt;
Never exceed 4 servers (cost control)&lt;br&gt;
5.6 Scaling Policies&lt;/p&gt;

&lt;p&gt;Select: Target Tracking Scaling Policy&lt;/p&gt;

&lt;p&gt;Scale UP Rule:&lt;br&gt;
Policy Name: ScaleUp&lt;br&gt;
Metric: Average CPU Utilization&lt;br&gt;
Target Value: 50%&lt;br&gt;
Instance Warmup: 300 seconds&lt;/p&gt;

&lt;p&gt;Meaning: If average CPU &amp;gt; 50%, launch more servers&lt;/p&gt;

&lt;p&gt;Scale DOWN Rule:&lt;br&gt;
Policy Name: ScaleDown&lt;br&gt;
Metric: Average CPU Utilization&lt;br&gt;
Target Value: 20%&lt;/p&gt;

&lt;p&gt;Meaning: If average CPU &amp;lt; 20%, remove servers&lt;/p&gt;

&lt;p&gt;5.7 Instance Maintenance&lt;br&gt;
Select: Mixed behavior (No policy)&lt;br&gt;
Healthy percentage: Min 90%, Max 110%&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6️⃣: Verify Everything is Running
&lt;/h2&gt;

&lt;p&gt;**6.1 Check Instances&lt;br&gt;
EC2 → Instances&lt;/p&gt;

&lt;p&gt;✅ Should see 2 instances launched automatically&lt;/p&gt;

&lt;p&gt;6.2 Check Load Balancer Health&lt;br&gt;
EC2 → Load Balancers → MyALB&lt;/p&gt;

&lt;p&gt;Note the DNS name, open in browser:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://MyALB-xxxx.us-west-2.elb.amazonaws.com" rel="noopener noreferrer"&gt;http://MyALB-xxxx.us-west-2.elb.amazonaws.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Should see your web page&lt;/p&gt;

&lt;p&gt;Refresh multiple times - you might see different servers responding!&lt;/p&gt;

&lt;p&gt;6.3 Check Auto Scaling Group Status&lt;br&gt;
EC2 → Auto Scaling Groups → MyWebServers-ASG&lt;br&gt;
Activity tab&lt;br&gt;
**&lt;/p&gt;

&lt;p&gt;Step 7️⃣: Simulate Traffic &amp;amp; Watch It Scale! 🎯&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
This is the most exciting part!&lt;/p&gt;

&lt;p&gt;7.1 Connect to an Instance via SSH&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  First, make sure your key has correct permissions
&lt;/h1&gt;

&lt;p&gt;chmod 400 ~/Downloads/my-keypair.pem&lt;/p&gt;

&lt;h1&gt;
  
  
  Connect to instance
&lt;/h1&gt;

&lt;p&gt;ssh -i ~/Downloads/my-keypair.pem &lt;a href="mailto:ec2-user@54.245.76.10"&gt;ec2-user@54.245.76.10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or use EC2 Instance Connect in AWS Console (easier!)&lt;/p&gt;

&lt;p&gt;7.2 Simulate High CPU Load&lt;/p&gt;

&lt;p&gt;Once connected, run:&lt;/p&gt;

&lt;p&gt;bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Create CPU load
&lt;/h1&gt;

&lt;p&gt;yes &amp;gt; /dev/null &amp;amp;&lt;br&gt;
yes &amp;gt; /dev/null &amp;amp;&lt;br&gt;
yes &amp;gt; /dev/null &amp;amp;&lt;/p&gt;

&lt;p&gt;⏱️ Watch the Magic Happen:&lt;/p&gt;

&lt;p&gt;Open CloudWatch → Dashboards&lt;br&gt;
Monitor CPU Utilization metric&lt;br&gt;
Wait 2-3 minutes...&lt;/p&gt;

&lt;p&gt;What you'll see:&lt;/p&gt;

&lt;p&gt;CPU usage climbs above 50% 📈&lt;br&gt;
CloudWatch triggers scaling policy&lt;br&gt;
A new server automatically launches! 🚀&lt;br&gt;
Instance count changes from 2 → 3&lt;br&gt;
Time 0:00   → 2 servers (normal)&lt;br&gt;
Time 2:00   → CPU spikes (&amp;gt;50%)&lt;br&gt;
Time 3:00   → CloudWatch detects high CPU&lt;br&gt;
Time 4:00   → Scaling policy triggered&lt;br&gt;
Time 5:00   → New server launched! 3rd instance appears&lt;br&gt;
Time 6:00   → Load distributes across 3 servers&lt;br&gt;
7.3 Watch It Scale Down&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Kill the load generators
&lt;/h1&gt;

&lt;p&gt;killall yes&lt;/p&gt;

&lt;p&gt;⏳ Wait 5 minutes...&lt;/p&gt;

&lt;p&gt;CPU drops below 20%&lt;br&gt;
CloudWatch triggers scale-down policy&lt;br&gt;
Extra server automatically terminates! ✂️&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8️⃣: Monitor Everything in CloudWatch
&lt;/h2&gt;

&lt;p&gt;**8.1 Open CloudWatch&lt;br&gt;
AWS Console → CloudWatch → Dashboards&lt;br&gt;
8.2 Create Custom Dashboard (Optional)&lt;/p&gt;

&lt;p&gt;Track these metrics:&lt;/p&gt;

&lt;p&gt;CPU Utilization (average across ASG)&lt;br&gt;
Network In/Out&lt;br&gt;
Desired/Running instance count&lt;br&gt;
8.3 Check Auto Scaling Activity&lt;br&gt;
EC2 → Auto Scaling Groups → MyWebServers-ASG → Activity&lt;/p&gt;

&lt;p&gt;See all scaling events in log:&lt;/p&gt;

&lt;p&gt;2024-08-13 16:30:00 | Launching 1 new instance&lt;br&gt;
2024-08-13 16:35:00 | Terminating 1 instance&lt;/p&gt;

&lt;p&gt;THUMBNAIL OF A LAB &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/..." class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/..." alt="Uploading image" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>autoscali</category>
      <category>ec2</category>
    </item>
    <item>
      <title>Monitering EC2 instance</title>
      <dc:creator>Muhammad Nadeem</dc:creator>
      <pubDate>Sat, 25 Jul 2026 19:29:00 +0000</pubDate>
      <link>https://dev.to/muhammad-nadeem/monitering-ec2-instance-598p</link>
      <guid>https://dev.to/muhammad-nadeem/monitering-ec2-instance-598p</guid>
      <description>&lt;h2&gt;
  
  
  TASK 1: Configure Amazon SNS 📧
&lt;/h2&gt;

&lt;p&gt;Objective&lt;/p&gt;

&lt;p&gt;Create an Amazon SNS topic and subscribe to email notifications for alerts.&lt;/p&gt;

&lt;p&gt;What is Amazon SNS?&lt;br&gt;
Full Name: Amazon Simple Notification Service&lt;br&gt;
Type: Fully managed messaging service&lt;br&gt;
Use Case: Application-to-Application (A2A) and Application-to-Person (A2P) communication&lt;br&gt;
Purpose: Send real-time notifications via email, SMS, HTTP, SQS, Lambda, etc.&lt;/p&gt;

&lt;p&gt;Lab tasks content summary · MD&lt;br&gt;
AWS CloudWatch Monitoring Lab - Complete Task Content 📋&lt;br&gt;
Overview&lt;/p&gt;

&lt;p&gt;This lab teaches how to set up a complete monitoring solution on AWS that detects CPU spikes and sends automatic email alerts.&lt;/p&gt;

&lt;p&gt;TASK 1: Configure Amazon SNS 📧&lt;br&gt;
Objective&lt;/p&gt;

&lt;p&gt;Create an Amazon SNS topic and subscribe to email notifications for alerts.&lt;/p&gt;

&lt;p&gt;What is Amazon SNS?&lt;br&gt;
Full Name: Amazon Simple Notification Service&lt;br&gt;
Type: Fully managed messaging service&lt;br&gt;
Use Case: Application-to-Application (A2A) and Application-to-Person (A2P) communication&lt;br&gt;
Purpose: Send real-time notifications via email, SMS, HTTP, SQS, Lambda, etc.&lt;br&gt;
Steps Completed:&lt;br&gt;
Step 1: Navigate to SNS&lt;br&gt;
AWS Console → Search Bar → Type "SNS" → Click "Simple Notification Service"&lt;br&gt;
Step 2: Create SNS Topic&lt;br&gt;
Location: Simple Notification Service Console&lt;br&gt;
Action: Left Menu (☰) → Topics → Create topic&lt;/p&gt;

&lt;p&gt;Configuration:&lt;br&gt;
├─ Type: Standard (selected)&lt;br&gt;
├─ Name: MyCwAlarm&lt;br&gt;
└─ Create topic (button clicked)&lt;/p&gt;

&lt;p&gt;Result: Topic "MyCwAlarm" successfully created&lt;br&gt;
Step 3: Create Email Subscription&lt;br&gt;
Location: MyCwAlarm Topic Details Page&lt;br&gt;
Action: Subscriptions Tab → Create subscription&lt;/p&gt;

&lt;p&gt;Configuration:&lt;br&gt;
├─ Topic ARN: arn:aws:sns:us-west-2:xxx:MyCwAlarm (auto-filled)&lt;br&gt;
├─ Protocol: Email (selected from dropdown)&lt;br&gt;
├─ Endpoint: [Your Email Address]&lt;br&gt;
└─ Create subscription (button clicked)&lt;/p&gt;

&lt;p&gt;Status: "Pending confirmation"&lt;br&gt;
Step 4: Confirm Email Subscription&lt;br&gt;
Email Received: AWS Notification - Subscription Confirmation&lt;br&gt;
Action: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check email inbox&lt;/li&gt;
&lt;li&gt;Open AWS notification email&lt;/li&gt;
&lt;li&gt;Click "Confirm subscription" link&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result: Status changed to "Confirmed"&lt;br&gt;
Backend: SNS topic now linked to email address&lt;br&gt;
What This Accomplished:&lt;/p&gt;

&lt;p&gt;✅ Created messaging topic&lt;br&gt;
✅ Linked email address to topic&lt;br&gt;
✅ Verified email subscription&lt;br&gt;
✅ Ready to send email alerts&lt;/p&gt;

&lt;p&gt;Key Takeaway:&lt;/p&gt;

&lt;p&gt;SNS acts as a bridge between AWS services (CloudWatch) and end users (your email). When alarms trigger, SNS automatically sends notifications to subscribers.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  TASK 2: Create CloudWatch Alarm 🚨
&lt;/h2&gt;

&lt;p&gt;Objective&lt;br&gt;
**&lt;/p&gt;

&lt;p&gt;Configure a CloudWatch alarm to monitor EC2 CPU utilization and trigger when threshold is exceeded.&lt;/p&gt;

&lt;p&gt;What is CloudWatch?&lt;br&gt;
Full Name: Amazon CloudWatch&lt;br&gt;
Type: Monitoring and observability service&lt;br&gt;
Purpose: Monitor applications, systems, and AWS resources&lt;br&gt;
Data Types: Logs, Metrics, Events&lt;br&gt;
Users: DevOps Engineers, SREs, IT Managers, Developers&lt;/p&gt;

&lt;h2&gt;
  
  
  TASK 3: Stress Test EC2 Instance ⚡
&lt;/h2&gt;

&lt;p&gt;Objective&lt;/p&gt;

&lt;p&gt;Run CPU stress test to simulate high load and verify alarm triggers correctly.&lt;/p&gt;

&lt;p&gt;Why Stress Test?&lt;br&gt;
Simulates malware/attack scenarios&lt;br&gt;
Tests alarm responsiveness&lt;br&gt;
Validates monitoring system&lt;br&gt;
Ensures notifications deliver&lt;br&gt;
Security testing practice&lt;/p&gt;

&lt;p&gt;TASK 4: Create CloudWatch Dashboard 📊&lt;br&gt;
Objective&lt;/p&gt;

&lt;p&gt;Create a customizable dashboard to visualize CPU utilization metrics in one place.&lt;/p&gt;

&lt;p&gt;What is a CloudWatch Dashboard?&lt;br&gt;
Purpose: Centralized monitoring interface&lt;br&gt;
Customizable: Add/remove widgets&lt;br&gt;
Multi-region: Monitor resources across regions&lt;br&gt;
Real-time: Live metric updates&lt;br&gt;
Widgets: Graphs, numbers, alarms, logs&lt;br&gt;
Use Case: Quick overview for team monitoring&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2nhjq1ylbtkg2zbgwq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2nhjq1ylbtkg2zbgwq4.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;┌────────────────────────────────────────────────────────┐&lt;br&gt;
│                 AWS Monitoring System                  │&lt;br&gt;
├────────────────────────────────────────────────────────┤&lt;br&gt;
│                                                        │&lt;br&gt;
│  ┌──────────────────────────────────────────────┐    │&lt;br&gt;
│  │        EC2 Instance (Stress Test)            │    │&lt;br&gt;
│  │  ┌──────────────────────────────────────┐   │    │&lt;br&gt;
│  │  │  Application/CPU Process             │   │    │&lt;br&gt;
│  │  │  Stress Tool: 100% CPU Load          │   │    │&lt;br&gt;
│  │  └──────────────────────────────────────┘   │    │&lt;br&gt;
│  └────────────┬─────────────────────────────────┘    │&lt;br&gt;
│               │ (Emits metrics)                       │&lt;br&gt;
│               ↓                                        │&lt;br&gt;
│         ┌──────────────┐                             │&lt;br&gt;
│         │  CloudWatch  │                             │&lt;br&gt;
│         │  (Monitoring)│                             │&lt;br&gt;
│         └──────┬───────┘                             │&lt;br&gt;
│                │ (Metric: CPUUtilization)            │&lt;br&gt;
│                │ (Comparison: 95.2% &amp;gt; 60%)           │&lt;br&gt;
│                ↓                                      │&lt;br&gt;
│         ┌──────────────┐                             │&lt;br&gt;
│         │    Alarm     │                             │&lt;br&gt;
│         │  (Triggered) │                             │&lt;br&gt;
│         └──────┬───────┘                             │&lt;br&gt;
│                │ (IN ALARM state)                    │&lt;br&gt;
│                ↓                                      │&lt;br&gt;
│         ┌──────────────┐                             │&lt;br&gt;
│         │  SNS Topic   │                             │&lt;br&gt;
│         │  (MyCwAlarm) │                             │&lt;br&gt;
│         └──────┬───────┘                             │&lt;br&gt;
│                │ (Message routing)                   │&lt;br&gt;
│                ↓                                      │&lt;br&gt;
│         ┌──────────────┐                             │&lt;br&gt;
│         │ Email Alert  │                             │&lt;br&gt;
│         │ Subscriber   │                             │&lt;br&gt;
│         └──────┬───────┘                             │&lt;br&gt;
│                │                                      │&lt;br&gt;
│                ↓                                      │&lt;br&gt;
│         ┌──────────────┐                             │&lt;br&gt;
│         │  Your Email  │                             │&lt;br&gt;
│         │    Inbox     │ ✉️ Notification             │&lt;br&gt;
│         └──────────────┘                             │&lt;br&gt;
│                                                      │&lt;br&gt;
│  Dashboard Display:                                  │&lt;br&gt;
│  ┌──────────────────────────────────────────────┐   │&lt;br&gt;
│  │  LabEC2Dashboard                             │   │&lt;br&gt;
│  │  ┌──────────────────────────────────────┐   │   │&lt;br&gt;
│  │  │ CPUUtilization Graph                 │   │   │&lt;br&gt;
│  │  │        ╱╲                            │   │   │&lt;br&gt;
│  │  │      ╱    ╲                          │   │   │&lt;br&gt;
│  │  │    ╱        ╲                        │   │   │&lt;br&gt;
│  │  │  ╱────────────╲───────              │   │   │&lt;br&gt;
│  │  └──────────────────────────────────────┘   │   │&lt;br&gt;
│  └──────────────────────────────────────────────┘   │&lt;br&gt;
│                                                      │&lt;br&gt;
└────────────────────────────────────────────────────────┘&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudwatch</category>
      <category>monitoring</category>
      <category>devops</category>
    </item>
    <item>
      <title>Scanning AWS Lambda for Vulnerabilities with Amazon Inspector</title>
      <dc:creator>Muhammad Nadeem</dc:creator>
      <pubDate>Mon, 20 Jul 2026 19:10:27 +0000</pubDate>
      <link>https://dev.to/muhammad-nadeem/scanning-aws-lambda-for-vulnerabilities-with-amazon-inspector-305m</link>
      <guid>https://dev.to/muhammad-nadeem/scanning-aws-lambda-for-vulnerabilities-with-amazon-inspector-305m</guid>
      <description>&lt;p&gt;Recently completed a hands-on lab on using &lt;strong&gt;Amazon Inspector&lt;/strong&gt; to scan AWS Lambda functions for vulnerabilities — here's a quick summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Scenario
&lt;/h2&gt;

&lt;p&gt;A team is building a new application using AWS Lambda and needs an automated way to catch vulnerabilities — not just in dependencies, but within the code itself, right after every deployment.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;1. Activated Amazon Inspector&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigated to Amazon Inspector in the AWS Console&lt;/li&gt;
&lt;li&gt;Activated the service for the account, which automatically enabled scanning for EC2, ECR, and AWS Lambda&lt;/li&gt;
&lt;li&gt;Waited until the dashboard showed Lambda function coverage at 100%&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;2. Reviewed the Findings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opened "All findings" and found three vulnerabilities reported at Medium severity&lt;/li&gt;
&lt;li&gt;Selected the finding &lt;strong&gt;CVE-2023-32681 - requests&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Checked the Vulnerability details, including a link to the National Vulnerability Database (NVD) for more context&lt;/li&gt;
&lt;li&gt;Reviewed the Remediation section, which flagged the &lt;code&gt;requests&lt;/code&gt; package as outdated and recommended an upgrade&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;3. Remediated the Vulnerability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opened the affected Lambda function (&lt;code&gt;get-request&lt;/code&gt;) in the Lambda console&lt;/li&gt;
&lt;li&gt;Edited the &lt;code&gt;requirements.txt&lt;/code&gt; file, removing the pinned version (&lt;code&gt;requests==2.20.0&lt;/code&gt;) so it just read &lt;code&gt;requests&lt;/code&gt; — ensuring the latest secure version installs automatically&lt;/li&gt;
&lt;li&gt;Deployed the updated function&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>claude</category>
      <category>lambda</category>
    </item>
  </channel>
</rss>
