コマンドの作成と管理 - AWS IoT Core

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

コマンドの作成と管理

AWS IoT Device Management コマンド機能を使用して、再利用可能なリモートアクションを設定するか、デバイスに 1 回限りの即時の指示を送信できます。以下のセクションでは、 AWS IoT コンソールおよび を使用してコマンドを作成および管理する方法を示します AWS CLI。

コマンドリソースを作成する

コマンドを作成するときは、次の情報を指定する必要があります。

  • 一般情報

    コマンドを作成するときは、コマンド ID を指定する必要があります。これは、ターゲットデバイスでコマンドを実行するときにコマンドを識別するのに役立つ一意の識別子です。オプションで、表示名、説明、タグを指定して、コマンドをさらに管理することもできます。

  • ペイロード

    また、デバイスが実行する必要があるアクションを定義するペイロードを指定する必要があります。オプションですが、ペイロード形式タイプを指定して、デバイスがペイロードを正しく解釈できるようにすることをお勧めします。

コマンドの予約済みトピックは、ペイロード形式タイプに依存する形式を使用します。

  • ペイロードコンテンツタイプとして application/jsonまたは を指定した場合application/cbor、リクエストトピックは次のようになります。

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
  • application/json または 以外のペイロードコンテンツタイプを指定する場合application/cbor、またはペイロード形式タイプを指定しない場合、リクエストトピックは次のようになります。この場合、ペイロード形式はMQTTメッセージヘッダーに含まれます。

    $aws/commands/<devices>/<DeviceID>/executions/+/request

コマンドレスポンスのトピックは、ペイロード形式タイプを使用するか、jsonペイロード形式タイプcborに依存しない形式を返します。レスポンストピックは、 が jsonまたは である<PayloadFormat>必要がある次の形式を使用しますcbor

$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>

以下のセクションでは、コマンドペイロード形式の考慮事項と、コンソールからコマンドを作成する方法について説明します。

コマンドペイロード形式

ペイロードは任意の形式を使用できます。ペイロードの最大サイズは 32 KB を超えることはできません。デバイスがペイロードを安全かつ正しく解釈できるように、ペイロード形式タイプを指定することをお勧めします。

ペイロード形式タイプは、 application/jsonや などのtype/subtype形式を使用して指定しますapplication/cbor。デフォルトでは、 に設定されますapplication/octet-stream。指定できるペイロード形式の詳細については、「一般的なMIMEタイプ」を参照してください。

コマンドの作成方法 (コンソール)

コンソールからコマンドを作成するには、 AWS IoT コンソールの コマンドハブに移動し、次の手順を実行します。

  1. 新しいコマンドリソースを作成するには、コマンドの作成を選択します。

  2. ターゲットデバイスで実行するコマンドを識別するのに役立つ一意のコマンド ID を指定します。

  3. (オプション) コマンドのタグとして、オプションの表示名、説明、および名前と値のペアを指定します。

  4. デバイスが実行する必要のあるアクションを含むペイロードファイルをローカルストレージからアップロードします。オプションですが、ペイロード形式タイプを指定して、デバイスがファイルを正しく解釈して指示を処理するようにすることをお勧めします。

  5. コマンドの作成を選択します。

このセクションでは、 AWS CLI コマンドリソースを作成するためにcreate-command実行できるHTTPコントロールプレーンAPIオペレーション、、CreateCommandおよび対応するコマンドについて説明します。

コマンドペイロード

コマンドを作成するときは、ペイロードを指定する必要があります。指定したペイロードは base64 でエンコードされています。デバイスが コマンドを受信すると、デバイス側のロジックはペイロードを処理し、指定されたアクションを実行できます。デバイスが コマンドとペイロードを正しく受信するように、ペイロードコンテンツタイプを指定することをお勧めします。

注記

コマンドを作成した後は、ペイロードを変更することはできません。ペイロードを変更するには、新しいコマンドを作成する必要があります。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 CreateCommand アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

