Use Cases
AWS IoT Events is shutting down — here's your migration path
May 20, 2026. That is the deadline. AWS IoT Events will stop processing detector models, and every device health check built on it will go dark. You have weeks, not months. Here is the fastest way to migrate.
April 10, 2026 · 9 min read
40 days until shutdown
AWS IoT Events reaches end-of-life on May 20, 2026. No new customers have been accepted since 2024. Existing detector models will stop executing. If your device monitoring depends on IoT Events, it will break.
Amazon has been quiet about this. A deprecation notice buried in the AWS docs, a brief mention in re:Invent 2025 slides. No migration tool, no automatic transition. Just a date and a suggestion to look at IoT SiteWise or "build your own."
If you are reading this and still running IoT Events in production, the time to move is now. Not next sprint. Not after Q2 planning. Now.
What IoT Events actually did for most teams
AWS IoT Events was marketed as a state machine service for IoT. It could model complex event-driven workflows: multi-condition alarms, cascading state transitions, detector models with branching logic. On paper, it was powerful.
In practice, the vast majority of IoT Events deployments did one thing: "alert me when device X stops reporting."
Here is what a typical detector model looked like:
State 1: "Online"
Device sends telemetry via MQTT to IoT Core. IoT Core rule forwards events to IoT Events. Detector model stays in "Online" state.
State 2: "Timeout"
No event within the expected window. Timer expires. Detector transitions to alarm state. Lambda function triggers SNS notification.
Action: "Alert"
SNS sends an email or triggers PagerDuty. Ops team investigates. Device comes back, detector resets. Repeat.
That is a heartbeat check. A timer that resets when a signal arrives. IoT Events wrapped it in a state machine definition language, CloudFormation templates, IAM roles, and five AWS service integrations. But the core logic was always: "did the device ping? If not, yell."
AWS suggests IoT SiteWise. It's overkill.
Amazon's official recommendation is to migrate to AWS IoT SiteWise for asset monitoring, or build a custom solution using IoT Core rules, Lambda, and Step Functions.
IoT SiteWise is an industrial asset modeling platform. It was built for factories running OPC-UA gateways with hundreds of data streams per asset. If you are monitoring which Raspberry Pis are still alive, SiteWise is a freight train for a bicycle delivery.
The custom Lambda path is worse. You are rebuilding IoT Events from scratch: a DynamoDB table for device state, a Lambda that processes incoming messages, a Step Functions workflow for timeout logic, CloudWatch alarms for the Lambda itself, and SNS for notifications. That is five services to replace one — and you own all the operational complexity.
There is a simpler path for the heartbeat use case. One that does not require AWS at all.
Before and after: 5 services to 1
Here is what your AWS IoT Events setup looks like today, and what it can look like after migration:
BEFORE (AWS IoT Events):
Device → MQTT → IoT Core → IoT Events Detector Model
→ Lambda → SNS → Email/PagerDuty
5 AWS services. IAM roles for each. CloudFormation templates.
$0.25/million messages + $0.10/detector/month + Lambda + SNS.
Months of CloudWatch dashboards to debug when it breaks.AFTER (HTTP heartbeat):
Device → HTTP GET → Uptrack → Slack / Discord / Email
1 service. 1 HTTP request per interval. No IAM. No MQTT.
Free for 50 devices. Setup time: 10 minutes.The device does not need the AWS SDK. It does not need MQTT libraries. It does not need an IoT Core certificate. It needs curl.
Migration code: it's embarrassingly simple
Create a heartbeat monitor in Uptrack. You get a unique URL. Then replace your IoT Events integration with one of these:
Bash — any Linux device
# Add to crontab: */5 * * * * /usr/local/bin/heartbeat.sh
#!/bin/bash
curl -fsS -m 10 -o /dev/null \
https://uptrack.app/api/heartbeat/hb_abc123def456Python — Raspberry Pi / edge devices
import requests, time, logging
HEARTBEAT_URL = "https://uptrack.app/api/heartbeat/hb_abc123def456"
INTERVAL = 300 # 5 minutes — match your Uptrack monitor config
while True:
try:
resp = requests.get(HEARTBEAT_URL, timeout=10)
logging.info(f"Heartbeat sent: {resp.status_code}")
except Exception as e:
logging.warning(f"Heartbeat failed: {e}")
# Uptrack will alert if enough pings are missed
time.sleep(INTERVAL)That is the entire migration for most devices. Remove the AWS IoT SDK, the MQTT connection logic, the certificate management, and the IoT Core policy. Replace it with one HTTP request on a timer.
Step-by-step migration plan
You can complete this migration in an afternoon. Here is the sequence:
Inventory your detector models
List every IoT Events detector model. For each one, note: what device it monitors, the expected reporting interval, and where alerts go. Most teams find 80% are pure heartbeat checks.
Create heartbeat monitors in Uptrack
One monitor per device or device group. Set the expected interval and grace period to match your existing detector model timing. Connect your alert channels — Slack, Discord, email, or webhook.
Deploy heartbeat pings to devices
Push a firmware update or config change that adds the heartbeat curl/request. Run both systems in parallel for a few days to verify coverage.
Tear down the AWS stack
Delete the IoT Events detector models, IoT Core rules, Lambda functions, SNS topics, and CloudFormation stacks. Remove the AWS IoT SDK from device firmware. Stop paying for five services.
What Uptrack heartbeat monitoring gives you
Configurable intervals and grace periods
30-second checks for critical devices, 5-minute checks for low-priority sensors. Grace periods absorb network jitter without false alerts.
Multi-channel alerts
Slack, Discord, email, and webhooks. No Lambda-to-SNS plumbing. Alerts fire the moment the grace period expires — not after a CloudWatch evaluation period.
No SDK, no agent, no vendor lock-in
One HTTP GET. Works from bash, Python, Go, Node, Arduino, ESP32 — anything with a network stack. Switch away anytime; the device just needs a different URL.
No infrastructure to maintain
No Lambda cold starts, no DynamoDB capacity planning, no CloudWatch alarms to monitor your monitoring. Uptrack runs on BEAM — each heartbeat is a lightweight process with an in-memory timer.
The clock is ticking
May 20 is not a soft deprecation. AWS will stop processing detector model evaluations. Your devices will keep sending MQTT messages into a void. No alerts will fire. Your team will not know a device is down until a customer calls.
The migration takes an afternoon. The cost of not migrating is silent device failures across your entire fleet. Do not wait for the deadline to prove that point.
Replace AWS IoT Events before the deadline
50 free monitors — 10 at 30-second checks, 40 at 1-minute. Slack, Discord, and email alerts included. No credit card, no AWS account required.
Start Monitoring Free