Monitor an EC2 Instance with CloudWatch

Set up CloudWatch alarms and SNS email alerts to monitor an EC2 instance.

Introduction

30 Second Summary

Imagine your website goes down at 2 AM and nobody notices until customers start complaining the next morning. In the real world, cloud teams avoid this by setting up automated monitoring that watches their servers and sends instant alerts when something goes wrong.

In this project, you will build a complete monitoring pipeline on AWS. You'll launch a server, set up alarms that watch its health, and wire up email notifications that alert you the moment something breaks.

What You'll Build

A cloud monitoring setup that watches an EC2 instance with CloudWatch alarms and delivers email alerts through SNS, plus a real-time dashboard to visualize instance health at a glance.

By the end of this project, you'll have:

  • A running EC2 instance monitored by CloudWatch with alarms on CPU utilization and status checks.
  • An SNS topic with an email subscription that delivers notifications when alarms trigger.
  • A custom CloudWatch dashboard visualizing CPU, network, and status metrics in real time.
  • Secret Mission: Add a billing alarm that alerts you if estimated charges exceed $5.

Are there any prerequisites?

You need an existing AWS account with console access. No additional tools or software are required. This is a console-only project.

Set Up a Budget Alert

Before launching any cloud resources, you need a safety net that warns you about unexpected charges.

AWS Budgets lets you create spending alerts that notify you by email the moment your account incurs a charge. In this step, you'll create a zero-spend budget so you're protected from day one.

In this step, get ready to:
  • Create a zero-spend budget in AWS Budgets.
  • Verify the budget is active and monitoring your account.
Create a zero-spend budget

A zero-spend budget sends you an email alert if any charge at all appears on your AWS account. This means you'll know immediately if something costs money during this project.

  • In the AWS Management Console, click the search bar at the top of the page.
  • Type Budgets and select AWS Budgets from the search results.
  • Click Create budget at the top of the page.
  • Under Budget setup, select Use a template (simplified).
  • Under Templates, choose Zero spend budget.
  • In the Budget name field, enter CCP-Project-Budget.
  • In the Email recipients field, enter your email address.
  • Click Create budget.

What is a zero-spend budget?

The Zero spend budget template is designed to notify you the moment your account spends anything beyond the AWS Free Tier. It sets the budget amount to $0.01, so any charge at all triggers an alert.

This is perfect for learning projects where you want to stay aware of costs without having to constantly check your billing page.

Verify the budget is active

Now confirm that your budget is ready to monitor your account.

  • After creating the budget, you'll be taken back to the Budgets overview page.
  • Look for CCP-Project-Budget in your budgets list.
  • Confirm its status shows Normal.

What does Normal status mean?

A status of Normal means your spending is within the budget threshold. Since you set a zero-spend budget and haven't launched any paid resources yet, Normal is exactly what you should see.

If your account ever incurs a charge, the status changes and you'll receive an email notification.

Don't see your budget listed?

Make sure you clicked Create budget at the end of the workflow. If you navigated away before clicking it, the budget won't be saved.

If you see a permissions error, your IAM user may not have billing access. The account root user can always access Budgets.

help me fix a permissions error when creating a budget in AWS

Your cost safety net is in place. Next up, you'll launch the EC2 instance that this budget will be watching over.

Launch an EC2 Instance

Your budget safety net is in place. Now it's time to launch the virtual server that you'll monitor throughout this project.

An EC2 instance is a virtual machine running in the AWS cloud. You'll launch one, confirm it's healthy, and then explore the built-in metrics that CloudWatch collects automatically.

In this step, get ready to:
  • Launch a t3.micro EC2 instance in us-east-1.
  • Verify the instance passes both status checks.
  • Explore the default CloudWatch monitoring metrics.
Launch a t3.micro instance

You'll create a single EC2 instance that serves as the target for all the monitoring and alerting you'll build in later steps.

  • In the AWS Management Console, use the search bar at the top to search for EC2.
  • Select EC2 from the results to open the EC2 dashboard.
  • Click Launch instance (the orange button near the top of the page).

