Armadilloフォーラム

Node-redでAWSへ接続できない

h1rohiromat

2024年12月22日 18時38分

==========
製品型番:Armadillo-IoT A6E
Debian/ABOSバージョン:3.20.3-at.4
カーネルバージョン:5.10.228-0-at #1-Alpin
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
大変お世話になっております。
armadillo-iotg-a6e_node-red-guideと同product_manualを参考に、
A6EにてNode-redを使ってAWSへの接続を試みております。
(ATDE上のFirefoxでNode-redを起動)
node-redガイドp.79に記載の「4.6.1. AWS アカウントの作成」と
p.81-84「4.6.4. デバイス証明書を取得するフローの作成」まで実施し、
デバックメッセージの箇所に、
 AmazonRootCA1.pem
 device_cert.pem
 key.pem
が表示されているところまでは確認できたのですが、その次の項、
「4.6.5. デバイスを登録するフローの作成」の箇所で、AWSにモノを登録、
node-redのノードにアクセスキーやリージョンなどを設定してデプロイして、
Injectionボタンを押すと、デバックメッセージに以下(添付)エラーが表示されます。

 error (デバイス証明書の登録)
Note: Unnecessary use of -X or --request, POST is already inferred.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Could not resolve host: d074(省略)
-ats.iot.ap-northeast-1.amazonaws.com
* Closing connection 0
curl: (6) Could not resolve host: d074(省略)-ats.iot.ap-northeast-1.amazonaws.com

マニュアル記載項目そのままに、コードやコマンドをコピペして設定しておりますが、
たとえば、exec queueノードのなかの "https://${ENDPOINT}${URI}" の{括弧}の部分に実際のエンドポイントを
記載しないとうまく接続できない、といったカスタマイズ(コードの部分的な修正)が必要でしょうか?

AWS側の設定も含めて、確認、留意すべき項目がありましたら、ご教示頂きたく、よろしくお願い申し上げます。

ファイル ファイルの説明
241222_AWS-nodered.png
コメント

at_reika.yamazaki

2024年12月23日 17時08分

お世話になっております。山崎です。

>Could not resolve host: d074(省略)-ats.iot.ap-northeast-1.amazonaws.com
上記のエラーメッセージにあるように、msg.aws_iot_host に "xxx-ats.iot.ap-northeast-1.amazonaws.com" を設定しているのだと思います。
こちらを IoT Core REST API エンドポイント の例に示すように、"iot.ap-northeast-1.amazonaws.com" に変更して試してみてください。

以上、どうぞよろしくお願いいたします。

山崎様
大変お世話になっております。
ご教示ありがとうございました。
IoT Core REST API エンドポイント の例に示すように、"iot.ap-northeast-1.amazonaws.com" に変更してみましたが、
同様なエラーがでております。(添付ご参照)

ちょっと気になったのですが、pdfのマニュアルではなく、
貴社Howtoの方には、Node-redの右側にある環境変数の方にも、AWS_ACCESS_KEY_ID含め5つの変数を
設定するような記述がありますが、Node内の設定だけでなく、こちらも設定が必要ということでしょうか。
https://armadillo.atmark-techno.com/howto/iotg_a6e-node-red-demo-aws

恐れ入りますが、ご教授のほど、お願いします。

ファイル ファイルの説明
Node-red error.png

at_reika.yamazaki

2024年12月24日 19時12分

お世話になっております。山崎です。

>ちょっと気になったのですが、pdfのマニュアルではなく、
>貴社Howtoの方には、Node-redの右側にある環境変数の方にも、AWS_ACCESS_KEY_ID含め5つの変数を
>設定するような記述がありますが、Node内の設定だけでなく、こちらも設定が必要ということでしょうか。
>https://armadillo.atmark-techno.com/howto/iotg_a6e-node-red-demo-aws

上記 howto では Node-RED の環境変数に AWS_ACCESS_KEY_ID 等を設定していますが、こちらと同じ設定を開発ガイドでは Credentials ノードを使用して設定しております。そのため、環境変数は不要です。

二点確認です。
一点目、弊社の提供する Node-RED コンテナを使用して開発ガイドの「4.6. AWS へデバイス情報を送信するフローを作成する」の手順に沿って順番に実行しているという認識ですが、相違なかったでしょうか?

