Raspberry Pi がMQTTメッセージ通信をデモンストレーションする準備をする - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Raspberry Pi がMQTTメッセージ通信をデモンストレーションする準備をする

この手順では、 AWS IoT と Raspberry Pi にリソースを作成し、 AWS IoT Device Client を使用したMQTTメッセージ通信を示します。

証明書ファイルを作成してMQTT通信をデモンストレーションする

この手順では、このデモのデバイス証明書ファイルが作成されます。

Raspberry Pi のデバイス証明書ファイルを作成してダウンロードするには

  1. ローカルホストコンピュータのターミナルウィンドウで、次のコマンドを入力して、デバイスのデバイス証明書ファイルを作成します。

    mkdir ~/certs/pubsub aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/pubsub/device.pem.crt" \ --public-key-outfile "~/certs/pubsub/public.pem.key" \ --private-key-outfile "~/certs/pubsub/private.pem.key"

    このコマンドでは次のようなレスポンスが返されます。後で使用するために certificateArn の値を保存します。

    { "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269", "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269", "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n" } }
  2. 次のコマンドを入力して、証明書ディレクトリとそのファイルに対するアクセス許可を設定します。

    chmod 700 ~/certs/pubsub chmod 644 ~/certs/pubsub/* chmod 600 ~/certs/pubsub/private.pem.key
  3. 次のコマンドを実行して、証明書のディレクトリおよびファイルに対するアクセス許可を確認します。

    ls -l ~/certs/pubsub

    コマンドの出力は、ファイルの日付と時刻が異なることを除いて、ここで表示されるものと同じである必要があります。

    -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key -rw-r--r-- 1 pi pi 451 Oct 28 13:02 public.pem.key
  4. 次のコマンドを入力して、ログファイルのディレクトリを作成します。

    mkdir ~/.aws-iot-device-client mkdir ~/.aws-iot-device-client/log chmod 745 ~/.aws-iot-device-client/log echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log chmod 600 ~/.aws-iot-device-client/log/*

デバイスをプロビジョニングしてMQTT通信をデモンストレーションする

このセクションでは、 で Raspberry Pi をプロビジョニングする AWS IoT リソースを作成します AWS IoT。

AWS IoTでデバイスをプロビジョニングするには:
  1. ローカルホストコンピュータのターミナルウィンドウで、次のコマンドを入力して、 AWS アカウントのデバイスデータエンドポイントのアドレスを取得します。

    aws iot describe-endpoint --endpoint-type IoT:Data-ATS

    エンドポイントの値は、前のチュートリアルでこのコマンドを実行してから変更されていません。ここでコマンドを再度実行すると、このチュートリアルで使用する設定ファイルにデータエンドポイントの値を簡単に検索して貼り付けることができるようになります。

    これまでの手順で入力したコマンドでは次のようなレスポンスが返されます。後で使用できるように、endpointAddress の値を記録しておきます。

    { "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com" }
  2. このコマンドを入力して、Raspberry Pi の新しい AWS IoT モノのリソースを作成します。

    aws iot create-thing --thing-name "PubSubTestThing"

    AWS IoT モノのリソースはクラウド内のデバイスの仮想表現であるため、 で複数のモノ AWS IoT のリソースを作成して、さまざまな目的に使用できます。これらすべてを同じ物理 IoT デバイスで使用して、デバイスのさまざまな側面を表すことができます。

    このチュートリアルでは、Raspberry Pi を表すために一度に 1 つのモノのリソースのみを使用します。このように、これらのチュートリアルでは、デモの AWS IoT リソースを作成した後、それぞれに特別に作成したリソースを使用してデモに戻って繰り返すことができるように、さまざまなデモを表します。

    AWS IoT モノのリソースが作成されると、コマンドはこのようなレスポンスを返します。

    { "thingName": "PubSubTestThing", "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing", "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd" }
  3. ターミナルウィンドウで、次の操作を行います。

    1. nano などのテキストエディタを開きます。

    2. このJSONドキュメントをコピーして、オープンテキストエディタに貼り付けます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] } ] }
    3. エディタで、ポリシードキュメントの各Resourceセクションで、 を置き換えます。us-west-2:57EXAMPLE833 、コロン文字 (:) AWS リージョン、および 12 桁の AWS アカウント 数字を使用します。

    4. テキストエディタのファイルを ~/policies/pubsub_test_thing_policy.json として保存します。

  4. このコマンドを実行して、前のステップのポリシードキュメントを使用して AWS IoT ポリシーを作成します。

    aws iot create-policy \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_test_thing_policy.json"

    ポリシーが作成されると、コマンドは次のようなレスポンスを返します。

    { "policyName": "PubSubTestThingPolicy", "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy", "policyDocument": "{\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n", "policyVersionId": "1"
  5. 次のコマンドを実行して、ポリシーをデバイス証明書にアタッチします。certificateArn を、このセクション内で前に保存した certificateArn 値に置き換えます。

    aws iot attach-policy \ --policy-name "PubSubTestThingPolicy" \ --target "certificateArn"

    成功した場合、このコマンドは何も返しません。

  6. 次のコマンドを実行して、デバイス証明書を AWS IoT のモノのリソースにアタッチします。certificateArn を、このセクション内で前に保存した certificateArn 値に置き換えます。

    aws iot attach-thing-principal \ --thing-name "PubSubTestThing" \ --principal "certificateArn"

    成功した場合、このコマンドは何も返しません。

でデバイスを正常にプロビジョニングすると AWS IoT、 に進む準備が整いますAWS IoT Device Client 設定ファイルとMQTTテストクライアントを設定してMQTT通信をデモンストレーションする

AWS IoT Device Client 設定ファイルとMQTTテストクライアントを設定してMQTT通信をデモンストレーションする

この手順では、 AWS IoT Device Client をテストするための設定ファイルを作成します。

AWS IoT Device Client をテストする設定ファイルを作成するには
  1. Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次の操作を行います。

    1. nano などのテキストエディタを開きます。

    2. このJSONドキュメントをコピーして、オープンテキストエディタに貼り付けます。

      { "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com", "cert": "~/certs/pubsub/device.pem.crt", "key": "~/certs/pubsub/private.pem.key", "root-ca": "~/certs/AmazonRootCA1.pem", "thing-name": "PubSubTestThing", "logging": { "enable-sdk-logging": true, "level": "DEBUG", "type": "STDOUT", "file": "" }, "jobs": { "enabled": false, "handler-directory": "" }, "tunneling": { "enabled": false }, "device-defender": { "enabled": false, "interval": 300 }, "fleet-provisioning": { "enabled": false, "template-name": "", "template-parameters": "", "csr-file": "", "device-key": "" }, "samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "", "subscribe-topic": "test/dc/subtopic", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log" } }, "config-shadow": { "enabled": false }, "sample-shadow": { "enabled": false, "shadow-name": "", "shadow-input-file": "", "shadow-output-file": "" } }
    3. を置き換える endpoint で AWS アカウント 見つかった のデバイスデータエンドポイントを持つ値でデバイスをプロビジョニングする AWS IoT Core

    4. テキストエディタのファイルを ~/dc-configs/dc-pubsub-config.json として保存します。

    5. 次のコマンドを実行して、新しい設定ファイルでアクセス許可を設定します。

      chmod 644 ~/dc-configs/dc-pubsub-config.json
  2. すべてのMQTTメッセージをサブスクライブするようにMQTTテストクライアントを準備するには:

    1. ローカルホストコンピュータのAWS IoT コンソールで、MQTTテストクライアント を選択します。

    2. [Subscribe to a topic] (トピックをサブスクライブする) タブの [Topic filter] (トピックのフィルター) に「#」(単一の # 記号) を入力し、[Subscribe] (サブスクライブ) をクリックします。

    3. [Subscriptions] (サブスクリプション) ラベルの下に、「#」(単一の # 記号) が表示されることを確認します。

    このチュートリアルを続行する間は、MQTTテストクライアントでウィンドウを開いたままにします。

ファイルを保存してMQTTテストクライアント を設定したら、 に進む準備が整いますAWS IoT Device Client でのメッセージの発行のデモンストレーション