ジョブを実行するために Raspberry Pi を準備する - AWS IoT Core

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

ジョブを実行するために Raspberry Pi を準備する

このセクションの手順では、 AWS IoT Device Client を使用して Raspberry Pi がジョブを実行するように準備する方法について説明します。

注記

これらの手順はデバイス固有です。このセクションの手順を複数のデバイスで同時に実行する場合、各デバイスには独自のポリシーと、一意のデバイス固有の証明書およびモノ名が必要です。各デバイスに固有のリソースを割り当てるには、手順の説明に従ってデバイス固有の要素を変更しながら、デバイスごとに 1 回ずつこの手順を実行します。

Raspberry Pi をプロビジョニングしてジョブをデモンストレーションする

このセクションの手順では、 AWS IoT リソースとデバイス証明書 AWS IoT を作成して、Raspberry Pi を にプロビジョニングします。

デバイス証明書ファイルを作成してダウンロードし、 AWS IoT ジョブをデモンストレーションする

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

複数のデバイスを準備する場合は、この手順を各デバイスで実行する必要があります。

Raspberry Pi のデバイス証明書ファイルを作成してダウンロードするには、次の手順を実行します。

Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次のコマンドを入力します。

  1. 次のコマンドを入力して、デバイスのデバイス証明書ファイルを作成します。

    aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/jobs/device.pem.crt" \ --public-key-outfile "~/certs/jobs/public.pem.key" \ --private-key-outfile "~/certs/jobs/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/jobs chmod 644 ~/certs/jobs/* chmod 600 ~/certs/jobs/private.pem.key
  3. 次のコマンドを実行して、証明書のディレクトリおよびファイルに対するアクセス許可を確認します。

    ls -l ~/certs/jobs

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

    -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

デバイス証明書ファイルを Raspberry Pi にダウンロードしたら、Raspberry Pi をプロビジョニングしてジョブをデモンストレーションする に進む準備が整います。

AWS IoT ジョブをデモンストレーションする AWS IoT リソースを作成する

このデバイスの AWS IoT リソースを作成します。

複数のデバイスを準備する場合は、この手順をデバイスごとに実行する必要があります。

AWS IoTでデバイスをプロビジョニングするには:

Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次の操作を行います。

  1. 次のコマンドを入力して、 AWS アカウントのデバイスデータエンドポイントのアドレスを取得します。

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

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

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

    { "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com" }
  2. 置換 uniqueThingName デバイスの一意の名前。このチュートリアルを複数のデバイスで実行する場合は、各デバイスに独自の名前を付けます。例えば、TestDevice01TestDevice02 などです。

    このコマンドを入力して、Raspberry Pi の新しい AWS IoT モノのリソースを作成します。

    aws iot create-thing --thing-name "uniqueThingName"

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

    注記

    複数のデバイスに対してポリシーを確保する場合は、静的なモノの名前である uniqueThingName の代わりに ${iot:Thing.ThingName} を使用できます。

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

    AWS IoT モノのリソースが作成された場合、 コマンドはこのようなレスポンスを返します。このデバイスで実行するジョブを作成するときに、後で使用するために thingArn の値を記録します。

    { "thingName": "uniqueThingName", "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/uniqueThingName", "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/uniqueThingName" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/job/*", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*", "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/$aws/things/uniqueThingName/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName" ] } ] }
    3. エディタで、すべてのポリシーステートメントの Resourceセクションで、 を置き換えます。us-west-2:57EXAMPLE833 、コロン文字 (:) AWS リージョン、および 12 桁の AWS アカウント 数字を使用します。

    4. エディタで、すべてのポリシーステートメントで、 を置き換えます。uniqueThingName このモノのリソースに付けたモノの名前。

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

      複数のデバイスに対してこの手順を実行する場合は、各デバイスでこのファイル名にファイルを保存します。

  4. 置換 uniqueThingName デバイスのモノ名を指定し、このコマンドを実行して、そのデバイスに合わせた AWS IoT ポリシーを作成します。

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

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

    { "policyName": "JobTestPolicyForuniqueThingName", "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/JobTestPolicyForuniqueThingName", "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. 置換 uniqueThingName は、デバイスのモノ名と、このデバイスのこのセクションの前半で保存したcertificateArncertificateArnを使用して、このコマンドを実行して、ポリシーをデバイス証明書にアタッチします。

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

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

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

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

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

Raspberry Pi を正常にプロビジョニングしたら、引き続きテストに含まれる別の Raspberry Pi についてこのセクションを繰り返します。すべてのデバイスがプロビジョニングされている場合は、ジョブエージェントを実行するように AWS IoT Device Client を設定する に進みます。

ジョブエージェントを実行するように AWS IoT Device Client を設定する

この手順では、 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/jobs/device.pem.crt", "key": "~/certs/jobs/private.pem.key", "root-ca": "~/certs/AmazonRootCA1.pem", "thing-name": "uniqueThingName", "logging": { "enable-sdk-logging": true, "level": "DEBUG", "type": "STDOUT", "file": "" }, "jobs": { "enabled": true, "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": false, "publish-topic": "", "publish-file": "", "subscribe-topic": "", "subscribe-file": "" } }, "config-shadow": { "enabled": false }, "sample-shadow": { "enabled": false, "shadow-name": "", "shadow-input-file": "", "shadow-output-file": "" } }
    3. を置き換える endpoint で AWS アカウント 見つかった のデバイスデータエンドポイント値を持つ値でデバイスをプロビジョニングする AWS IoT Core

    4. 置換 uniqueThingName このデバイスに使用したモノの名前。

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

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

    chmod 644 ~/dc-configs/dc-jobs-config.json

このMQTTテストにはテストクライアントを使用しません。デバイスはジョブ関連のMQTTメッセージを と交換しますが AWS IoT、ジョブの進行状況メッセージはジョブを実行しているデバイスとのみ交換されます。ジョブの進行状況メッセージはジョブを実行しているデバイスとのみ交換されるため、 AWS IoT コンソールなどの別のデバイスからサブスクライブすることはできません。

設定ファイルを保存すると、AWS IoT Device Client AWS IoT を使用して でジョブを作成して実行する に進む準備が整います。