翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
高レベルのコマンドワークフロー
次の手順では、デバイスとコマンド間の AWS IoT Device Management コマンドワークフローの概要を示します。HTTP API オペレーションのいずれかのコマンドを使用すると、リクエストは Sigv4 認証情報を使用して署名されます。
ワークフローの概要
Create and manage commands
デバイスのコマンドを作成および管理するには、次の手順を実行します。
-
コマンドリソースを作成する
デバイスにコマンドを送信する前に、 AWS IoT コンソールの コマンドハブ
から、または CreateCommandコントロールプレーン API オペレーションを使用してコマンドリソースを作成します。 -
ペイロードを指定する
コマンドを作成するときは、コマンドのペイロードを指定する必要があります。ペイロードコンテンツは任意の形式を使用できます。デバイスが正しくペイロードを解釈するように、ペイロードコンテンツタイプも指定することをお勧めします。
-
(オプション) 作成したコマンドを管理する
コマンドを作成したら、コマンドの表示名と説明を更新できます。今後使用する予定がない場合は、コマンドを非推奨としてマークするか、アカウントからコマンドを完全に削除することもできます。ペイロード情報を変更する場合は、新しいコマンドを作成し、新しいペイロードファイルをアップロードする必要があります。
コマンドのターゲットデバイスを選択し、MQTT トピックをサブスクライブする
コマンドワークフローを準備するには、ターゲットデバイスを選択し、コマンドを受信してレスポンスメッセージを発行するための予約済み MQTT トピックを指定します AWS IoT 。
-
コマンドのターゲットデバイスを選択する
コマンドワークフローを準備するには、コマンドを受信するターゲットデバイスを選択し、指定されたアクションを実行します。ターゲットデバイスは、 AWS IoT レジストリに登録した AWS IoT モノでも、デバイスが登録されていない場合は MQTT クライアント ID を使用して指定することもできます AWS IoT。詳細については、「ターゲットデバイスの考慮事項」を参照してください。
-
IoT デバイスポリシーを設定する
デバイスがコマンド実行を受信して更新を発行する前に、これらのアクションを実行するためのアクセス許可を付与する IAM ポリシーを使用する必要があります。デバイスが AWS IoT モノとして登録されているか、MQTT クライアント ID として指定されているかに応じて使用できるサンプルポリシーの例については、「」を参照してくださいサンプルの IAM ポリシー。。
-
MQTT 接続を確立する
コマンド機能を使用するようにデバイスを準備するには、まずデバイスがメッセージブローカーに接続し、リクエストとレスポンスのトピックをサブスクライブする必要があります。デバイスは、 メッセージブローカーに接続 AWS IoT Core して MQTT 接続を確立する
iot:Connectアクションを実行することを許可されている必要があります。のデータプレーンエンドポイントを検索するには AWS アカウント、以下に示すようにDescribeEndpointAPI またはdescribe-endpointCLI コマンドを使用します。aws iot describe-endpoint --endpoint-type iot:Data-ATSこのコマンドを実行すると、以下に示すように、アカウント固有のデータプレーンエンドポイントが返されます。
account-specific-prefix.iot.region.amazonaws.com -
コマンドトピックへの Susbcribe
接続が確立されると、デバイスはコマンドリクエストトピックにサブスクライブできます。コマンドを作成してターゲットデバイスでコマンド実行を開始すると、ペイロードメッセージはメッセージブローカーによってリクエストトピックに発行されます。その後、デバイスはペイロードメッセージを受信し、 コマンドを処理できます。
(オプション) デバイスは、これらのコマンドレスポンストピック (
acceptedまたはrejected) をサブスクライブして、クラウドサービスがデバイスからのレスポンスを承諾したか拒否したかを示すメッセージを受信することもできます。この例では、次のように置き換えます。
-
<device>thingまたは は、ターゲットとするデバイスが IoT モノとして登録されているか、MQTT クライアントとして指定されているかclientによって異なります。 -
ターゲットデバイスの一意の識別子。この ID は、一意の MQTT クライアント ID またはモノの名前にすることができます。<DeviceID>
注記
ペイロードタイプが JSON または CBOR でない場合、コマンドリクエストトピックに
<PayloadFormat>フィールドが存在しない可能性があります。ペイロード形式を取得するには、MQTT 5 を使用して MQTT メッセージヘッダーから形式情報を取得することをお勧めします。詳細については、「コマンドトピック」を参照してください。$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>$aws/commands/<devices>/<DeviceID>/executions/+/response/accepted/<PayloadFormat>$aws/commands/<devices>/<DeviceID>/executions/+/response/rejected/<PayloadFormat> -
ターゲットデバイスのコマンド実行を開始およびモニタリングする
コマンドを作成し、コマンドのターゲットを指定したら、次の手順を実行してターゲットデバイスで実行を開始できます。
-
ターゲットデバイスでコマンド実行を開始する
コンソールの AWS IoT コマンドハブ
から、またはアカウント固有のエンドポイントで StartCommandExecutionデータプレーン API を使用して、ターゲットデバイスでコマンド実行を開始します。デュアルスタックエンドポイント (IPv4 および IPv6) を使用している場合は、 を使用しますiot:Data-ATS。iot:Jobsエンドポイントは IPv4 専用です。API は、デバイスがサブスクライブした上記のコマンドリクエストトピックにペイロードメッセージを発行します。
注記
コマンドがクラウドから送信されたときにデバイスがオフラインで、MQTT 永続セッションを使用している場合、コマンドはメッセージブローカーで待機します。デバイスがタイムアウト時間前にオンラインに戻り、コマンドリクエストトピックをサブスクライブしている場合、デバイスはコマンドを処理し、その結果をコマンドレスポンストピックに発行できます。タイムアウト時間前にデバイスがオンラインに戻らない場合、コマンドの実行はタイムアウトし、ペイロードメッセージは期限切れになり、メッセージブローカーによって破棄される可能性があります。
-
コマンド実行の結果を更新する
これで、デバイスはペイロードメッセージを受信し、コマンドを処理して指定されたアクションを実行し、
UpdateCommandExecutionAPI を使用してコマンド実行の結果を次のコマンドレスポンストピックに発行できるようになりました。デバイスが応答トピックを受け入れたコマンドと拒否したコマンドをサブスクライブしている場合、応答がクラウドサービスによって受け入れられたか拒否されたかを示すメッセージが表示されます。リクエストトピックで指定した方法に応じて、
<devices>はモノまたはクライアントにすることができ、<DeviceID>は IoT モノ名または MQTT クライアント ID にすることができます。注記
<PayloadFormat>は、コマンドレスポンストピックで JSON または CBOR のみを使用できます。$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat> -
(オプション) コマンド実行結果を取得する
コマンド実行の結果を取得するには、 AWS IoT コンソールからコマンド履歴を表示するか、
GetCommandExecutionコントロールプレーン API オペレーションを使用します。最新情報を取得するには、デバイスがコマンド実行結果をコマンドレスポンストピックに発行している必要があります。また、最後に更新された日時、実行結果、実行が完了した日時など、実行データに関する追加情報を取得することもできます。
(オプション) コマンドイベントの通知を有効にする
コマンドイベントをサブスクライブして、コマンド実行のステータスが変更されたときに通知を受け取ることができます。次の手順では、コマンドイベントをサブスクライブして処理する方法を示します。
-
トピックルールを作成する
コマンドイベントトピックをサブスクライブし、コマンド実行のステータスが変更されたときに通知を受け取ることができます。トピックルールを作成して、デバイスによって処理されたデータを、Amazon SQS AWS Lambdaや AWS Step Functions などのルールでサポートされている他の AWS IoT サービスにルーティングすることもできます。トピックルールは、 AWS IoT コンソールまたは
CreateTopicRuleAWS IoT Core コントロールプレーン API オペレーションを使用して作成できます。詳細については、「AWS IoT ルールの作成」を参照してください。この例では、 を通知を受信するコマンドの識別子
に置き換え、 をコマンド実行のステータス<CommandID>に置き換えます。<CommandExecutionStatus>$aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>注記
すべてのコマンドとコマンド実行ステータスの通知を受け取るには、ワイルドカード文字を使用し、次のトピックにサブスクライブします。
$aws/events/commandExecution/+/# -
コマンドイベントを受信して処理する
前のステップでコマンドイベントをサブスクライブするトピックルールを作成した場合は、受信したコマンドプッシュ通知を管理し、これらのサービス上にアプリケーションを構築できます。
次のコードは、受信するコマンドイベント通知のサンプルペイロードを示しています。
{ "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "status":"FAILED", "statusReason": { "reasonCode": "DEVICE_TOO_BUSY", "reasonDescription": "" }, "eventType": "COMMAND_EXECUTION", "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086", "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd", "timestamp":1717708862107}