iot

AWS IoT Core

Managed service that connects fleets of devices to AWS over MQTT and routes their data to other services. Here's what IoT Core is good for, what it costs, how its Rules Engine connects to Lambda, DynamoDB, S3, and more, and the mistakes Design Beaver catches as you draw.

Updated July 13, 2026

What IoT Core is

IoT Core is the front door for connecting physical devices to AWS. A device gateway holds long-lived, secure connections to your fleet — devices connect over MQTT (or MQTT-over-WebSocket, or plain HTTPS) and keep a bidirectional session open so messages flow either way at any time. A pub/sub message broker moves those messages between devices and applications by topic, and a Rules Engine matches inbound messages against SQL-like rules and forwards them to other AWS services.

The fourth piece is the Device Shadow — a persistent JSON document per device holding its last reported state and its desired state, so your apps can read and set a device’s state through an API even while the device is offline. Design Beaver models IoT Core as a regional connectivity broker and Rules Engine router, and validates as you draw which services a rule can forward to and the IAM each of those actions needs.

When to use IoT Core (and when not to)

Reach for IoT Core when you have real devices that need a secure, authenticated, long-lived connection to the cloud — especially over MQTT, which is built for bandwidth- and power-constrained hardware. It’s the right tool when device messages have to fan out to several AWS services with per-message filtering, without each device knowing the downstream targets, and when devices are intermittently connected and you need a durable per-device state that apps can read and write regardless.

Don’t reach for it for service-to-service messaging inside AWS with no devices involved — the connectivity and shadow machinery is pure overhead, and SNS, SQS, or EventBridge do that job more simply. A plain HTTP API for a web or mobile app is API Gateway, not a device gateway. And high-throughput ordered stream analytics is Kinesis — route IoT data into it rather than treating the broker as a stream processor.

Variants: how devices connect and hold state

The real choices are how a device talks to IoT Core and whether you use a shadow. Most fleets sit on the long-lived MQTT session; HTTPS suits devices that only occasionally publish; Device Shadow is the state layer for hardware that isn’t always online.

OptionWhat it is
MQTT (device gateway)defaultThe primary path — devices hold a long-lived, bidirectional MQTT (or MQTT over WebSocket) connection to the device gateway. Lightweight, low bandwidth, built for constrained devices; supports MQTT 5.0. Use for most telemetry and command-and-control.
HTTPS publishDevices publish messages over a plain HTTPS request instead of holding an MQTT connection. Simpler for devices that only occasionally send data and don't need to receive messages or maintain a session.
Device ShadowA persistent JSON document holding a device's reported and desired state. Apps read/update the shadow via API even when the device is offline; the device syncs on reconnect. Metered as Shadow/Registry operations, not messages.

IoT Core pricing

The thing that surprises people isn’t the per-component split — it’s that almost everything meters in size increments. Messaging, rules, and actions bill in 5 KB chunks and shadow operations in 1 KB, so a slightly-oversized payload quietly rounds up to the next unit on every single message.

Billed separately per component you use, with no minimum fee: Connectivity (per minute connected), Messaging (per message to/from the broker), Rules Engine (per rule triggered plus per action executed), and Device Shadow + Registry (per operation). Messaging, rules, and actions are metered in 5 KB increments of message size; shadow/registry operations in 1 KB increments.

OptionRepresentative rate
mqttConnectivity: $0.08 per 1,000,000 minutes of device connection
mqttMessaging: from $1.00 per million messages, dropping to ~$0.70 per million at higher volume tiers (metered per 5 KB)
mqttRules Engine: $0.15 per million rules triggered + $0.15 per million actions executed
device-shadowDevice Shadow & Registry: $1.25 per million operations (metered per 1 KB of record size)

