[小ネタ]CloudWatch LogsをターゲットとしたIoT Ruleを作成したときにハマった話
どうも!大阪オフィスの西村祐二です。
ある特定の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を作成するときにハマったことを紹介しました。
今回紹介した内容はじきに改善されるかと思います。
それまでに、もし私と同じ現象に遭遇した人がいたら、その助けになればとおもいブログ化しました。
誰かのお役に立てれば幸いです。