この例では、次のように置き換えます。

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id を などの AWS アカウント 番号に置き換えます123456789012

  • command-id など、 AWS IoT コマンド ID の一意の識別子を持つ LockDoor。複数のコマンドを送信する場合は、IAMポリシーのリソースセクションでこれらのコマンドを指定できます。

{ "Version": "2012-10-17", "Statement": { "Action": "iot:CreateCommand", "Effect": "Allow", "Resource": "arn:aws:iot:<region>:<account_id>:command/command-id" } }

コマンドの作成例

次の例は、コマンドを作成する方法を示しています。アプリケーションに応じて、以下を置き換えます。

  • <command-id> コマンドの一意の識別子を持つ 。たとえば、家のドキュメント履歴をロックするには、 を指定できますLockDoor。UUID を使用することをお勧めします。英数字、「-」、「_」を使用することもできます。

  • (オプション) <display-name>および <description> 。これは、 などのコマンドのわかりやすい名前とわかりやすい説明を提供するために使用できるオプションのフィールドですLock the doors of my home

  • namespace。コマンドの名前空間を指定するために使用できます。である必要がありますAWS-IoT

  • payload には、コマンドの実行時に使用するペイロードとそのコンテンツタイプに関する情報が含まれています。

aws iot create-command \ --command-id <command-id> \ --display-name <display-name> \ --description <description> \ --namespace AWS-IoT \ --payload '{"content":"eyAibWVzc2FnZSI6ICJIZWxsbyBJb1QiIH0=","contentType":"application/json"}'

このコマンドを実行すると、コマンドの ID と ARN (Amazon リソース名) を含むレスポンスが生成されます。例えば、作成時に LockDoor コマンドを指定した場合、コマンドを実行するサンプル出力を次に示します。

