kazuhikokato
2023年4月8日 17時44分
ご担当者様
お世話になります。
題記、スタートアップガイド26ページからのAWSにアップロードするテストを行なっていますが、
26ページの3.サンプルコードの実行で #python3 publish.py [endpoint] 実行したところ
下記エラーが発生しています。
root@armadillo:~# python3 publish.py *******************-1.amazonaws.com
Traceback (most recent call last):
File "publish.py", line 119, in
main()
File "publish.py", line 100, in main
publish_msg = get_jsondata().encode('utf-8')
File "publish.py", line 57, in get_jsondata
sensor["temprature"] = get_temperature()
File "publish.py", line 19, in get_temperature
proc = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
File "/usr/lib/python3.5/subprocess.py", line 383, in run
with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'text'
publish.pyを精査しており、取得した温度のデータ型の相違のようにも思えるのですが、
見識も浅いため、エラーが修正できていません。
誠に恐縮ですが、原因となるようなところをご教示お願いします。
加藤
コメント
kazuhikokato
ご連絡ありがとうございます。
ご連絡いただいた通りpublish.py 中の19 行目、31行目のtext引数を削除してテストした結果、
一度MQTTが送信され、AWS上でも受信が確認できたのですが、
そのあとにboto3でエラーが発生しています。
添付エラーのファイル見ると
原因は、boto3がPython 3.5はサポートしておらず、
Python 3.6以上にアップグレードが必要と考えられますが、
この理解でよろしいでしょうか?
もしそうであれば、armadillo G3のPython 3.6以上にアップグレードしたいのですが、
➀アップグレードはarmadillo G3上では、特に問題無いのでしょうか?
②Debian でのpython アップグレードのコマンドはどのように記述すればいいのでしょうか?
なお当方のArmadillo-IoTゲートウェイ G3 の仕様は下記です。
M1-D モデル AGX3142-D00Z 開発セット
以上ご教示お願いします。
加藤
ファイル | ファイルの説明 |
---|---|
boto3_error.txt |
at_takumi.mizutani
ご確認いただきありがとうございます。
> 添付エラーのファイル見ると
> 原因は、boto3がPython 3.5はサポートしておらず、
> Python 3.6以上にアップグレードが必要と考えられますが、
> この理解でよろしいでしょうか?
いえ、エラー発生の原因としてはPythonバージョンの方ではなく、エラーメッセージの一番下の部分の "NoRegionError" の方です。
こちらのエラーは、boto3.client()の引数に region_name='お使いのリージョン名' と追加することで恐らく解決します。
ですが、添付いただいたファイル中のメッセージにもあるようにBoto3は2021/02/01以降Python3.5のサポートを行っておりませんので、Python3.6以降へのアップデートを推奨いたします。
> ➀アップグレードはarmadillo G3上では、特に問題無いのでしょうか?
もし他にPython3系をお使いのアプリケーションがございましたら、そちらに影響がないかの確認はしていただいたほうが良いと思います。
> ②Debian でのpython アップグレードのコマンドはどのように記述すればいいのでしょうか?
恐らく加藤様の使用されているdebianのバージョンはStretchだと思うのですが、StretchではPythonのデフォルトバージョンがPython3.5となります。
もしStretchのままPython3.6以降をご利用になりたい場合は、以下のサイトのようにPython3.6以降のソースをビルドしていただき、インストールしていただくという手順になります。
https://www.electrosoftcloud.com/en/install-python-3-on-debian9/
以上、よろしくお願いいたします。
kazuhikokato
ご確認いただきありがとうございます。
>いえ、エラー発生の原因としてはPythonバージョンの方ではなく、エラーメッセージの一番下の部分の
>"NoRegionError" の方です。
>こちらのエラーは、boto3.client()の引数に region_name='お使いのリージョン名' と追加することで
>恐らく解決します。
アップグレードせずにpython3.5のままで、publish.pyのboto3.client()の引数に
region_name=********を追加して試したところ、添付ファイルのように
credentialsに関するエラーが発生しました。
申し訳ありませんが、対応方法をご教示いただければと思います。
以上、よろしくお願いいたします。
加藤
ファイル | ファイルの説明 |
---|---|
credencials_error.txt |
at_takumi.mizutani
水谷です。
> ご確認いただきありがとうございます。
> >いえ、エラー発生の原因としてはPythonバージョンの方ではなく、エラーメッセージの一番下の部分の
> >"NoRegionError" の方です。
> >こちらのエラーは、boto3.client()の引数に region_name='お使いのリージョン名' と追加することで
> >恐らく解決します。
>
> アップグレードせずにpython3.5のままで、publish.pyのboto3.client()の引数に
> region_name=********を追加して試したところ、添付ファイルのように
> credentialsに関するエラーが発生しました。
> 申し訳ありませんが、対応方法をご教示いただければと思います。
>
> 以上、よろしくお願いいたします。
>
> 加藤
先日「もしStretchのままPython3.6以降をご利用になりたい場合は…」という案内をしてしまいましたが、
スタートアップガイドの内容としてはBusterでの開発を想定しておりますので、特にStretchでの開発にこだわる理由が無ければBusterにて開発を進めていただく方が良いと思います。
お手数ですが、ご検討の程よろしくお願いいたします。
kazuhikokato
at_takumi.mizutani
> ご連絡ありがとうございます。
> BusterでもAWS接続可能であれば、切り替えますが、
> Busterのインストール方法ご教示いただけますか?
> よろしくお願いします。
> 加藤
Busterバージョンのインストール方法については「Armadillo-IoT ゲートウェイ G3 製品マニュアル (Debian GNU/Linux 10 対応) 11.1. インストールディスクを使用する」をご確認ください。
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
インストールディスクは「Debian GNU/Linux 10 (buster) イメージファイル(Armadillo-IoT G3 ※3G/LTE非搭載モデル)」をご利用ください。
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3…
また、1点確認なのですが、タイトルにて「armadillo-IoT G3 3G開発セットスタートアップガイドでの…」とございますが今回の開発では3G回線はご利用になられますか?
そうでなければ問題ございませんが、3G回線は停波することが決まっておりますので、もしWWANのご利用を想定している場合はG3 LTE対応モデルへの買い替えをご検討いただく必要があるかと存じます。
以上、ご確認のほどよろしくお願いいたします。
kazuhikokato
ご連絡ありがとうございます。
ご連絡いただいた手順で
Busterバージョンのインストールを実施してみようと思います。
>また、1点確認なのですが、タイトルにて「armadillo-IoT G3 3G開発セットスタートアップガイドでの…」と
>ございますが今回の開発では3G回線はご利用になられますか?
>そうでなければ問題ございませんが、3G回線は停波することが決まっておりますので、
>もしWWANのご利用を想定している場合はG3 LTE対応モデルへの買い替えを
>ご検討い>ただく必要があるかと存じます。
→ この件ですが、こちらでのタイトル記載ミスで、
正しくは「armadillo-IoT G3 開発セットスタートアップガイドでの…」です。
申し訳ありませんでした。
>3G回線は停波することが決まっておりますので、もしWWANのご利用を想定している場合は
>G3 LTE対応モデルへの買い替えをご検討いただく必要があるかと存じます。
→こちらで使用している機種はarmadillo-IoT ゲートウェイG3 M1-Dモデル開発セットです。
(P/N:AGX3142-D00Z)
この製品はLTEに使えないのでしょうか?
ご教示お願いします。
加藤
at_takumi.mizutani
> → この件ですが、こちらでのタイトル記載ミスで、
> 正しくは「armadillo-IoT G3 開発セットスタートアップガイドでの…」です。
> 申し訳ありませんでした。
>
> >3G回線は停波することが決まっておりますので、もしWWANのご利用を想定している場合は
> >G3 LTE対応モデルへの買い替えをご検討いただく必要があるかと存じます。
> →こちらで使用している機種はarmadillo-IoT ゲートウェイG3 M1-Dモデル開発セットです。
> (P/N:AGX3142-D00Z)
> この製品はLTEに使えないのでしょうか?
M1モデルご利用との旨承知しました。
M1モデルでしたらLTEをご利用いただくことが出来ます。
また、Busterインストールの件で一点訂正で、
インストールディスクイメージは「Armadillo-IoT G3 ※3G/LTE非搭載モデル」と記載しているものをご利用くださいと書きましたが、
M1モデルの場合は「Armadillo-IoT G3 M1モデル向け」と記載しているものをご利用ください。
手順については先程記載したURLの通りで問題ございません。
以上、よろしくお願いいたします。
kazuhikokato
at_takumi.mizutani
kazuhikokato
kazuhikokato
kazuhikokato
kazuhikokato
kazuhikokato
Debian をbusterにアップし再度AWSへ送信したところ、
相変わらずNoRegionErrorが発生します。
botocore.exceptions.NoRegionError: You must specify a region.
debian_versionは10.13 Pythonは 3.7.3です。
publish.pyはそちらのh/pからダウンロードしたもので修正は加えていません。
この質問内で数回前でも同じNoRegionエラーが出ており、これを
修正しても、また別のエラーが発生していました。
debian とpythonをアップデートしてもエラーが改善されていないのですが、
どのように対応したらよろしいいでしょうか?
ご教示ください。
加藤
kazuhikokato
region_name= **** を追加してpublish.pyを実行しましたが
下記の通り前回同様、credentialsエラーが発生しました。
申し訳ありませんが対応策ご教示お願いします。
root@armadillo:~# python3 publish.py *******-1.amazonaws.com Response status: 200 Response body: {"message":"OK","traceId":"f4207436-2e24-3af4-7038-2f49*******"} Traceback (most recent call last): File "publish.py", line 119, in <module> main() File "publish.py", line 109, in main shadow_state = get_shadow(url) File "publish.py", line 71, in get_shadow res = iot_data.get_thing_shadow(thingName=THING_NAME) File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 530, in _api_call return self._make_api_call(operation_name, kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 944, in _make_api_call operation_model, request_dict, request_context File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 966, in _make_request return self._endpoint.make_request(operation_model, request_dict) File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 119, in make_request return self._send_request(request_dict, operation_model) File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 198, in _send_request request = self.create_request(request_dict, operation_model) File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 137, in create_request operation_name=operation_model.name, File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 412, in emit return self._emitter.emit(aliased_event_name, **kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 256, in emit return self._emit(event_name, kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 239, in _emit response = handler(**kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 105, in handler return self.sign(operation_name, request) File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 189, in sign auth.add_auth(request) File "/usr/local/lib/python3.7/dist-packages/botocore/auth.py", line 418, in add_auth raise NoCredentialsError() botocore.exceptions.NoCredentialsError: Unable to locate credentials
at_takumi.mizutani
> region_name= **** を追加してpublish.pyを実行しましたが
> 下記の通り前回同様、credentialsエラーが発生しました。
>
> 申し訳ありませんが対応策ご教示お願いします。
以下Howto記事の「2.2 AWS CLI インストール」の手順を実施し、上記エラーが解消されるかご確認いただけますでしょうか。
https://armadillo.atmark-techno.com/howto/armadillo_iot_g4-detect-objec…
以上、よろしくお願いいたします。
kazuhikokato
> 以下Howto記事の「2.2 AWS CLI インストール」の手順を実施し、上記エラーが解消されるかご確認いただけますでしょうか。
> https://armadillo.atmark-techno.com/howto/armadillo_iot_g4-detect-objec…
「2.2 AWS CLI インストール」を実施しました。
PS C:\Users\USER> aws --version
aws-cli/2.11.13 Python/3.11.3 Windows/10 exe/AMD64 prompt/off
PS C:\Users\USER> aws configure
AWS Access Key ID [None]: AWS123
AWS Secret Access Key [None]: AWS-access
Default region name [None]: ap-northeast-1
Default output format [None]: json
PS C:\Users\USER>
下記の通り前回同様、credentialsエラーが発生しました。(エラーメッセージは前回同一内容と思います。)
申し訳ありませんが至急確実な対応策ご教示お願いします。
root@armadillo:~# python3 publish.py *************ap-northeast-1.amazonaws.com Response status: 200 Response body: {"message":"OK","traceId":"651ea75a-fa33-f396-5fdb-61b36*******"} Traceback (most recent call last): File "publish.py", line 119, in <module> main() File "publish.py", line 109, in main shadow_state = get_shadow(url) File "publish.py", line 71, in get_shadow res = iot_data.get_thing_shadow(thingName=THING_NAME) File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 530, in _api_call return self._make_api_call(operation_name, kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 944, in _make_api_call operation_model, request_dict, request_context File "/usr/local/lib/python3.7/dist-packages/botocore/client.py", line 966, in _make_request return self._endpoint.make_request(operation_model, request_dict) File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 119, in make_request return self._send_request(request_dict, operation_model) File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 198, in _send_request request = self.create_request(request_dict, operation_model) File "/usr/local/lib/python3.7/dist-packages/botocore/endpoint.py", line 137, in create_request operation_name=operation_model.name, File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 412, in emit return self._emitter.emit(aliased_event_name, **kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 256, in emit return self._emit(event_name, kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/hooks.py", line 239, in _emit response = handler(**kwargs) File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 105, i n handler return self.sign(operation_name, request) File "/usr/local/lib/python3.7/dist-packages/botocore/signers.py", line 189, i n sign auth.add_auth(request) File "/usr/local/lib/python3.7/dist-packages/botocore/auth.py", line 418, in a dd_auth raise NoCredentialsError() botocore.exceptions.NoCredentialsError: Unable to locate credentials root@armadillo:~#
at_takumi.mizutani
> 「2.2 AWS CLI インストール」を実施しました。
> PS C:\Users\USER> aws --version
> aws-cli/2.11.13 Python/3.11.3 Windows/10 exe/AMD64 prompt/off
> PS C:\Users\USER> aws configure
> AWS Access Key ID [None]: AWS123
> AWS Secret Access Key [None]: AWS-access
> Default region name [None]: ap-northeast-1
> Default output format [None]: json
> PS C:\Users\USER>
もし違ったら申し訳ございませんが、
PS C:\Users\USER> となっておりますがこちらはWindows PC上で実施されておりますか。
もしそうでしたら、こちらの手順はArmadillo上で実施してください。
> AWS Access Key ID [None]: AWS123
> AWS Secret Access Key [None]: AWS-access
また、"AWS123" 及び "AWS-access" については 例示されている文字列ですので、
もしそのまま入力されている場合には加藤様のAccess key ID 及び Secret access key に置き換えて入力してください。
以上、よろしくお願いいたします。
kazuhikokato
>PS C:\Users\USER> となっておりますがこちらはWindows PC上で実施されておりますか。
>もしそうでしたら、こちらの手順はArmadillo上で実施してください。
申し訳ありません。PC上で実行していました。
改めてArmadilloでAWS CLI インストール中、下記エラーが発生しました。
aws: cannot execute binary file: Exec format error
つきましては下記2点ご回答お願いします。
1.ダウンロードするarmadillo用AWS CLIインストールファイルは’Linux ARM’でよろしいでしょうか?
なお、今回のインストールは’Linux ARM’用で行っています。
2. インストール命令の sudo ./aws/install の後に ./aws/install -i /usr/local/aws-cli -b /usr/local/bin の
命令は必要なのでしょうか?(この命令の意味が分からずお聞きする次第です。)
以上よろしくお願いします。
root@armadillo:~# aws --version -bash: /usr/local/bin/aws: cannot execute binary file: Exec format error
kazuhikokato
at_kazutaka.bito
尾藤です。
横から失礼します。
当方の確認では、2023年4月17日 16時59分に投稿の状態と同じく、credentialsエラーが発生したところから、
AWS CLIを使わずに下記のようにpublish.pyを編集することでcredentialsエラーが発生しなくなりました。
ご参考まで。
publish.pyの変更箇所の設定について、仮に、
リージョンコード:hogehoge
アクセスキーID:12345678
シークレットアクセスキー:abcdefgh
とします。
publish.py
に2か所存在する
iot_data = boto3.client("iot-data", endpoint_url=url)
の行を、2か所とも
iot_data = boto3.client( "iot-data", region_name='hogehoge', aws_access_key_id='12345678', aws_secret_access_key='abcdefgh', endpoint_url=url )
に変更します。
(リージョンコード、アクセスキーID、シークレットアクセスキーは、シングルクォートで囲いました。)
kazuhikokato
at_takumi.mizutani
2023年4月10日 17時40分
水谷です。
> 題記、スタートアップガイド26ページからのAWSにアップロードするテストを行なっていますが、
> 26ページの3.サンプルコードの実行で #python3 publish.py [endpoint] 実行したところ
> 下記エラーが発生しています。
> root@armadillo:~# python3 publish.py *******************-1.amazonaws.com
> Traceback (most recent call last):
> File "publish.py", line 119, in
> main()
> File "publish.py", line 100, in main
> publish_msg = get_jsondata().encode('utf-8')
> File "publish.py", line 57, in get_jsondata
> sensor["temprature"] = get_temperature()
> File "publish.py", line 19, in get_temperature
> proc = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
> File "/usr/lib/python3.5/subprocess.py", line 383, in run
> with Popen(*popenargs, **kwargs) as process:
> TypeError: __init__() got an unexpected keyword argument 'text'
>
> publish.pyを精査しており、取得した温度のデータ型の相違のようにも思えるのですが、
> 見識も浅いため、エラーが修正できていません。
> 誠に恐縮ですが、原因となるようなところをご教示お願いします。
subprocessモジュールのtext引数はver3.7以降で追加されており、それ以前のpythonの場合上記エラーが発生してしまうようです。
https://docs.python.org/ja/3.7/library/subprocess.html
お手数ですが、publish.py 中の19 行目、31行目を以下のように変更してみてください。
以上、よろしくお願いいたします。