二点目、添付いただいた画像では「ノード:デバイス証明書の登録」の箇所でエラーがでているようですが、エラーしているのは「4.6.5 デバイスを登録するフローの作成」ではなく、「4.6.7 デバイス証明書を登録するフローの作成」ということでよろしいでしょうか?
・ 4.6.7. デバイス証明書を登録するフローの作成
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_n… 

ご確認いただけますと幸いです。
以上、どうぞよろしくお願いいたします。

山崎様
大変お世話になっております。
ご確認ありがとうございました。

> 上記 howto では Node-RED の環境変数に AWS_ACCESS_KEY_ID 等を設定していますが、こちらと同じ設定を開発ガイドでは Credentials ノードを使用して設定しております。そのため、環境変数は不要です。
->承知しました。

> 二点確認です。
> 一点目、弊社の提供する Node-RED コンテナを使用して開発ガイドの「4.6. AWS へデバイス情報を送信するフローを作成する」の手順に沿って順番に実行しているという認識ですが、相違なかったでしょうか?
->はい、そのとおりです。

> 二点目、添付いただいた画像では「ノード:デバイス証明書の登録」の箇所でエラーがでているようですが、エラーしているのは「4.6.5 デバイスを登録するフローの作成」ではなく、「4.6.7 デバイス証明書を登録するフローの作成」ということでよろしいでしょうか?
‐> 4.6.4. デバイス証明書を取得するフローの作成、までは問題なく確認できており、現在、4.6.5. デバイスを登録するフローの作成、図4.61 デバイスを登録するフローに記載のnode構成・設定の箇所で、Injectボタンを押しても"thingName:001234567890"がデバックメッセージに表示されず、エラーがでている状態です。

その先のフローにはまだ進んでおりません。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_n… 
以上、よろしくお願い申し上げます。

at_reika.yamazaki

2024年12月25日 11時16分

お世話になっております。山崎です。

ご確認ありがとうございます。

>>>‐> 4.6.4. デバイス証明書を取得するフローの作成、までは問題なく確認できており、現在、4.6.5. デバイスを登録するフローの作成、図4.61 デバイスを登録するフローに記載のnode構成・設定の箇所で、Injectボタンを押しても"thingName:001234567890"がデバックメッセージに表示されず、エラーがでている状態です。
>
>その先のフローにはまだ進んでおりません。

以下のリンクに示すように、「4.6.5. デバイスを登録するフローの作成」でエラーしているということで了解しました。
・4.6.5. デバイスを登録するフローの作成
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_n…

いくつか設定内容について確認です。

1. [接続情報の登録] ノードのプロパティは以下の4つが全部設定されているという認識であっていますか?
・ aws_access_key
・ aws_secret_key
・ aws_iot_region
・ aws_iot_host

2. [デバイス登録の引数設定] ノードは [図 4.58 [exec queue] ノードのプロパティ内容] に示す内容になっているでしょうか?

3. [デバイス登録] ノードは [図 4.59 [exec queue] ノードのプロパティ内容] に示す内容になっているでしょうか?
ここまでの設定内容に問題がなければデバッグタブに [ノード:デバイス登録] の内容が出力されているかと思うのですがそちらの出力はないでしょうか?

以上、追加でご確認いただければと思います。
どうぞよろしくお願いいたします。

山崎様

大変お世話になっております。
確認事項について、ありがとうございました。
いまいちど確認しますが、一旦、現状でご回答致します。

> 1. [接続情報の登録] ノードのプロパティは以下の4つが全部設定されているという認識であっていますか?
> ・ aws_access_key
> ・ aws_secret_key
> ・ aws_iot_region
> ・ aws_iot_host
->はい、何れもノードプロパティとして設定済です。

> 2. [デバイス登録の引数設定] ノードは [図 4.58 [exec queue] ノードのプロパティ内容] に示す内容になっているでしょうか?
‐>はい、そのままコピーアンドペーストで設定済です。

> 3. [デバイス登録] ノードは [図 4.59 [exec queue] ノードのプロパティ内容] に示す内容になっているでしょうか?
> ここまでの設定内容に問題がなければデバッグタブに [ノード:デバイス登録] の内容が出力されているかと思うのですがそちらの出力はないでしょうか?
->[ノード:デバイス登録 ]の出力結果が、添付のとおり、エラーメッセージとなっている状態です。
 (エンドポイントをiot-ap-northeast・・・としても同様で、msg: string[526]以下、エラーがでております)