The Launch an instance page opens with several configuration sections. Fill them out as follows:

  • Under Name and tags, enter MonitorMe-CCP in the Name field.
  • Under Application and OS Images (Amazon Machine Image), keep Amazon Linux selected (Quick Start). Confirm that Amazon Linux 2023 AMI is shown and it says Free tier eligible.
  • Under Instance type, select t3.micro from the dropdown. This is Free tier eligible for all AWS accounts.
  • Under Key pair (login), select Proceed without a key pair (Not recommended) from the dropdown. You won't need SSH access via a key pair for this project.
  • Under Network settings, keep the default VPC and the default security group. No changes needed here.
  • Leave all other settings at their defaults.
  • Click Launch instance at the bottom of the page.

What is an AMI?

An AMI (Amazon Machine Image) is a template that contains the operating system and software your instance runs. Amazon Linux 2023 is AWS's own lightweight Linux distribution, optimized for cloud workloads.

Choosing Proceed without a key pair is fine here because you'll connect later using EC2 Instance Connect (a browser-based terminal) instead of traditional SSH with a key file.

You should see a green success banner confirming the instance is launching.

  • Click View all instances (or navigate to Instances in the left sidebar) to go to your Instances list.
Verify the instance is running

Before you can monitor an instance, it needs to be fully healthy. EC2 runs two automated status checks on every instance to confirm this.

  • In the Instances list, find MonitorMe-CCP.
  • Wait for the Instance state column to show Running.
  • Wait for the Status check column to show 2/2 checks passed. This can take 2-3 minutes after launch.

What does 2/2 checks passed mean?

EC2 runs two automated health checks on every running instance. The first is a system status check that monitors the underlying AWS hardware. The second is an instance status check that monitors your instance's software and network connectivity.

When both pass (2/2), it means the physical host is healthy AND your instance's operating system booted correctly. This is the green light that your instance is ready.

Still seeing Initializing?

Status checks can take up to 5 minutes to complete after launch. Refresh the page by clicking the refresh icon (circular arrow) at the top of the Instances list. If the status still shows Initializing after 5 minutes, wait another minute and refresh again.

Why is my EC2 instance stuck in Initializing status?

Explore basic monitoring metrics

Every EC2 instance automatically sends performance metrics to CloudWatch at no extra charge. These are the metrics you'll build alarms on in the next steps.

  • Click on the instance name MonitorMe-CCP to open its detail page.
  • Click the Monitoring tab near the bottom of the page.

You should see several metric graphs. The most important ones for this project are:

  • CPUUtilization measures how busy the instance's processor is (as a percentage).
  • NetworkIn and NetworkOut track the volume of network traffic flowing in and out of the instance.
  • StatusCheckFailed reports whether either of the two status checks has failed (0 means both are passing).

Why are the graphs mostly empty?

EC2 basic monitoring sends metrics every 5 minutes. Since you just launched the instance, only one or two data points exist so far. The graphs will fill in over the next 15-20 minutes as more data arrives.

Basic monitoring is completely free. Detailed monitoring (1-minute intervals) costs extra and is not needed for this project.

What is the shared responsibility model?

The two status checks demonstrate a core CCP exam concept. AWS is responsible for the system check (hardware, networking, hypervisor). You are responsible for the instance check (your OS configuration, software, and connectivity).

Monitoring both sides is how teams maintain full visibility into application health. The alarms you'll build next automate this monitoring.

Your instance is running and reporting metrics to CloudWatch. Next up, you'll create an SNS topic so that when your alarms detect a problem, they have somewhere to send a notification.

Create an SNS Topic and Email Subscription

Your EC2 instance is running and sending metrics to CloudWatch every 5 minutes. But metrics alone don't help if nobody is watching the dashboard at the moment something goes wrong.

You need a way to push alerts to your inbox the instant a problem is detected. Amazon SNS (Simple Notification Service) is AWS's messaging service that delivers notifications to subscribers. In this step, you'll create an SNS topic and subscribe your email so alarms can reach you automatically.

In this step, get ready to:
  • Create a Standard SNS topic called EC2-Alerts-CCP.
  • Subscribe your email address to the topic.
  • Confirm the subscription from your inbox.
