AWS IoT Core vs Azure IoT Hub Pricing: What 10,000 Devices Actually Costs

Pricing verified as of June 2025. All figures based on US East regions. Cloud pricing changes frequently; verify against source pages before making procurement decisions.
You opened the AWS IoT Core pricing page. Then the Azure IoT Hub pricing page. Then you stared at both for 10 minutes, realized they don’t measure anything the same way, and closed both tabs. One charges per message with 5KB payload chunks. The other charges by tier with daily message quotas per “unit.” It’s like comparing a gas bill to an electricity bill and trying to figure out which house is cheaper to heat.
Here’s the scenario we’re going to price out: 10,000 devices, each sending 1 message per minute, 24/7, with payloads under 5KB. That’s 10,000 × 60 × 24 × 30 = roughly 432 million messages per month. We’ll calculate the real cost on both platforms, including the line items you’ll forget to budget for.
AWS IoT Core Pricing Breakdown
AWS IoT Core uses a pure pay-per-use model. You pay for three things: messaging, connectivity, and rules engine actions. There’s no tier to pick, no capacity to provision.
Messaging is priced at $1.00 per million messages (us-east-1) for the first billion messages per month. Here’s the catch: AWS meters in 5KB increments. A 4KB message counts as 1 message. A 6KB message counts as 2. For our scenario, assuming payloads stay under 5KB, the math is clean: 432M messages × $1.00/1M = $432.00/month.
Connectivity minutes are the cost people miss. Every device maintaining an MQTT connection gets billed at $0.08 per million connection minutes. Our 10,000 devices connected 24/7: 10,000 × 60 × 24 × 30 = 432M connection minutes. That’s 432M × $0.08/1M = $34.56/month. Not huge, but it’s there.
Rules engine triggers fire every time you route a message somewhere useful (Lambda, S3, DynamoDB, SQS). The cost is $0.15 per million rules triggered, plus $0.15 per million actions executed. If every message hits one rule with one action, that’s 432M × ($0.15 + $0.15)/1M = $129.60/month.
+-------------------------------+-----------------+--------------+
| Cost Component | Unit Price | Monthly Cost |
+-------------------------------+-----------------+--------------+
| Messaging (432M msgs, ≤5KB) | $1.00 per 1M | $432.00 |
| Connectivity (432M mins) | $0.08 per 1M | $34.56 |
| Rules Engine (1 rule+action) | $0.30 per 1M | $129.60 |
+-------------------------------+-----------------+--------------+
| ESTIMATED TOTAL | | $596.16 |
+-------------------------------+-----------------+--------------+And we haven’t touched device management yet.
Azure IoT Hub Pricing Breakdown
Azure takes the opposite approach. You pick a tier (S1, S2, or S3), and each tier gives you a daily message quota per “unit.” You buy as many units as you need to cover your daily throughput.
Our daily message volume: 432M / 30 = 14.4 million messages per day.
The tiers: S1 gives 400,000 messages/day/unit ($25/month per unit). S2 gives 6,000,000 messages/day/unit ($250/month per unit). S3 gives 300,000,000 messages/day/unit ($2,500/month per unit).
S1 would require 36 units to cover 14.4M messages/day. That’s 36 × $25 = $900/month. Expensive.
S2 is the sweet spot here. You’d need 3 units (3 × 6M = 18M messages/day capacity) to handle 14.4M/day with some headroom. Cost: 3 × $250 = $750/month.
Could you squeeze it into 2 S2 units (12M/day)? 14.4M > 12M. You’d get throttled. You have to round up.
One S3 unit (300M/day) covers it easily at $2,500/month, but that’s massive overkill for this scenario.
Azure’s gotcha: it meters in 4KB chunks, not 5KB like AWS. A 5KB payload on Azure counts as 2 messages against your quota. If your payloads are between 4KB and 5KB, Azure effectively halves your daily allowance. For our sub-5KB scenario, we’ll assume payloads are under 4KB. If they’re not, you’d need to add more units.
Azure’s Device Provisioning Service (DPS) runs $0.123 per 1,000 operations. For initial provisioning of 10,000 devices, that’s about $1.23. Trivial, but it’s a separate service you have to set up.
+-------------------------------+-----------------+--------------+
| Cost Component | Configuration | Monthly Cost |
+-------------------------------+-----------------+--------------+
| IoT Hub (S2 × 3 units) | 18M msgs/day | $750.00 |
| Device Provisioning Service | 10K operations | $1.23 |
| Message routing (to storage) | Included in tier| $0.00 |
+-------------------------------+-----------------+--------------+
| ESTIMATED TOTAL | | $751.23 |
+-------------------------------+-----------------+--------------+Azure’s message routing is included in the tier pricing (routed messages just count against your quota). That’s a real advantage over AWS’s separate rules engine billing.
Head-to-Head: The Side-by-Side
+----------------------------+-----------------+-----------------+
| Factor | AWS IoT Core | Azure IoT Hub |
+----------------------------+-----------------+-----------------+
| Pricing Model | Per-message | Tier + units |
| Msg Metering Size | 5 KB chunks | 4 KB chunks |
| Monthly Cost (432M msgs) | ~$596 | ~$751 |
| Spike Handling | Scales + costs | Throttles or |
| | linearly | absorbs |
| Free Tier | 250K msgs/mo | 8K msgs/day |
| | (12 months) | (permanent, B1) |
+----------------------------+-----------------+-----------------+AWS comes in about $155/month cheaper at this exact scenario. But the structural difference matters more than the delta.
If your traffic spikes 2× for a day (maybe a firmware event triggers extra telemetry), AWS doubles your cost for that period, predictably. Azure either absorbs it within the headroom you already paid for (we provisioned 18M/day capacity but only use 14.4M) or throttles hard once you exceed the quota. That 25% headroom you “wasted” on Azure becomes insurance.
If your traffic drops by half, AWS costs drop proportionally. Azure stays at $750 because you’re paying for provisioned capacity, not consumption.
Regional pricing also shifts things. Some Azure regions price S2 units differently, and AWS IoT Core pricing varies by region. Always check the specific region you’re deploying to.
Device Management: What’s Included vs. What Costs Extra
Base messaging is only part of the bill. Device management is where the platforms diverge in ways that affect your budget.
+---------------------------+--------------------+--------------------+
| Feature | AWS IoT Core | Azure IoT Hub |
+---------------------------+--------------------+--------------------+
| Device Registry | Included | Included |
| Shadows / Twins | Billed as messages | Uses message quota |
| OTA / Remote Actions | Separate service | Direct methods |
| | ($0.10/device/mo) | included in tier |
| Bulk Provisioning | Included | DPS (extra cost) |
| Monitoring | CloudWatch ($) | Azure Monitor ($) |
+---------------------------+--------------------+--------------------+Device Shadows (AWS) vs. Device Twins (Azure): Both let you store a device’s desired and reported state. On AWS, every shadow update is billed as a message. If each device updates its shadow once an hour, that’s 10,000 × 24 × 30 = 7.2M extra messages/month, adding about $7.20 to your AWS bill. On Azure, twin updates consume from your existing message quota, so they eat into the 18M/day capacity you already provisioned.
OTA updates are the big one. AWS IoT Device Management is a separate service. Remote actions like firmware updates, reboots, and config pushes cost roughly $0.10 per device per month once you start using fleet indexing and job execution. For 10,000 devices, that’s $1,000/month on top of everything else. Azure includes direct methods and device twin desired-property pushes within the IoT Hub tier.
If you plan to do regular OTA updates, this single line item can add 20-40% to your AWS total while adding nothing to your Azure total.
The Costs You’ll Forget
Add 15-25% to whatever number you calculated above.
Data egress. Both AWS and Azure charge for data leaving the cloud. AWS charges $0.09/GB (first 10TB). If 432M messages average 1KB each, that’s ~432GB of ingest (free), but any dashboards, APIs, or analytics pulling that data back out will incur egress.
Downstream processing. The message hits your cloud. Storing it in DynamoDB, Cosmos DB, S3, or Blob Storage has its own cost. Running Lambda functions or Azure Functions to transform it has its own cost. Budget for these alongside your IoT platform line items.
Certificate management. AWS includes X.509 certificate management. Azure DPS charges $0.123 per 1,000 registration operations, which adds up during fleet rotations.
VPC/VNet integration. Running IoT Core in a VPC with a NAT Gateway means $0.045/hour (about $32/month) plus $0.045/GB processed. Often overlooked, always on the bill.
One note for teams evaluating connectivity options: if your devices use Bluetooth and you’re exploring satellite or terrestrial relay networks to backhaul data before it reaches AWS or Azure, the Hubble Network architecture overview is worth understanding. Transport layer costs sit below cloud pricing and can meaningfully change your message routing design.
Choosing Based on Your Actual Traffic Pattern
There’s no universal winner. The “cheaper” platform depends on your specific deployment.
AWS IoT Core fits better when your traffic is variable or unpredictable, your payloads are small (under 5KB), you’re already running on AWS, and you want pure consumption-based billing with no committed capacity.
Azure IoT Hub fits better when your traffic is steady and predictable (like our 1 msg/min scenario), you need built-in OTA and device management without add-on services, you’re already on Azure, and you’d rather pay a flat monthly amount than watch a usage meter.
Ecosystem lock-in usually matters more than a 15% pricing difference. If your team runs on AWS, the operational cost of learning Azure (and maintaining a second cloud relationship) will dwarf any monthly savings. The cheapest IoT platform is the one your team already knows how to operate.
Building This Into Your Budget
For the exact scenario of 10,000 devices at 1 message/minute:
- AWS IoT Core: ~$596/month base, potentially $1,596+ with device management
- Azure IoT Hub: ~$751/month base, device management included in tier
AWS is cheaper on raw messaging. Azure is cheaper once you factor in device management. Both get 15-25% more expensive once you account for egress, processing, and monitoring.
Before you commit, run your own numbers with your actual payload sizes (especially that 4KB vs. 5KB metering boundary), your actual message frequency, and your actual device management needs. If you’re managing device fleets at scale, check whether provisioning workflows can help reduce per-device operational overhead regardless of which cloud you pick.
The sticker price is never the full price. Budget for the whole stack, not just the MQTT broker.
Hubble Network connects devices directly from satellite to cloud — bypassing terrestrial infrastructure costs entirely. See how it works →