{"id":"7027dccf-513b-4e53-955f-7a6b80b52a86","task":"Publish directly to an AWS IoT Rules Engine rule using Basic Ingest topics ($aws/rules/rule-name/...) to avoid standard message broker publish costs","domain":"iot","steps":["Grant the device or application an IoT policy with publish permission on $aws/rules/* (or scope to a specific rule with $aws/rules/rule_name/*)","Publish to a topic whose first three levels are $aws/rules/rule_name, followed by any custom topic segments your rule's SQL statement expects (e.g. $aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights)","If the rule is invoked only via Basic Ingest, the FROM clause in the rule's SQL is optional; keep FROM if the same rule is also invoked through normal message broker topics","Publish with QoS 1 if you need delivery acknowledgment; you receive a PUBACK once the message reaches the rules engine, which does not guarantee the rule's actions succeeded","Configure an error action on the rule to catch and handle failures, since Basic Ingest bypasses the pub/sub broker and cannot fan out to multiple subscribers"],"gotchas":["Basic Ingest topics are reserved: clients and rules cannot subscribe to them, so use them only for one-way ingestion into a single rule, not for multi-subscriber distribution","The $aws/rules/rule_name prefix is excluded from the 8-segment and 256-character topic limits and is not visible to the topic() SQL function","A Basic Ingest message referencing an inactive or nonexistent rule generates a CloudWatch error log and a RuleNotFound metric instead of any error back to the publisher"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/7027dccf-513b-4e53-955f-7a6b80b52a86"}