Create the SNS topic

An SNS topic is a communication channel that groups subscribers together. When a message is published to the topic, every subscriber receives it.

  • In the AWS Management Console search bar at the top, type SNS and select Simple Notification Service.
  • In the left navigation pane, click Topics.
  • Click Create topic.
  • For Type, select Standard.
  • For Name, enter EC2-Alerts-CCP.
  • Leave all other settings at their defaults.
  • Click Create topic at the bottom of the page.

You should now see the topic detail page for EC2-Alerts-CCP with its ARN displayed at the top.

What is an SNS topic?

Think of a topic as a mailing list. Anyone who subscribes to the list receives every message sent to it. In this project, CloudWatch alarms will publish messages to this topic, and your email subscription will deliver those messages to your inbox.

The Standard type delivers messages in best-effort order and supports email, SMS, HTTP, and other protocols. The alternative (FIFO) is designed for strict ordering between applications. Standard is the right choice for alert notifications.

Don't see the Topics page?

Make sure you're in the us-east-1 (N. Virginia) region. Check the region selector in the top-right corner of the console. Your SNS topic must be in the same region as your EC2 instance.

help me find the SNS Topics page in the AWS console

Subscribe your email to the topic

The topic exists, but it has no subscribers yet. You need to add your email address so that messages published to this topic arrive in your inbox.

  • On the EC2-Alerts-CCP topic detail page, click Create subscription.
  • For Protocol, select Email.
  • For Endpoint, enter your personal email address (the one you can check right now).
  • Click Create subscription.

You should see the subscription listed with a status of PendingConfirmation. SNS will not deliver messages until you confirm.

Why does SNS require confirmation?

SNS requires email confirmation to prevent someone from subscribing another person's address without their consent. This is a security measure that ensures only the email owner can opt in to notifications.

Confirm the subscription from your inbox
  • Open your email inbox (the address you just entered).
  • Look for an email with the subject line AWS Notification - Subscription Confirmation from no-reply@sns.amazonaws.com.
  • Click the Confirm subscription link inside the email.
  • A browser tab opens showing a confirmation page with your subscription ID.
  • Return to the SNS console. Navigate to Subscriptions in the left pane.
  • Verify that your subscription's Status column now shows Confirmed.

Don't see the confirmation email?

Check your spam or junk folder. The email comes from no-reply@sns.amazonaws.com and some email providers filter it automatically.

If you still can't find it after a few minutes, return to the SNS Subscriptions page, select the pending subscription, and click Request confirmation to resend the email.

help me confirm my SNS email subscription

What about cost?

SNS includes 1,000 email notifications per month at no charge under the Always Free tier. This project will use far fewer than that, so there's no cost for the SNS topic or email subscription.

Your alert delivery channel is ready. Next up, you'll create CloudWatch alarms that watch your EC2 instance and publish to this topic when something goes wrong.

Create CloudWatch Alarms

Your instance is running and your notification channel is ready. Now you need to connect the two so that CloudWatch can watch your instance and send you an alert when something looks wrong.

In this step, you will create two alarms that watch different health signals from your EC2 instance. One watches CPU utilization (is the instance overloaded?). The other watches status checks (is the instance reachable at all?).

In this step, get ready to:
  • Create a CPU utilization alarm that fires when usage exceeds 80%.
  • Create a status check alarm that fires when any check fails.
  • Verify both alarms reach the OK state.
Create a CPU utilization alarm

The CPU utilization metric tells you how hard your instance is working. An alarm on this metric catches runaway processes or unexpected traffic spikes before they impact your users.

  • In the AWS Management Console, type CloudWatch in the top search bar and select CloudWatch.
  • In the left navigation pane, choose Alarms, then All alarms.
  • Click Create alarm.
  • Click Select metric.
  • In the All metrics tab, choose EC2.
  • Choose Per-Instance Metrics.
  • Find the row with MonitorMe-CCP in the InstanceId column and CPUUtilization in the Metric Name column.
  • Select the check box next to this row, then click Select metric.

Use the search field

