翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Windows または Linux PC または Mac を AWS IoT デバイスとして使用する
このチュートリアルでは、 で使用するパーソナルコンピュータを設定します AWS IoT。これらの手順では、Windows、LinuxPCs、Mac をサポートしています。これを行うには、コンピュータにソフトウェアをインストールする必要があります。コンピュータにソフトウェアをインストールしたくない場合は、すべてのソフトウェアを仮想マシンにインストールする Amazon で仮想デバイスを作成する EC2 を試すことができます。
このチュートリアルでは、次の作業を行います。
パーソナルコンピュータを設定する
このチュートリアルを完了するには、インターネットに接続した Windows もしくは Linux PC または Mac が必要です。
次のステップに進む前に、コンピュータでコマンドラインウィンドウを開くことができることを確認してください。Windows PC で cmd.exe を使用します。Linux PC または Mac では、Terminal を使用します。
Git、Python、 AWS IoT Device SDK for Python のインストール
このセクションでは、Python と AWS IoT Device SDK for Python をコンピュータにインストールします。
Git と Python の最新バージョンをインストールする
この手順では、最新バージョンの Git と Python をパーソナルコンピュータにインストールする方法について説明します。
Git と Python をダウンロードしてコンピュータにインストールするには
-
Git がコンピュータにインストールされているかどうかを確認します。このコマンドをコマンドラインに入力します。
git --version
コマンドが Git バージョンを表示する場合は、Git がインストールされており、次のステップに進むことができます。
コマンドがエラーを表示する場合は、
https://git-scm.com/download
を開いてコンピュータに Git をインストールします。 -
Python が既にインストールされているかどうかを確認します。このコマンドをコマンドラインに入力します。
python -V
注記
このコマンドがエラー
Python was not found
を表示する場合、オペレーティングシステムが Python v3.x 実行可能ファイルをPython3
として呼び出していることが原因である可能性があります。その場合は、python
のすべてのインスタンスをpython3
に置き換えて、このチュートリアルの残りの部分を続行してください。コマンドが Python のバージョンを表示する場合、Python は既にインストールされています。このチュートリアルには、Python v3.7 以降が必要です。
-
Python がインストールされている場合は、このセクションの残りの手順を省略できます。インストールされていない場合は、続行します。
-
https://www.python.org/downloads/
を開き、コンピュータのインストーラをダウンロードします。 -
ダウンロードが自動的にインストールを開始しなかった場合は、ダウンロードしたプログラムを実行して Python をインストールします。
-
Python のインストールを確認します。
python -V
コマンドが Python バージョンを表示することを確認します。Python のバージョンが表示されない場合は、再度 Python をダウンロードしてインストールしてください。
AWS IoT Device SDK for Python をインストールする
Device AWS IoT SDK for Python をコンピュータにインストールするには
-
AWS IoT Device SDK for Python の v2 をインストールします。
python3 -m pip install awsiotsdk
-
AWS IoT Device SDK for Python リポジトリをホームディレクトリの aws-iot-device-sdk-python-v2 ディレクトリにクローンします。この手順は、 としてインストールするファイルのベースディレクトリを参照します。
home
.の実際の場所
home
ディレクトリはオペレーティングシステムによって異なります。注記
PowerShell ではなく Windows を使用している場合はcmd.exe、次のコマンドを使用します。
echo $home
詳細については、AWS IoT 「Device SDK for Python GitHub リポジトリ
サンプルアプリケーションの実行を準備する
サンプルアプリケーションを実行するためにシステムを準備するには
-
certs
ディレクトリを作成します。certs
でモノのオブジェクトを作成および登録したときに保存したプライベートキー、デバイス証明書、およびルート CA 証明書ファイルを AWS IoT リソースの作成 ディレクトリにコピーします。送信先ディレクトリ内の各ファイルのファイル名は、テーブル内のファイル名と一致する必要があります。次のセクションのコマンドは、次の表に示すように、キーおよび証明書ファイルがデバイスに保存されていることを前提としています。
ポリシーを設定し、サンプルアプリケーションを実行する
このセクションでは、ポリシーを設定し、 AWS IoT Device SDK for Pythonの aws-iot-device-sdk-python-v2/samples
ディレクトリにある pubsub.py
サンプルスクリプトを実行します。このスクリプトは、デバイスがMQTTライブラリを使用してMQTTメッセージを発行およびサブスクライブする方法を示しています。
pubsub.py
サンプルアプリケーションは、トピック、test/topic
をサブスクライブし、そのトピックに対して10 個のメッセージを発行し、メッセージブローカーから受信したメッセージを表示します。
pubsub.py
サンプルスクリプトを実行するには、次の情報が必要です。
Parameter |
値がある場所 |
---|---|
your-iot-endpoint |
|
- your-iot-endpoint
値の形式は
です。例えば、 ですendpoint_id
-ats.iot.region
.amazonaws.coma3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com
。
スクリプトを実行する前に、モノのポリシーが、接続、サブスクライブ、発行、および受信するためのアクセス許可をサンプルスクリプトに提供していることを確認してください。
モノのリソースのポリシードキュメントを検索して確認するには
-
AWS IoT コンソール
の [Things] (モノ) リストで、デバイスを表すモノのリソースを検索します。 -
デバイスを表すモノのリソースの [Name] (名前) リンクを選択して、[Thing details] (モノの詳細) ページを開きます。
-
[Thing details] (モノの詳細) ページの [Certificates] (証明書) タブで、モノのリソースにアタッチされている証明書を選択します。リストに含まれる証明書は 1 つだけにする必要があります。複数の証明書がある場合は、デバイスにインストールされているファイルを含み、そのファイルが AWS IoT Coreへの接続に使用される証明書を選択します。
[Certificate] (証明書) 詳細ページの [Policies] (ポリシー) タブで、証明書にアタッチされているポリシーを選択します。1 つだけにする必要があります。複数のポリシーがある場合は、それぞれについて次の手順を繰り返して、少なくとも 1 つのポリシーで必要なアクセスが許可されていることを確認します。
-
ポリシーの概要ページで、JSONエディタを検索し、ポリシードキュメントの編集を選択して、必要に応じてポリシードキュメントを確認して編集します。
-
ポリシーJSONは次の例に表示されます。
"Resource"
要素で、 を各Resource
値の AWS アカウント AWS リージョン と
に置き換えます。region:account
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:
region:account
:topic/test/topic" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account
:topicfilter/test/topic" ] }, { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account
:client/test-*" ] } ] }
サンプルスクリプト:
-
AWS IoT Core アカウントの に接続します。
-
メッセージトピックの test/topic をサブスクライブし、そのトピックで受信したメッセージを表示します。
-
トピック test/topic に 10 個のメッセージを発行します。
-
次のような出力を表示します。
Connected! Subscribing to topic 'test/topic'... Subscribed with QoS.AT_LEAST_ONCE Sending 10 message(s) Publishing message to topic 'test/topic': Hello World! [1] Received message from topic 'test/topic': b'"Hello World! [1]"' Publishing message to topic 'test/topic': Hello World! [2] Received message from topic 'test/topic': b'"Hello World! [2]"' Publishing message to topic 'test/topic': Hello World! [3] Received message from topic 'test/topic': b'"Hello World! [3]"' Publishing message to topic 'test/topic': Hello World! [4] Received message from topic 'test/topic': b'"Hello World! [4]"' Publishing message to topic 'test/topic': Hello World! [5] Received message from topic 'test/topic': b'"Hello World! [5]"' Publishing message to topic 'test/topic': Hello World! [6] Received message from topic 'test/topic': b'"Hello World! [6]"' Publishing message to topic 'test/topic': Hello World! [7] Received message from topic 'test/topic': b'"Hello World! [7]"' Publishing message to topic 'test/topic': Hello World! [8] Received message from topic 'test/topic': b'"Hello World! [8]"' Publishing message to topic 'test/topic': Hello World! [9] Received message from topic 'test/topic': b'"Hello World! [9]"' Publishing message to topic 'test/topic': Hello World! [10] Received message from topic 'test/topic': b'"Hello World! [10]"' 10 message(s) received. Disconnecting... Disconnected!
サンプルアプリケーションの実行に問題がある場合は、サンプルアプリケーションの問題をトラブルシューティングする を確認してください。
コマンドラインに --verbosity Debug
パラメータを追加して、サンプルアプリケーションが実行内容に関する詳細なメッセージを表示するようにすることもできます。この情報は、問題の修正に役立ちます。
AWS IoT コンソールでサンプルアプリケーションからのメッセージを表示する
サンプルアプリケーションのメッセージは、AWS IoT コンソールのMQTTテストクライアントを使用してメッセージブローカーを通過するときに確認できます。
サンプルアプリケーションによって発行されたMQTTメッセージを表示するには
-
確認クライアントでMQTT AWS IoT MQTTメッセージを表示する。これにより、AWS IoT コンソールでMQTTテストクライアントを使用してMQTT、メッセージブローカーを通過するメッセージを表示する方法を学ぶことができます。
-
AWS IoT コンソール でMQTTテストクライアントを開きます。
-
「トピックへのサブスクライブ」で、トピック、「テスト/トピック」をサブスクライブします。
-
コマンドラインウィンドウで、サンプルアプリを再度実行し、 AWS IoT コンソールの MQTTクライアントでメッセージを確認します。
MQTT および が プロトコル AWS IoT Core をサポートする方法の詳細については、「」を参照してくださいMQTT。
Python で共有サブスクリプションのサンプルを実行する
AWS IoT Core は、3 と 5 の両方の共有サブスクリプションをサポートします。 MQTT MQTT共有サブスクリプションを使用すると、1 つのトピックへのサブスクリプションを複数のクライアントで共有できますが、そのトピックに公開されたメッセージをランダム配信を使って受信できるのは 1 つのクライアントのみです。共有サブスクリプションを使用するには、クライアントで共有サブスクリプションのトピックフィルター: $share/{ShareName}/{TopicFilter}
をサブスクライブします。
ポリシーを設定し、共有サブスクリプションのサンプルを実行するには
-
共有サブスクリプションの例を実行するには、MQTT5 共有サブスクリプション
で説明されているようにモノのポリシーを設定する必要があります。 -
共有サブスクリプションのサンプルを実行するには、次のコマンドを実行します。
注記
オプションとして、必要に応じ、サンプルを実行する際にグループ識別子を指定できます (例:
--group_identifier consumer
)。グループ識別子を指定しなかった場合、python-sample
がデフォルトのグループ識別子です。 -
コマンドラインの出力は次のようになります。
Publisher]: Lifecycle Connection Success [Publisher]: Connected Subscriber One]: Lifecycle Connection Success [Subscriber One]: Connected Subscriber Two]: Lifecycle Connection Success [Subscriber Two]: Connected [Subscriber One]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'. [Subscriber One]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>] [Subscriber Two]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'. [Subscriber Two]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>] [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber Two] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [1]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber One] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [2]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber Two] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [3]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber One] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [4]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber Two] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [5]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber One] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [6]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber Two] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [7]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber One] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [8]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber Two] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [9]"' [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0> [Subscriber One] Received a publish Publish received message on topic: test/topic Message: b'"Hello World! [10]"' [Subscriber One]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'. [Subscriber One]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code: [<UnsubackReasonCode.SUCCESS: 0>] [Subscriber Two]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'. [Subscriber Two]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code [<UnsubackReasonCode.SUCCESS: 0>] Publisher]: Lifecycle Disconnected [Publisher]: Lifecycle Stopped [Publisher]: Fully stopped Subscriber One]: Lifecycle Disconnected [Subscriber One]: Lifecycle Stopped [Subscriber One]: Fully stopped Subscriber Two]: Lifecycle Disconnected [Subscriber Two]: Lifecycle Stopped [Subscriber Two]: Fully stopped Complete!
-
AWS IoT コンソール でMQTTテストクライアントを開きます。[トピックをサブスクライブする] で、次のような共有サブスクリプションのトピックをサブスクライブします:
$share/consumer/test/topic
必要に応じて、サンプルを実行する際にグループ識別子を指定できます (例:--group_identifier consumer
)。グループ識別子を指定しなかった場合、デフォルト値はpython-sample
です。詳細については、MQTT「5 共有サブスクリプション Python の例」およびAWS IoT Core 「 デベロッパーガイド」の共有サブスクリプション「」を参照してください。 コマンドラインウィンドウで、サンプルアプリを再度実行し、AWS IoT コンソールとコマンドラインのMQTTテストクライアントでメッセージの分散を確認します。