Keeping the bill down

  • Use Basic Ingest (rule-only topics, no pub/sub delivery) to skip the separate messaging charge when a message only needs to reach a rule action, not other subscribers
  • Right-size message payloads — messaging/rules/actions meter in 5 KB increments, so a 6 KB message counts as two units
  • Keep Device Shadow documents small (current state only, not history) — shadow ops meter per 1 KB

us-east-1 (rates vary by region). Rates as of 2026-07. Verify at the official pricing page before using for real cost estimates — this list is not kept in sync with AWS pricing changes, and rates vary by region and volume tier.

How IoT Core connects to other services

The device gateway and broker are only half the picture — the connections that matter on a diagram are the Rules Engine actions, where a topic rule forwards matched device messages into the rest of your architecture. Almost every one is an IAM edge: IoT Core runs each action under a role the rule assumes, and that role has to grant the action on the target — dynamodb:PutItem, s3:PutObject, lambda:InvokeFunction, and so on. Design Beaver models each of these edges, so it knows what a rule can route to and what makes that route correct.

  • Lambdasecurity

    A topic rule's Lambda action invokes a function with the matched device message as input — the general-purpose way to run custom logic on incoming device data

    IAM:lambda:InvokeFunction

  • DynamoDBsecurity

    A topic rule's DynamoDB action writes the (optionally transformed) device message straight into a table — e.g. persisting each sensor reading as an item, keyed by device ID and timestamp

    IAM:dynamodb:PutItem

  • S3security

    A topic rule's S3 action saves the message payload as an object — e.g. archiving raw device data to a bucket for later batch processing or as a data lake landing zone

    IAM:s3:PutObject

  • SNSsecurity

    A topic rule's SNS action publishes to a topic to fan a device event out to multiple subscribers or send a push/SMS notification — e.g. alerting when a sensor crosses a threshold

    IAM:sns:Publish

  • SQSsecurity

    A topic rule's SQS action sends the message to a queue, giving a downstream consumer a durable buffer to process device data at its own pace

    IAM:sqs:SendMessage

  • Step Functionssecurity

    A topic rule's Step Functions action starts a state machine execution from a device message — kicking off a multi-step workflow (e.g. an over-the-air update or an incident-response flow) in response to a device event

    IAM:states:StartExecution

What IoT Core can’t connect to

Some edges look reasonable on a canvas but have no rule action behind them — the Rules Engine can’t put an event on a bus, run a SQL insert, or call software on an instance directly. Design Beaver flags them instead of letting you draw a diagram that can’t be built.

  • The IoT Rules Engine has no EventBridge action — a topic rule can't put an event on an event bus directly. (AWS IoT device lifecycle/registry events reach EventBridge through a separate managed integration, not a rule action you configure on message data.) To land device messages on a bus, target a Lambda rule action that calls PutEvents.

  • RDS

    There is no Rules Engine action for RDS — a topic rule can't run a SQL insert against a relational database. Route the message through a Lambda action (or into a queue a worker drains) and write to RDS from there.

  • EC2

    IoT Core doesn't make network calls to software on an EC2 instance — there's no EC2 rule action. To hand device data to an app on EC2, use a rule action to a queue/topic the instance consumes, or an HTTP action to an endpoint it exposes.

  • CloudFront is a CDN that serves content to end users from HTTP origins — it is neither a device-connectivity endpoint nor a Rules Engine target. There is no IoT Core <-> CloudFront relationship to draw.

  • Route 53 is DNS. Devices reach IoT Core through its account-specific data endpoint, and the Rules Engine routes by topic, not DNS — there is no IoT Core <-> Route 53 edge.

Anti-patterns Design Beaver catches

These are the IoT Core mistakes that pass a diagram review but bite in production — the ones the validation engine flags as you draw.

Using IoT Core as a generic in-cloud message bus between AWS services with no physical devices involved

Why it breaksIoT Core's connectivity, MQTT session, and shadow machinery exist to serve constrained, intermittently-connected hardware — with no devices, you pay for connectivity/messaging metering to do what SNS/SQS/EventBridge do more simply