If you have many instances, use the search field at the top of the metrics table to search for MonitorMe-CCP to find your instance quickly.

  • Under Specify metric and conditions, for Statistic, choose Average.
  • For Period, choose 5 minutes.
  • Under Conditions, for Threshold type, choose Static.
  • For Whenever CPUUtilization is, choose Greater.
  • Under than..., enter 80.
  • Click Additional configuration. For Datapoints to alarm, enter 1 out of 1.
  • Click Next.

What do these settings mean?

You are telling CloudWatch to evaluate the average CPU utilization every 5 minutes. If a single data point exceeds 80%, the alarm triggers immediately. This is the simplest alarm configuration: one bad reading fires the alert.

In production, teams often use 3 out of 3 datapoints to avoid false alarms from brief spikes. For this project, 1 out of 1 lets you see the alarm fire quickly during your test later.

  • Under Notification, choose In alarm.
  • In the Send a notification to... dropdown, select your EC2-Alerts-CCP SNS topic.
  • Click Next.
  • For Alarm name, enter High-CPU-MonitorMe.
  • Click Next.
  • Under Preview and create, review your settings, then click Create alarm.

Don't see your SNS topic in the dropdown?

Make sure you are in the us-east-1 region (check the region selector in the top-right corner of the console). SNS topics are regional, so your topic only appears if you are in the same region where you created it.

help me find my SNS topic when creating a CloudWatch alarm

Create a status check alarm

Status checks monitor whether your instance is reachable and the underlying hardware is healthy. A failed status check means the instance is down or unreachable. This alarm catches infrastructure failures that CPU monitoring would miss.

  • Return to Alarms > All alarms in the left navigation pane.
  • Click Create alarm.
  • Click Select metric.
  • In the All metrics tab, choose EC2, then Per-Instance Metrics.
  • Find the row with MonitorMe-CCP and StatusCheckFailed in the Metric Name column.
  • Select the check box next to this row, then click Select metric.
  • Under Conditions, for Threshold type, choose Static.
  • For Whenever StatusCheckFailed is, choose Greater.
  • Under than..., enter 0.
  • Click Next.
  • Under Notification, choose In alarm and select your EC2-Alerts-CCP SNS topic.
  • Click Next.
  • For Alarm name, enter StatusCheck-Failed-MonitorMe.
  • Click Next.
  • Under Preview and create, review your settings, then click Create alarm.

Why threshold greater than 0?

The StatusCheckFailed metric reports either 0 (all checks passing) or 1 (at least one check failed). Setting the threshold to "greater than 0" means any failure at all triggers your alarm immediately.

Verify alarm states
  • Return to Alarms > All alarms in the left navigation pane.
  • Confirm that both High-CPU-MonitorMe and StatusCheck-Failed-MonitorMe appear in the list.
  • Check that both alarms show state OK (green).

What if I see Insufficient data?

CloudWatch needs at least one data point before it can evaluate your alarm. EC2 basic monitoring sends metrics every 5 minutes, so a new alarm may show "Insufficient data" for up to 10 minutes. This is normal. Wait a few minutes and refresh the page.

Alarm stuck in Insufficient data after 10 minutes?

Double-check that your MonitorMe-CCP instance is still in the Running state. A stopped instance does not send metrics to CloudWatch. Go to the EC2 console and confirm the instance state is Running and status checks show 2/2 passed.

help me troubleshoot why my CloudWatch alarm is stuck in Insufficient data state

Your monitoring pipeline is wired up. CloudWatch is watching two critical health signals, and your SNS topic is ready to deliver email alerts the moment something goes wrong. Next up, you will build a dashboard to visualize these metrics in real time.

Build a CloudWatch Dashboard

Your alarms are actively watching your instance, but right now you have to click into each alarm individually to check its status. In a real production environment, teams need a single screen where they can see all their metrics at a glance.

CloudWatch dashboards give you that single screen. In this step, you'll build a custom dashboard with widgets that display CPU usage, network traffic, and status check health for your instance.

In this step, get ready to:
  • Create a CloudWatch dashboard.
  • Add line widgets for CPU and network metrics.
  • Add a number widget for status checks.
Create the dashboard

