AWS IoTの用語で紛らわしいものに、AWS IoT Ruleと、Topic Ruleです。
どちらも、AWS IoTのトピックに届いたメッセージを、その後どうするか(別のリソースに配信するなど)、を表すAWSリソースです。
この二つは、どこが違うのでしょうか?
正解は、違いません。全く同じで、同じ概念です。
AWS CLIを使ってルールを作成するコマンドは以下のとおりなので、システム的には、Topic Ruleが正式で、それを至る所でTopicを省略し、その後、AWS IoTの中の、と言う意味合いでAWS IoTをつけて、AWS IoT Ruleとなっています。
aws iot create-topic-rule --rule-name myrule --topic-rule-payload file://myrule.json
CloudFormationでは、 AWS::IoT::TopicRule と言うリソース名です。
ただし、SAMには、本当に、IoTRuleと言う用語が出てきます。
AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 Description: Minimal SAM: IoT Rule -> Lambda Resources: IotMessageHandler: Type: AWS::Serverless::Function Properties: Runtime: python3.12 Handler: app.lambda_handler InlineCode: | import json def lambda_handler(event, context): # IoT Rule の SELECT * の結果が event に入ります print("event:", json.dumps(event)) return {"ok": True} Events: FromIotTopic: Type: IoTRule # <= !!ここ!! Properties: AwsIotSqlVersion: "2016-03-23" # 例: devices/<deviceId>/telemetry に publish されたものを拾う Sql: "SELECT * FROM 'devices/+/telemetry'"
SAM は内部的に以下を行なっています。
- AWS::IoT::TopicRule を生成
- SQL(SELECT … FROM …)を設定
- Lambda を Action として紐づけ
- Lambda invoke 用の permission も自動生成
あくまで、SAM専用の用語で、IoTRule ≠ TopicRuleですが、IoTRuleの中でTopicRuleが作られます(使われます)。