Do this insteadUse SNS (fan-out), SQS (durable queue), or EventBridge (routing) for service-to-service messaging; keep IoT Core for device-facing workloads

Chaining a rule action per message for heavy per-message processing (validation, enrichment, multi-target writes) directly from the Rules Engine

Why it breaksDirect actions (DynamoDB/S3/SNS/SQS) do one thing per message with no branching or logic; wiring several rules to fake a pipeline gets brittle and hard to observe

Do this insteadRoute to a single Lambda (or a Step Functions workflow) action and do the multi-step processing there

Treating Device Shadow as a general-purpose database for device history

Why it breaksA shadow holds current reported/desired state, not a time series, and shadow/registry operations are metered per 1 KB — it's not built or priced for storing historical readings

Do this insteadKeep only current state in the shadow; write historical telemetry to DynamoDB/S3/Timestream via rule actions

Gotchas that bite in production

  • Everything meters in size increments. Messaging, rules, and actions bill in 5 KB chunks; shadow and registry operations in 1 KB. A chatty fleet with slightly-oversized payloads pays for the next whole increment on every message.
  • Rule actions are one-shot, with no logic. A DynamoDB, S3, SNS, or SQS action does exactly one thing per message. Anything with branching, validation, or multiple writes belongs in a Lambda action — or a Step Functions workflow — not a web of rules faking a pipeline.
  • The rule’s IAM role is a separate thing to get right. IoT Core assumes a role you configure per rule to run its actions, and a missing permission fails the action at message time, not at setup. This is exactly the edge Design Beaver surfaces as you draw.
  • Device Shadow is current-state, not history. It holds reported and desired state, is capped in practical size, and is priced per operation — it’s not a time-series store. Write historical telemetry to DynamoDB or S3 via rule actions instead.
  • No devices? Wrong service. Using IoT Core as an in-cloud message bus between AWS services means paying connectivity and messaging metering to do what SNS, SQS, or EventBridge do more simply.

Further reading

Frequently asked questions

When should you use AWS IoT Core?
Use IoT Core when you have physical devices that need a secure, long-lived connection to the cloud — especially over the lightweight MQTT protocol — and their messages need to fan out to multiple AWS services with per-message filtering. It's the wrong tool for service-to-service messaging inside AWS with no devices (that's SNS, SQS, or EventBridge), a plain HTTP API for a web or mobile app (that's API Gateway), or high-throughput ordered stream analytics (that's Kinesis).
How much does AWS IoT Core cost?
You're billed separately for each component you use, with no minimum fee — connectivity (per minute a device is connected), messaging (per message to or from the broker), the Rules Engine (per rule triggered plus per action executed), and Device Shadow and Registry (per operation). The catch is that messaging, rules, and actions meter in 5 KB increments and shadow operations in 1 KB, so payload size multiplies the bill. Verify current rates on the official pricing page before estimating a real bill.
Can IoT Core write to DynamoDB or trigger a Lambda?
Yes — through the Rules Engine. A topic rule matches device messages and fires actions that write to DynamoDB, save to S3, invoke Lambda, publish to SNS, send to SQS, or start a Step Functions workflow. Each action runs under an IAM role the rule assumes, which must grant the action on the target — Design Beaver flags the missing IAM as you draw.
Can IoT Core send events to EventBridge?
Not through a rule action — the IoT Rules Engine has no EventBridge target, so a topic rule can't put a device message on an event bus directly. To land device data on EventBridge, target a Lambda rule action that calls PutEvents. Design Beaver flags an IoT Core → EventBridge edge as invalid.

Validate your IoT Core architecture as you draw

Design Beaver checks your AWS design in real time — missing queues, invalid connections, and security anti-patterns, caught before you ship. It’s live in beta, free, and runs in your browser with no account.

Open the app →

Prefer email? Get new features in your inbox:

← All supported services