A dashboard is a customizable page in CloudWatch where you arrange widgets that visualize your metrics. You will create one now and add your first widget to it.

  • In the AWS Management Console, navigate to CloudWatch using the search bar at the top.
  • In the left navigation pane, click Dashboards.
  • Click Create dashboard.
  • In the Create new dashboard dialog box, enter MonitorMe-Dashboard as the name.
  • Click Create dashboard.

An Add to this dashboard dialog box appears, asking you to choose your first widget type.

  • Select Line as the widget type.
  • Click Configure.
  • In the Browse tab, click EC2.
  • Click Per-Instance Metrics.
  • Find your MonitorMe-CCP instance and select the checkbox next to CPUUtilization.
  • Click Create widget.

What is a CloudWatch dashboard?

A dashboard is a customizable home page in the CloudWatch console that you can use to monitor your resources in a single view. Each widget on the dashboard displays a different metric or set of metrics.

Line widgets are ideal for tracking how a metric changes over time. Number widgets show you the current value of a metric at a glance.

Your first widget now appears on the dashboard, showing a line graph of CPU utilization for your instance.

Add CPU and network widgets

Your dashboard already has the CPU line graph. Now you will add a second line widget to track network traffic, and a number widget to display the current status check value.

  • Click the + symbol at the top of the dashboard to add another widget.
  • Select Line and click Next.
  • Click Metrics.
  • In the Browse tab, click EC2, then Per-Instance Metrics.
  • Find your MonitorMe-CCP instance and select the checkboxes next to both NetworkIn and NetworkOut.
  • Click Create widget.

A second line graph now appears on your dashboard showing network bytes in and out.

  • Click the + symbol again to add one more widget.
  • Select Number and click Configure.
  • In the Browse tab, click EC2, then Per-Instance Metrics.
  • Find your MonitorMe-CCP instance and select the checkbox next to StatusCheckFailed.
  • Click Create widget.

Why three separate widgets?

Each widget serves a different purpose. The CPU line graph shows trends over time so you can spot spikes. The network graph reveals traffic patterns. The number widget gives you an instant pass/fail signal for status checks without needing to interpret a graph.

This is the same layout pattern used in real application support dashboards. Teams keep critical health indicators as number widgets for quick scanning, with detailed graphs alongside them for investigation.

Save and review
  • Click Save dashboard in the top right corner.

Your dashboard is now saved. You should see three widgets on the page: a CPU utilization line graph, a network traffic line graph, and a number widget showing the current StatusCheckFailed value (which should be 0 if your instance is healthy).

What does a 0 in StatusCheckFailed mean?

A value of 0 means all status checks are passing. If this value changes to 1 or higher, it means at least one check has failed. That is exactly the condition your StatusCheck-Failed-MonitorMe alarm watches for.

Dashboards are free within limits

The CloudWatch Always Free tier includes 3 custom dashboards with up to 50 metrics each per month. Your single dashboard is well within this limit, so it costs nothing extra.

Don't see any data in your widgets?

If a widget shows "No data available", your instance may not have sent metrics yet. Basic monitoring sends data every 5 minutes, so wait at least 10 minutes after launching your instance before checking the dashboard.

If you cannot find your instance in the metric browser, make sure you are in the us-east-1 region. Check the region selector in the top-right corner of the console.

Help me troubleshoot my empty CloudWatch dashboard widgets.

Your monitoring setup now has a visual layer. Next up, you'll put it all to the test by simulating a CPU spike and watching your alarm trigger a real email notification.

Trigger the Alarm

Your monitoring pipeline is fully wired. You have alarms watching your instance, an SNS topic ready to deliver email notifications, and a dashboard showing real-time metrics.

But how do you know it actually works? In this step, you will simulate a CPU spike on your instance to push it past the 80% threshold. This triggers the alarm, sends you an email notification, and proves your entire alert pipeline is functioning end to end.

In this step, get ready to:
  • Connect to your instance using EC2 Instance Connect and run a stress test.
  • Watch the CloudWatch alarm transition from OK to ALARM.
  • Receive SNS email notifications for both the alarm trigger and recovery.
Stress the instance using EC2 Instance Connect

