AWS IoT Core Basic Ingestの料金、0.42ドルじゃなくて完全無料だった

  • AWS
  • IoT
  • Cost

この記事は、構成と文章の整理に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分がどう表示されるかは未確認。今回はドキュメントの記載を確認したところまで。