そもそもArmadillo本体からAWSにNWが通っているか?は未だ調べておりませんが、pingで外につながっているかを
確認した方がよろしいでしょうか?

以上、アドバイスのほど、よろしくお願い申し上げます。

ファイル ファイルの説明
241222_AWS-nodered.png

at_reika.yamazaki

2024年12月25日 15時31分

お世話になっております。山崎です。

各ノードの設定はできているということですね。
しかし、依然としてエラーがでているということで了解です。

>->[ノード:デバイス登録 ]の出力結果が、添付のとおり、エラーメッセージとなっている状態です。
> (エンドポイントをiot-ap-northeast・・・としても同様で、msg: string[526]以下、エラーがでております)

こちらでも同じエラーが再現できないか確認しています。
確認できた内容としましては、 [接続情報の登録] ノードに与える aws_iot_host を "iot.ap-northeast-1.amazonaws.com" 以外にすると " Could not resolve host: xxx" という文字列が表示されることが確認できました。しかし、こちらの文字列は "iot.ap-northeast-1.amazonaws.com" に修正していただいたという認識です。(添付いただいた画像は最初に問い合わせいただいたものと同じため、修正前のものという認識です)

フローに問題があるのか、それ以外の問題なのか切り分けできればと思います。
こちらで作成した「デバイス登録フロー」を書き出した 2024-12-25.aws_new_thing.txt を添付します。
ファイルの内容をご使用の Node-RED メニューの「読み込み」から貼り付けると、「デバイス登録フロー」のフローが新しく表示されることと思います。
このフロー内の [接続情報の登録] ノードにご使用の内容を設定してデプロイして実行してみてください。
エラー内容に変化がない場合はフロー外の要因の可能性が高いです。
もし、実行に失敗する等ありましたらお手数ですがご連絡ください。

以上、どうぞよろしくお願いいたします。

ファイル ファイルの説明
2024-12-25.aws_new_thing.txt デバイス登録フローの内容を書き出したファイルです。

山崎様

お世話になっております。
ご丁寧にありがとうございます。

> ファイルの内容をご使用の Node-RED メニューの「読み込み」から貼り付けると、「デバイス登録フロー」のフローが新しく表示されることと思います。
> このフロー内の [接続情報の登録] ノードにご使用の内容を設定してデプロイして実行してみてください。
> エラー内容に変化がない場合はフロー外の要因の可能性が高いです。
> もし、実行に失敗する等ありましたらお手数ですがご連絡ください。
‐>フローの作成は問題なく出来ました。ありがとうございました。
 デプロイの結果ですが、前回と同様なエラーがでております(添付ご参照)。

気になったので、teratermからarmadillo:~# にて、pingを打ってみましたが、
うまく通っていないようです。
原因の切り分けと対処法をご教示頂きたく、お願い申し上げます。

ファイル ファイルの説明
デバイス登録フロー_デプロイ結果.png
teraterm-ping.png

山崎様

大変お世話になっております。
先程、pingが通らないことをお伝えしましたが、ABOSで確認したところ、WLAN接続先の設定が誤っていたことが判明しました。
(ATDE開発環境上でWLAN接続ができていたので、Armadillo本体も接続できているものと誤解)
上記接続先を修正し、改めてNode-red上で試したところ、添付のとおり、“thingName”が取得できました。
大変お騒がせしました、ご対応ありがとうございました。

ファイル ファイルの説明
thingName取得.png
ping--.png

at_reika.yamazaki

2024年12月26日 13時51分

お世話になっております。山崎です。

WLAN 設定を修正したらつながるようになったということで良かったです。
ご連絡ありがとうございます。
また、ご不明な点等が出てきましたらお尋ねください。

以上、どうぞよろしくお願いいたします。

山崎様

度々恐れ入ります。
そのあとのプロセス、「4.6.6. AWS IoT ポリシーを作成するフローの作成」に進んでいるのですが、
お送りいただいたノードをベースに、設定項目のthingNameの部分をpolicy_nameに置き換えて記述(一部書き換え)すると、
SyntaxError: Unexpected end of JSON input
というエラーがでます。(添付:policy_一部改編.pdf ご参照)