EC2 Instance Connect gives you a browser-based terminal session directly in the AWS console. No SSH key pair needed.

  • Navigate to EC2 in the AWS console.
  • Click Instances in the left navigation pane.
  • Select the checkbox next to MonitorMe-CCP.
  • Click Connect at the top of the page.
  • Select the EC2 Instance Connect tab.
  • Click Connect.

A browser-based terminal window opens. You are now logged into your EC2 instance.

What is EC2 Instance Connect?

EC2 Instance Connect is a browser-based SSH session built into the AWS console. It pushes a temporary key to your instance for 60 seconds and opens a terminal, so you never need to manage SSH keys yourself.

Amazon Linux 2023 comes with the EC2 Instance Connect agent pre-installed, which is why this works without any additional setup.

  • Install the stress testing tool by running this command in the terminal:
sudo dnf install stress-ng -y

What does this command do?

Amazon Linux 2023 uses dnf as its package manager. This command installs stress-ng, a tool that deliberately pushes system resources to their limits for testing purposes.

  • Once the install completes, spike the CPU for 5 minutes by running:
stress-ng --cpu 1 --timeout 300

What does this command do?

  • --cpu 1 tells stress-ng to use 1 CPU worker that maxes out the processor.
  • --timeout 300 sets the test to run for 300 seconds (5 minutes), then stop automatically.

On a t3.micro with 2 vCPUs, running 1 CPU worker pushes utilization well above the 80% threshold your alarm is watching.

You should see the terminal appear to hang with no output. This is normal. The command is running the stress test in the foreground.

Seeing 'command not found'?

Make sure you ran sudo dnf install stress-ng -y first and that it completed successfully. Look for a "Complete!" message at the end of the install output.

help me troubleshoot stress-ng not being found on my Amazon Linux 2023 EC2 instance

Watch the alarm trigger

Your CloudWatch alarm checks CPU every 5 minutes. After one data point above 80%, the alarm transitions to the ALARM state and sends a notification through your SNS topic.

  • Open a new browser tab (keep the stress test terminal running).
  • Navigate to CloudWatch in the AWS console.
  • Click Alarms in the left navigation pane, then All alarms.
  • Wait 5-10 minutes. Refresh the page periodically.

You should see High-CPU-MonitorMe transition from OK (green) to In alarm (red).

  • Check your email inbox for a notification from AWS Notifications.

The email contains details about which alarm fired, the metric value, and the timestamp. This is the same alert flow that on-call engineers use in production environments.

Why does it take 5-10 minutes?

Your instance uses basic monitoring, which sends metrics to CloudWatch every 5 minutes. The alarm needs at least one data point above the threshold before it can trigger. Combined with the evaluation window, this means a 5-10 minute delay between the CPU spike starting and the alarm firing.

Alarm still showing OK after 10 minutes?

Make sure the stress test is still running. If you accidentally closed the Instance Connect tab, the stress-ng process may have stopped. Reconnect and run the command again.

Also confirm that your alarm is watching the correct instance. Click the alarm name and check that the instance ID matches your MonitorMe-CCP instance.

help me figure out why my CloudWatch alarm isn't triggering after running stress-ng

Observe recovery

After 5 minutes, the stress test ends automatically. The CPU usage drops back to near zero.

  • Return to the CloudWatch alarms page.
  • Wait another 5-10 minutes and refresh periodically.

You should see High-CPU-MonitorMe transition back from In alarm (red) to OK (green).

  • Check your email inbox again for a second notification confirming the alarm returned to OK.

Why does recovery matter?

In production, recovery notifications are just as important as alarm notifications. They tell the on-call engineer that the issue resolved itself (or that a fix worked), so they can stand down. Without recovery alerts, teams have to manually check whether problems are still ongoing.

You just validated a complete monitoring-and-alerting pipeline from spike to alarm to notification to recovery. Next up, you will take on the Secret Mission and add cost governance monitoring to your AWS account.

Secret mission

Add a Billing Alarm

You've set up alarms for CPU and status checks. But what about your AWS bill? In this secret mission, add cost governance monitoring that alerts you before spending gets out of hand.

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. The EC2 instance is the only resource in this project that incurs ongoing charges while running.

