この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
CX事業本部の平内(SIN)です。
AWS IoTでは、その動作をCloudWatch Logsでモニターすることができます。
参考:CloudWatch Logs の使用による AWS IoT のモニタリング
今回は、このログを使用して、簡単なトラブルを確認してみました。
2 ログの有効化
AWS IoTのログは、コンソールから設定 > ログ で設定できますが、デフォルトで「無効」となっています。「有効」にするためには、「編集」ボタンで設定を行います。
設定する内容は、詳細レベルとロールです。
- 詳細レベルは、以下の4種類が選択可能です。
- Roleの設定は、ロールの作成を選択すると、自動的に作成できます。
3 ログの確認
ログが有効にされていると、AWS ToIログは、CloudWatch Logsのロググループ(AWSIotLogsV2)に出力されます。
以下は、デバッグ(詳細レベルが最も高い) で記録されたログの一例です。
そして、こちらが、エラー(詳細レベルが最も低い) で記録されたログです。
4 トラブル確認
簡単なトラブルについて確認します。
(1) クライアントID
AWSIoTPythonSDKでMQTTを使用する場合、AWSIoTMQTTClientのコンストラクタでクライアントIDを設定します。
clientId = "client_id"
client = AWSIoTMQTTClient(clientId)
client.configureEndpoint(endPoint, port)
client.configureCredentials(rootCA, privateKey, certificate)
client.connect()
しかし、上記のようなコードが以下のようにエラーとなった場合の例です。
AWSIoTPythonSDK.exception.AWSIoTExceptions.connectTimeoutException
もし、原因が、ポリシーのiot:Connectのリソース指定に誤り(client_IDは、大文字小文字に誤りがあります)があったとすると、以下のようなログが残ります。
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:client/client_ID"
]
}
このログでは、Connectイベントが、認証エラーとなっている事が分かります。もし、EndPointや、証明書等に問題があった場合、Connectイベントまで来ないので、ポリシーの確認が必要あることが分かります。 ちなみに、EndPointや、証明書等に問題があった場合も、クライアント側では、同じように、AWSIoTExceptions.connectTimeoutExceptionエラーとなるのですが、ログは一切残りません。(証明書の認証エラーは、ここに出力されません)
(2) トピック名
続いて、publishで以下のようなエラーとなった場合の例です。
topic = "topic_1"
client.publish(topic, payload, 1)
AWSIoTPythonSDK.exception.AWSIoTExceptions.publishTimeoutException
ここでも、原因が、ポリシーのiot:Publishのリソース指定に誤り(Topic_1は、大文字小文字に誤りがあります)があったとすると、以下のようなログが残ります。
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:ap-northeast-1:XXXXXXXXXXXX:topic/Topic_1"
]
}
このログでは、Connectは、成功しているが、Publishイベントが、認証エラーとなっている事が分かります。
(3) ルール
最後に、ルールの設定がうまくトリガーしない場合の例です。以下の設定では、topic_1というトピックが到着した際に、Lambdaを起動しています。
正常に動作すると、以下のようなログが確認できます。最初に、RuleMatchイベントがSuccessとなって、ルールが想定通りヒットしている事がわかります。
続いて、アクションに指定したLambdaが正常に呼び出されている事を、RuleExecutionイベントで確認できます。
想定したアクションが動作しない場合、上記あたりのログを確認することで、何処で止まっているのかが分かると思います。
5 最後に
今回は、AWS IoTのログを有効化して、簡単なトラブルを確認してみました。
トラブルの原因が分からない時は、MQTTのメッセージを#で全部モニターしたり、このようにログを確認する事が必要かと思います。
なお、ログ記録が「有効」になっていると、継続的にそれなりのログが出力されるので、特に必要がない場合は、作業終了後、「無効」に戻す事をお勧めします。 想定外に料金が上がる可能性が有ることにご注意下さい。