このため、マニュアル通りに各ノードの内容を設定(記述)したものでも試してみましたが、
SyntaxError: Unexpected token 's', "ssse-flw: "... is not valid JSON
というエラーがでます。(添付:policy_manual-default.pdf ご参照)

その次の「4.6.7. デバイス証明書を登録するフローの作成」、さらにそのあとの
「4.6.8. AWS IoT ポリシーをデバイスにアタッチするフローの作成」含めてまして、
マニュアルと異なる設定内容の記述が必要な部分があるようでしたら、ご教示頂きたく、
お願い申し上げます。

ファイル ファイルの説明
policy_一部改編.pdf ご送付頂いたノード設定の一部を追記、書き換えしたもの
policy_manual-default.pdf Node-red開発ガイドの通りにノード設定を行ったもの

at_reika.yamazaki

2024年12月26日 16時27分

お世話になっております。山崎です。

>お送りいただいたノードをベースに、設定項目のthingNameの部分をpolicy_nameに置き換えて記述(一部書き換え)すると、

こちら、添付いただいた policy_一部改編.pdf の内容を見ると、exec queue ノードの内容がデバイス登録のスクリプトのままになっています。
こちらのスクリプトは policy_manual-default.pdf に貼っていただいたように、「新しいポリシーの作成」のスクリプトの内容に変更する必要があります。

続いて、policy_manual-default.pdf が開発ガイドに沿って設定していただいたということですが、
"com.amazon.coral.service#serializationexception" が表示されてるため、設定内容に誤りがある可能性があります。
[接続情報の登録] ノードの内容はデバイス登録時に使用したものに、[aws_policy_name] を追加すれば問題ないという認識です。もし変更した場合は戻してみてください。

以上、どうぞよろしくお願いいたします。

山崎様

大変お世話になっております。
ご確認ありがとうございました。
> こちら、添付いただいた policy_一部改編.pdf の内容を見ると、exec queue ノードの内容がデバイス登録のスクリプトのままになっています。
> こちらのスクリプトは policy_manual-default.pdf に貼っていただいたように、「新しいポリシーの作成」のスクリプトの内容に変更する必要があります。
->exec queue ノードの内容を添付の通り修正してみましたが、”policyName:undefined”というエラーがでました。
 なお、その他のノードは先程お送りしたpolicy_一部改編.pdf のままとしています。

> "com.amazon.coral.service#serializationexception" が表示されてるため、設定内容に誤りがある可能性があります。
> [接続情報の登録] ノードの内容はデバイス登録時に使用したものに、[aws_policy_name] を追加すれば問題ないという認識です。もし変更した場合は戻してみてください。
-> こちらのご説明をよく理解できていないのですが、 [接続情報の登録] ノードのなかの[msg. aws_policy_name]の[private]欄に、私がAWSで設定した
 ポリシーの名前を記述すればOKという意でしょうか?
もしそうだとすると、現状、その名称で設定(入力)して、諸々試しております。

以上ですが、アドバイス頂きたく、よろしくお願い申し上げます。

ファイル ファイルの説明
new_policy.png

at_reika.yamazaki

2024年12月26日 19時06分

お世話になっております。山崎です。

>->exec queue ノードの内容を添付の通り修正してみましたが、”policyName:undefined”というエラーがでました。
> なお、その他のノードは先程お送りしたpolicy_一部改編.pdf のままとしています。

こちら了解です。

>-> こちらのご説明をよく理解できていないのですが、 [接続情報の登録] ノードのなかの[msg. aws_policy_name]の[private]欄に、私がAWSで設定した
> ポリシーの名前を記述すればOKという意でしょうか?
>もしそうだとすると、現状、その名称で設定(入力)して、諸々試しております。

こちらはデバイス登録できたときの [接続情報の登録] ノードに [msg. aws_policy_name] を追加しているということで了解です。
だとすると、[接続情報の登録] ノードは問題ないと思います。

また、追加で確認していただきたいのですが、[ポリシー登録の引数設定] を確認したところ、開発ガイドと異なっていると思われます。
以下のように修正して、ご確認いただけますでしょうか?

msg.payload = msg.aws_access_key + ":" + msg.aws_secret_key
    + " " + msg.aws_iot_region 
//    + " " + msg.aws_iot_host; 
    + " " + msg.aws_iot_host
    + " " + msg.aws_policy_name;
return msg;

