ステップ 1: ジョブを実行するために Raspberry Pi を準備する - AWS IoT Core

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

ステップ 1: ジョブを実行するために Raspberry Pi を準備する

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

注記

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

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

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

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

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

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

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 jobs

を作成する 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 などです。

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

    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": [ "iotjobsdata:DescribeJobExecution", "iotjobsdata:GetPendingJobExecutions", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName" ] } ] }
    3. エディタの各ポリシーステートメントの Resourceセクションで、us-west-2:57EXAMPLE833 を で使用する AWS リージョン、コロン文字 (:)、および 12 桁の AWS アカウント number。

    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 をデバイスのモノの名前certificateArnに、 をこのセクションで前述したcertificateArn値に、このデバイスのモノの名前に、次のコマンドを実行してポリシーをデバイス証明書にアタッチします。

    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 デバイスクライアント:
  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 console。

設定ファイルを保存すると、ステップ 2: でジョブを作成して実行する AWS IoT に進む準備が整います。