[小ネタ]CloudWatch LogsをターゲットとしたIoT Ruleを作成したときにハマった話

2020.04.17

どうも!大阪オフィスの西村祐二です。

ある特定のTopicにpublishしたデータをCloudWatch Logsに保存したいという場面があり、そこでちょっとハマったので、備忘録も兼ねてブログにしておきます。

AWS IoTにはデバッグログをCloudWatchLogsに転送する機能がありますが、今回は下記より、IoT Ruleを利用してCloudWatchLogsにデータを転送する方法を選択しました。

  • CloudWatchLogs保存前にデータを成形したかった(不要なデータを削除したり、検索に必要なデータを追加して保存したい)
  • 特定のTopicだけに限定したかった(CloudWatchLogsの料金を考慮して必要な情報だけ転送したい)

何でハマったか

AWSのマネージメントコンソールからCloudWatch LogsをターゲットとするIoT Ruleを作成したのですが、publishしたデータがLogに保存されないということがありました。

解決策

IAM PolicyのResourceにPutLogEventsで使うリソースの設定を追加することで正常にCloudWatch Logsにデータが保存されるようになりました。

なぜリソースの設定不足になったのか

(2020年4月17日時点の挙動です)

Rule作成時、コンソール上でロールを作成すると下記のように、選択したロググループのリソースのみが設定されるようになっています。

作成されたポリシー

他気をつけるポイント

  • ロググループ選択時の注意点

Ruleを作成する際にロググループを選択するのですが、表示されるロググループが50個まで(cloudwatchのページに表示される1ページ分)のようで、それ以降にあるロググループが選択できないようでした。

私は動作確認する際に、ロググループが選択項目の一番上に来るように名前を「/a/rule-test」のようにして対処していました。

さいごに

AWSのマネージメントコンソールからCloudWatch LogsをターゲットとしたAWS IoT Ruleを作成するときにハマったことを紹介しました。

今回紹介した内容はじきに改善されるかと思います。

それまでに、もし私と同じ現象に遭遇した人がいたら、その助けになればとおもいブログ化しました。

誰かのお役に立てれば幸いです。