LoginSignup
2
2

More than 5 years have passed since last update.

AWS IoT: ルールアクションのRepublishでハマった

Posted at

AWS IoTのルールアクションで、別のトピックへRepublishする際にハマったメモです。

やろうとしたこと

  1. デバイスがAWS IoTにセンサデータをpublishする
  2. IoTルールでデータを加工し、shadowを更新

今回は2の部分でハマってしまいました。

何が起こったのか

IoTルールでデータを加工し、shadowを更新

これを実現するために、ルールアクションで $aws/things/thingName/shadow/update
Republishするように設定していました。

$ aws iot get-topic-rule --rule-name debug
{
    "ruleArn": "arn:aws:iot:ap-northeast-1:***",
    "rule": {
        "description": "色々確認する君",
        "ruleName": "debug",
        "actions": [
            {
                "republish": {
                    "topic": "$aws/things/thingName/shadow/update",
                    "roleArn": "arn:aws:iam::***"
                }
            }
        ],
        "sql": "***",
        "awsIotSqlVersion": "2016-03-23",
        "ruleDisabled": false
    }
}

ところが、いつまで待ってもshadowは更新されず、
/update/rejected トピックにも何もメッセージが届きませんでした。

原因

CloudWatchのlogを確認したところ、意図しないトピックへpublishしていました。

[ERROR] EVENT:RepublishActionFailure 
TOPICNAME:*** CLIENTID:*** MESSAGE:Failed to republish to topic. 
Received Server error. The error code is 403. Message arrived on: ***, 
Topic: /things/thingName/shadow/update

どうやら $aws が意図しない解釈をされているようでした。

ここで、「 $ はもう一つ $ をつけてエスケープする」という記述を前に見たような気がして、
おもむろに $$aws/~ で試してみました。

結果、無事に $aws/things/thingName/shadow/update へRepublishでき、
shadowを更新することができました。

あとがき

改めて、今回の原因である「 $ はもう一つ $ をつけてエスケープする」という記述を
AWS IoTのドキュメントから探したのですが見つかりませんでした。

ご存知の方が居たら、コメント等いただけますと嬉しいです。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2