AWS IoTのログをCloudWatch Logsで取得する #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
AWSのカンファレンスイベント、re:Invent 2015で発表&ベータがローンチされたAWS IoT、皆さん触ってますか?

メッセージブローカーやルールエンジンなど、複数の設定を組み合わせて利用する上で、実際にどのように処理されたのか、エラーが発生していないかなど検証時にログを取りたいこともあると思います。そこで今回は、AWSのロギングサービスであるCloudWatch Logsでログを取得してみたいと思います。

設定手順

1. IAMロールの作成

まずは、AWS IoTからCloudWatch Logsへのアクセス許可を定義するIAMロールを作成します。IAMの管理画面から[Create New Role]をクリックします。

iotlogs01

適当なロール名(今回はaws_iot_cloudwatchlogs)を入力し、[Next Step]をクリックします。

iotlogs02

[AWS Service Roles]から「AWS IoT」の右にある[Select]ボタンをクリックします。

iotlogs03

[Attach Policy]画面では、「AWSIoTLogging」ポリシーを選択し、[Next Step]をクリックします。

iotlogs04

確認画面では、内容を確認し[Create Role]をクリックすればロールが作成されます。

iotlogs05_1

これでOKです。作成したIAMロールのARNを控えておきましょう。

2. CloudWatch Logsの有効化

AWS IoTでのCloudWatch Logsの有効化は、AWS CLIにあるaws iot set-logging-optionsコマンドを実行します。--logging-options-payloadオプションに先ほど作成したIAMロールのARNとログレベルを指定します。今回はINFOレベルに設定します。

$ aws iot set-logging-options --logging-options-payload roleArn="arn:aws:iam::XXXXXXXXXXXX:role/aws_iot_cloudwatchlogs",logLevel="INFO"
$

これで完了です!

動作確認

では試しに、前回のエントリーで設定したS3にメッセージを保存するルールにこちらのエントリーにあるHTTPSエンドポイントへのメッセージPublishを試して、ログの様子を見てみます。

$ aws iot-data publish --topic topic/test --qos 1 --payload '{"message" : "Test Message"}' --endpoint-url https://XXXXXXXXXXXX.iot.ap-northeast-1.amazonaws.com
$

CloudWatch Logの画面を見てみるとAWSIotLogsロググループが作成され、以下のようなログが確認できます。

iotlogs06_1

メッセージのPublishが成功、ルールエンジンS3Ruleが適用、S3への」へのPutが成功したことがわかりますね。

まとめ

AWS IoTでのログの有効化をご紹介しました。ログをうまく使ってAWS IoTを効率良くデバッグしましょう!

参考URL