こちらでは上記コードのコメントアウトを外したところ、同様のエラーが確認できたため、上記を修正していただけたらうまくいくのではと思います。
以上、どうぞよろしくお願いいたします。

山崎様

大変お世話になっております。
詳細ご確認頂き、ありがとうございました。

> 以下のように修正して、ご確認いただけますでしょうか?
->ご提示頂いた内容のとおり、[ポリシー登録の引数設定] を修正しましたが、添付エラーが表示されます。
 ちなみに、//でコメントアウトした行を削除しても同様です。

以上ですが、よろしくお願い申し上げます。

ファイル ファイルの説明
policy--.png

at_reika.yamazaki

2024年12月27日 10時55分

お世話になっております。山崎です。

>->ご提示頂いた内容のとおり、[ポリシー登録の引数設定] を修正しましたが、添付エラーが表示されます。
> ちなみに、//でコメントアウトした行を削除しても同様です。

添付画像ありがとうございます。
エラー内容が "com.amazon.coral.service#serializationexception" から "{Message:null}" に変化したため、要因が別になったと思います。
このメッセージはホストに届いてはいるもののレスポンスメッセージがないことを示します。

恐れ入りますが、 Node-RED のログよりステータスコードをご確認いただけますでしょうか?
現在 http://<ipアドレス>:1880 にアクセスして Node-RED の GUI を表示していると思います。
この URL を http://<ipアドレス>:1880/node-red.log に変更すると、デバッグタブでは表示しきれないログについても確認することが可能です。
ログについてのもう少し詳しい説明は開発ガイドの以下をご覧ください。
・4.2. Node-RED コンテナのログを表示する
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_n…

こちらのログの中に [新しいポリシーの作成] 時に以下のようなステータスコードが表示されていると思います。

* We are completely uploaded and fine
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [157 bytes data]
< HTTP/2 200 ★

★をつけた箇所のステータスコードの値が原因特定に役立つ可能性があります。
こちらをご確認いただけますと幸いです。

以上、どうぞよろしくお願いいたします。

山崎様
大変お世話になっております。
確認方法のご教示、ありがとうございました。
> こちらのログの中に [新しいポリシーの作成] 時に以下のようなステータスコードが表示されていると思います。
>

> * We are completely uploaded and fine
> { [5 bytes data]
> * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
> { [157 bytes data]
> < HTTP/2 200 ★
> 

> ★をつけた箇所のステータスコードの値が原因特定に役立つ可能性があります。
> こちらをご確認いただけますと幸いです。
‐>確認しました。添付の通り、< HTTP/2 400となっているようです。

以上、よろしくお願い申し上げます。

ファイル ファイルの説明
node-red_log.png

at_reika.yamazaki

2024年12月27日 13時11分

お世話になっております。山崎です。

>‐>確認しました。添付の通り、< HTTP/2 400となっているようです。
確認ありがとうございます。
400 なので [新しいポリシーの作成] で送信している内容に原因がありそうです。
改めて new_policy.png を確認したところ、-d の行が改行されており、これが原因なのではと思います。
以下のように [新しいポリシーの作成] のスクリプトを設定して、ご確認いただけますでしょうか?

AWS_ACCESS="$1"
AWS_REGION="$2"
ENDPOINT="$3"
POLICY_NAME="$4"
URI=/policies/${POLICY_NAME}
 
curl \
        -H "Content-type: application/json" \
        --cacert /cert/AmazonRootCA1.pem \
        --user "${AWS_ACCESS}" \
        --aws-sigv4 "aws:amz:${AWS_REGION}:execute-api" \
        -d '{"policyDocument": "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\",\"Action\": \"iot:*\",\"Resource\": \"*\"}]}"}' \
        --request POST -v \
        "https://${ENDPOINT}${URI}"

以上、どうぞよろしくお願いいたします。

山崎様

大変お世話になっております。
詳細ご確認、ありがとうございました。
まさにそちらが原因でした。
改行せずにつなげて記述したところ、無事に policyName:policy_for_A6E が出力されました。
ようやく次の工程に進めます。

改めてお礼申し上げます。

at_reika.yamazaki

2024年12月27日 16時07分

お世話になっております。山崎です。

無事にポリシーが作成できたということで良かったです。
また、ご不明な点等が出てきましたらお尋ねください。

以上、どうぞよろしくお願いいたします。