

AWS IoT Core Basic Ingestの料金、0.42ドルじゃなくて完全無料だった
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
AWS IoT Core の Basic Ingest について調べてたら、「通常のブローカー経由が1ドル/100万メッセージに対して、Basic Ingestは0.42ドル/100万メッセージ、58%削減」という説明が出てきた。数字が具体的だったのでそのまま信じそうになったけど、一応公式ドキュメントを見て確認したら違ってた。
何が起きたか
AWS IoT Core Pricing のページには以下のように書いてある。
For MQTT and HTTP, you do not incur a messages cost for messages sent or received using the reserved topic of Basic Ingest.
つまり、Basic Ingestの予約トピックを使って送受信したメッセージは、そもそもメッセージ課金の対象外。0.42ドルじゃなくて0円だった。
「量が増えるほど差が開く」という説明も違ってて、正しくは「Basic Ingest経由の分は量に関係なく最初から課金対象外になる」という話。100万メッセージでも1億メッセージでも、Basic Ingestを使ってる部分の課金はゼロのまま。
料金以外の制約(こっちは合ってた)
Basic Ingestのトピック名は $aws/rules/rule_name で始まる形式になっていて、ルール名がトピックに直接埋め込まれる。
$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lightsこの仕様上、1つのBasic Ingestトピックは1つのルールに固定される。加えて、Basic Ingestの予約トピックはsubscribeできない(Pub/Subとしては使えない)。
通常のブローカー経由:
flowchart TD D1[デバイス] --> B[メッセージブローカー] B --> R1[ルール1] B --> R2[ルール2] B --> S1[他のサブスクライバー] classDef device fill:#dbeafe,stroke:#2563eb,color:#1e3a8a; classDef broker fill:#fef3c7,stroke:#d97706,color:#78350f; classDef rule fill:#dcfce7,stroke:#16a34a,color:#14532d; class D1 device; class B broker; class R1,R2,S1 rule;
Basic Ingest経由:
flowchart TD D2[デバイス] -->|"$aws/rules/rule_name"| R[固定の1ルール] classDef device fill:#dbeafe,stroke:#2563eb,color:#1e3a8a; classDef rule fill:#dcfce7,stroke:#16a34a,color:#14532d; class D2 device; class R rule;
複数のサブスクライバーにメッセージを配信したい場合(他のデバイスやルールエンジンへの配信など)は、引き続き通常のメッセージブローカーを使う必要がある。ここは元の説明の理解で合ってた。
補足
「1トピック=1ルール」ではあるけど、そのルール自体は複数のアクション(S3、DynamoDB、Lambdaなど)を同時に実行できる。なので「1つのことしかできない」わけじゃなくて、制約は「複数の独立したルールに同時マッチさせられない」という点だけ。
料金がドキュメント上0円と書いてあることは確認したけど、実際の請求画面でBasic Ingest分がどう表示されるかは未確認。今回はドキュメントの記載を確認したところまで。