Cost warning

Your t3.micro instance costs $0.0104 per hour while running. If left running 24/7, that adds up to approximately $7.50 per month. The CloudWatch alarms, SNS topic, and dashboard all fall within their respective Always Free tier allowances at no additional cost.

Resources you used:

  • EC2 instance MonitorMe-CCP (t3.micro, ~$0.0104/hour while running).
  • CloudWatch alarms: High-CPU-MonitorMe, StatusCheck-Failed-MonitorMe, Billing-Alert-5USD (free within 10 alarm Always Free tier).
  • SNS topic EC2-Alerts-CCP with email subscription (free within Always Free tier).
  • CloudWatch dashboard MonitorMe-Dashboard (free within 3 dashboard Always Free tier).
  • AWS Budget CCP-Project-Budget (free).

Keep everything running

No action needed. Choose this if you are still actively building or experimenting with your monitoring setup.

  • Your instance continues running at ~$0.0104/hour ($7.50/month if left on 24/7).
  • CloudWatch alarms, SNS, and the dashboard remain active at no additional cost within their Always Free tier limits.
  • The zero-spend budget will notify you if unexpected charges appear.

Pause - I'll come back to this later

Stop the instance to eliminate compute charges while keeping all your resources in place. You can restart the instance later and everything will still work.

  • Navigate to EC2 in the AWS Console.
  • In the navigation pane, choose Instances.
  • Select MonitorMe-CCP.
  • Choose Instance state, then Stop instance.
  • Confirm by choosing Stop.
  • You will only pay for the attached EBS volume (~$0.80/month for 8GB gp3). All alarms, SNS, and the dashboard remain active at no extra cost.

Delete - I don't want to use this again

Remove all project resources to bring your ongoing cost to $0. Follow each step below.

Terminate the EC2 instance
  • Navigate to EC2 in the AWS Console.
  • In the navigation pane, choose Instances.
  • Select MonitorMe-CCP.
  • Choose Instance state, then Terminate (delete) instance.
  • Choose Terminate (delete) when prompted for confirmation.
Delete CloudWatch alarms
  • Navigate to CloudWatch in the AWS Console.
  • In the navigation pane, choose Alarms.
  • Select the check boxes next to High-CPU-MonitorMe, StatusCheck-Failed-MonitorMe, and Billing-Alert-5USD.
  • Choose Actions, then Delete.
  • Choose Delete to confirm.
Delete the SNS topic
  • Navigate to Amazon SNS in the AWS Console.
  • In the left navigation pane, choose Topics.
  • Select EC2-Alerts-CCP, then choose Delete.
  • In the Delete topic dialog box, enter delete me, then choose Delete. This also removes the email subscription.
Delete the CloudWatch dashboard
  • Return to CloudWatch in the AWS Console.
  • In the navigation pane, choose Dashboards.
  • Select MonitorMe-Dashboard.
  • Choose Delete and confirm.
Delete the budget (optional)
  • Navigate to Billing in the AWS Console.
  • In the navigation pane, choose Budgets.
  • Select CCP-Project-Budget.
  • Choose Actions, then Delete. The zero-spend budget is free, so keeping it active is also fine.

After completing all the steps above, your total ongoing cost is $0.

Nice Work!

Nice Work!

You just built a complete AWS monitoring pipeline from scratch. Your EC2 instance is watched by CloudWatch alarms, connected to SNS email alerts, and visualized on a custom dashboard.

You've learned how to:

  • Launch an EC2 instance and connect it to CloudWatch alarms that monitor CPU utilization and status checks.
  • Create an SNS topic with an email subscription that delivers real-time alert notifications when alarms trigger.
  • Build a custom CloudWatch dashboard and validate the full alert pipeline by simulating a CPU spike with stress-ng.
  • Added a billing alarm for cost governance that alerts you when estimated charges exceed $5.

This project covers skills from CCP Domain 2 (Security and Compliance, 30% of the exam) and Domain 3 (Cloud Technology and Services, 34% of the exam). The monitoring workflow you built is the same pattern used in production environments worldwide.

Ready to quiz yourself?