{ "commandId": "LockDoor", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor" }

コマンドに関する情報を取得する

コマンドを作成したら、コンソールから AWS IoT 、および を使用して、コマンドに関する情報を取得できます AWS CLI。以下の情報を取得できます。

  • コマンド ID、Amazon リソース名 (ARN)、コマンドに指定した表示名と説明。

  • コマンドの状態。ターゲットデバイスでコマンドを実行できるかどうか、または非推奨または削除されているかどうかを示します。

  • 指定したペイロードと形式タイプ。

  • コマンドが作成され、最後に更新された時刻。

コンソールからコマンドを取得するには、 AWS IoT コンソールの コマンドハブに移動し、作成したコマンドを選択して詳細を表示します。

コマンドの詳細に加えて、ターゲットデバイスでのコマンドの実行に関する情報を提供するコマンド履歴を確認できます。デバイスでこのコマンドを実行すると、このタブで実行に関する情報を確認できます。

GetCommand HTTP コントロールプレーンAPIオペレーションまたは get-command AWS CLI コマンドを使用して、コマンドリソースに関する情報を取得します。CreateCommand API リクエストまたは を使用して コマンドを作成済みである必要がありますcreate-commandCLI。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 GetCommand アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

この例では、次のように置き換えます。

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id など、 を AWS アカウント 番号に置き換えます123456789023

  • command-id など、一意のコマンド識別子を持つ AWS IoT LockDoor。複数のコマンドを取得する場合は、IAMポリシーのリソースセクションでこれらのコマンドを指定できます。

{ "Version": "2012-10-17", "Statement": { "Action": "iot:GetCommand", "Effect": "Allow", "Resource": "arn:aws:iot:<region>:<account_id>:command/command-id" } }

コマンドの例を取得する (AWS CLI)

次の例は、 を使用してコマンドに関する情報を取得する方法を示していますget-command AWS CLI。アプリケーションに応じて、 を情報を取得するコマンドの識別子<command-id>に置き換えます。この情報は、 のレスポンスから取得できますcreate-commandCLI。

aws iot get-command --command-id <command-id>

このコマンドを実行すると、コマンド、ペイロード、および作成されて最後に更新された時刻に関する情報を含むレスポンスが生成されます。また、コマンドが廃止されたか、削除中かを示す情報も提供します。

たとえば、次のコードはレスポンスの例を示しています。

{ "commandId": "LockDoor", "commandArn": "arn:aws:iot:<region>:<account>:command/LockDoor", "namespace": "AWS-IoT", "payload":{ "content": "eyAibWVzc2FnZSI6ICJIZWxsbyBJb1QiIH0=", "contentType": "application/json" }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "lastUpdatedAt": "2024-03-23T00:50:10.095000-07:00", "deprecated": false, "pendingDeletion": false }

でコマンドを一覧表示する AWS アカウント

コマンドを作成したら、アカウントで作成したコマンドを表示できます。リストには、以下に関する情報があります。

  • コマンド ID、およびコマンドに指定した表示名。

  • コマンドの Amazon リソース名 (ARN)。

  • コマンドがターゲットデバイスで実行できるかどうか、または非推奨かどうかを示すコマンド状態。

    注記

    アカウントから削除されているリストは表示されません。コマンドの削除が保留中の場合でも、コマンド ID を使用してこれらのコマンドの詳細を表示できます。

  • コマンドが作成され、最後に更新された時刻。

AWS IoT コンソールでは、 コマンドハブに移動して、作成したコマンドのリストとその詳細を確認できます。

作成したコマンドを一覧表示するには、 ListCommandsAPIオペレーションまたは list-commands を使用しますCLI。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 ListCommands アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

この例では、次のように置き換えます。

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id など、 AWS アカウント 番号の 123456789012

{ "Version": "2012-10-17", "Statement": { "Action": "iot:ListCommands", "Effect": "Allow", "Resource": "arn:aws:iot:<region>:<account_id>:command/*" } }

アカウントのコマンドを一覧表示する例

次のコマンドは、 アカウントのコマンドを一覧表示する方法を示しています。

aws iot list-commands --namespace "AWS-IoT"

このコマンドを実行すると、作成したコマンドのリスト、コマンドが作成された時刻、最後に更新された時刻を含むレスポンスが生成されます。また、コマンドの状態情報も提供します。この情報は、コマンドが非推奨になったか、ターゲットデバイスで実行できるかを示します。さまざまなステータスとステータスの理由の詳細については、「」を参照してくださいコマンド実行ステータス

コマンドリソースを更新する

コマンドを作成したら、コマンドの表示名と説明を更新できます。

注記

コマンドのペイロードは更新できません。この情報を更新したり、変更されたペイロードを使用するには、新しいコマンドを作成する必要があります。

コンソールからコマンドを更新するには、 AWS IoT コンソールの コマンドハブに移動し、次の手順を実行します。

  1. 既存のコマンドリソースを更新するには、更新するコマンドを選択し、アクション編集を選択します。

  2. 使用する表示名と説明、および名前と値のペアをコマンドのタグとして指定します。

  3. 編集 を選択して、新しい設定でコマンドを保存します。

UpdateCommand コントロールプレーンAPIオペレーションまたは update-command AWS CLI を使用して、コマンドリソースを更新します。この を使用するとAPI、次のことができます。

  • 作成したコマンドの表示名と説明を編集します。

  • コマンドリソースを非推奨にするか、既に非推奨になっているコマンドを復元します。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 UpdateCommand アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

この例では、次のように置き換えます。

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id など、 AWS アカウント 番号の 123456789012

  • command-id など、一意のコマンド識別子を持つ AWS IoT LockDoor。複数のコマンドを取得する場合は、IAMポリシーのリソースセクションでこれらのコマンドを指定できます。

{ "Version": "2012-10-17", "Statement": { "Action": "iot:UpdateCommand", "Effect": "Allow", "Resource": "arn:aws:iot:<region>:<account_id>:command/<command-id>" } }

コマンドの例に関する情報を更新する (AWS CLI)

次の例は、 コマンドを使用してupdate-command AWS CLI コマンドに関する情報を更新する方法を示しています。これを使用してコマンドリソースをAPI廃止または復元する方法については、「」を参照してくださいコマンドリソースを更新する (CLI)

この例では、コマンドの表示名と説明を更新する方法を示します。アプリケーションに応じて、 を情報を取得するコマンドの識別子<command-id>に置き換えます。

aws iot update-command \ --command-id <command-id> --displayname <display-name> \ --description <description>

このコマンドを実行すると、コマンドに関する更新された情報と最後に更新された時刻を含むレスポンスが生成されます。次のコードは、AC をオフにするコマンドの表示名と説明を更新するためのリクエストとレスポンスの例を示しています。

aws iot update-command \ --command-id <LockDoor> \ --displayname <Secondary lock door> \ --description <Locks doors to my home>

このコマンドを実行すると、次のレスポンスが生成されます。

{ "commandId": "LockDoor", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor", "displayName": "Secondary lock door", "description": "Locks doors to my home", "lastUpdatedAt": "2024-05-09T23:15:53.899000-07:00" }

コマンドリソースを非推奨または復元する

コマンドを作成した後、コマンドの使用を継続しない場合は、非推奨としてマークできます。コマンドを非推奨にすると、保留中のすべてのコマンド実行は、終了ステータスに達するまでターゲットデバイスで実行され続けます。コマンドが非推奨になったら、新しいコマンド実行をターゲットデバイスに送信するなどに使用する場合は、復元する必要があります。

注記

廃止されたコマンドを編集したり、新しい実行を実行したりすることはできません。デバイスで新しいコマンドを実行するには、コマンドの状態が Available に変わるように復元する必要があります。

コマンドの非推奨化と復元、およびその考慮事項の詳細については、「」を参照してくださいコマンドリソースを非推奨にする

コマンドリソースを削除する

コマンドが不要になった場合は、アカウントから完全に削除できます。削除アクションが成功した場合:

  • コマンドが最大タイムアウトの 12 時間より長い期間非推奨になった場合、コマンドはすぐに削除されます。

  • コマンドが非推奨になっていない場合、または最大タイムアウトより短い期間非推奨になっている場合、コマンドは pending deletion状態になります。最大タイムアウトの 12 時間後に、アカウントから自動的に削除されます。

注記

保留中のコマンド実行がある場合でも、コマンドは削除される可能性があります。コマンドは保留中の削除状態になり、アカウントから自動的に削除されます。

コンソールからコマンドを削除するには、 AWS IoT コンソールの コマンドハブに移動し、次の手順を実行します。

  1. 削除するコマンドを選択し、アクション削除を選択します。

  2. コマンドを削除することを確認し、削除を選択します。

コマンドは削除対象としてマークされ、12 時間後にアカウントから完全に削除されます。

DeleteCommand HTTP コントロールプレーンAPIオペレーションまたは delete-command AWS CLI コマンドを使用して、コマンドリソースを削除します。削除アクションが成功すると、204 または 202 HTTPstatusCodeの が表示され、最大タイムアウト期間が 12 時間経過すると、コマンドは自動的にアカウントから削除されます。204 ステータスの場合、コマンドが削除されたことを示します。

サンプルIAMポリシー

このAPIオペレーションを使用する前に、 IAMポリシーでこのアクションをデバイスで実行することを許可していることを確認してください。次の例は、 DeleteCommand アクションを実行するアクセス許可をユーザーに付与する IAMポリシーを示しています。

この例では、次のように置き換えます。

  • region など AWS リージョン、 で を使用しますap-south-1

  • account-id など、 AWS アカウント 番号の 123456789012

  • command-id など、一意のコマンド識別子を持つ AWS IoT LockDoor。複数のコマンドを取得する場合は、IAMポリシーのリソースセクションでこれらのコマンドを指定できます。

{ "Version": "2012-10-17", "Statement": { "Action": "iot:DeleteCommand", "Effect": "Allow", "Resource": "arn:aws:iot:<region>:<account_id>:command/command-id" } }

コマンド例を削除する (AWS CLI)

次の例は、 コマンドを使用してdelete-command AWS CLI コマンドを削除する方法を示しています。アプリケーションに応じて、 を削除するコマンドの識別子<command-id>に置き換えます。

aws iot delete-command --command-id <command-id>

API リクエストが成功すると、コマンドはステータスコード 202 または 204 を生成します。を使用してGetCommandAPI、コマンドがアカウントに存在しなくなったことを確認できます。