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

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

コマンドの作成と管理

AWS IoT Device Management コマンドを使用して、再利用可能なリモートアクションを設定するか、デバイスにすぐに指示を送信します。 AWS IoT コンソールまたは を使用して、 コマンドを作成および管理します AWS CLI。

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

コマンドを作成するときは、次の情報を入力します。

  • 一般的な情報

    ターゲットデバイスで実行するときにコマンドを識別する一意のコマンド ID を指定します。必要に応じて、管理用の表示名、説明、タグを指定します。

  • ペイロード

    静的コマンドの場合は、デバイスアクションを定義するペイロードを指定します。正しいデバイス解釈のためにペイロード形式タイプを指定します。

    動的コマンドについては、「ペイロードテンプレート属性」を参照してください。

  • ペイロードテンプレート

    動的コマンドの場合は、プレースホルダーとパラメータを含む payloadTemplate を指定します。オプションで defaultValueおよび 条件を指定します。 AWS IoT Device Management コマンドは、実行時にプレースホルダーを置き換えます。欠落しているパラメータは defaultValue を使用します。すべての値は、定義された条件を満たす必要があります。

    以下の大文字と小文字を区別するプレースホルダータイプがサポートされています。

    • ${aws:iot:commandexecution::parameter:parameter1} – という名前のパラメータの値のプレースホルダーparameter1

    • ${aws:iot:commandexecution::executionTimeoutSec} – 実行時に指定されたコマンド実行タイムアウトパラメータのプレースホルダー。

コマンド予約 トピックは、ペイロード形式タイプに基づく形式を使用します。

  • application/json または application/cborコンテンツタイプの場合は、次のリクエストトピックを使用します。

    $aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>
  • 他のコンテンツタイプまたは指定されていない形式の場合は、このリクエストトピックを使用します。ペイロード形式が MQTT メッセージヘッダーに表示されます。

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

コマンドレスポンス Topic は、ペイロードタイプに関係なく jsonまたは cbor形式を使用します。<PayloadFormat>jsonまたは である必要がありますcbor

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

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

静的コマンドペイロード形式

ペイロードは、最大 32 KB の任意の形式をサポートします。安全で正しいデバイス解釈のためにペイロード形式タイプを指定します。

形式 (例: application/jsonまたは application/cbor) を使用してペイロードtype/subtype形式タイプを指定します。デフォルト: application/octet-stream。サポートされている形式については、「一般的な MIME タイプ」を参照してください。

動的コマンドペイロード形式

payloadTemplate は、少なくとも 1 つのプレースホルダー、最大 32 KB の有効な JSON である必要があります。

AwsJsonSubstitution プリプロセッサの場合、 AWS IoT Device Management コマンドはプリプロセッサ設定に基づいて JSON または CBOR 形式で通知を送信します。

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

コンソールからコマンドを作成するには、Command Hub に移動し、次の手順に従います。

  1. [コマンドを作成] を選択します。

  2. 一意のコマンド ID を指定します。

  3. (オプション) 表示名、説明、タグを指定します。

  4. デバイスアクションを含むペイロードファイルをアップロードします。正しいデバイス解釈のためにペイロード形式タイプを指定します。

  5. (オプション) プレースホルダーを含む JSON ペイロードテンプレートの場合、パラメータは編集のためにインラインテーブルに事前入力されます。

  6. (オプション) パラメータ値タイプ (必須)、デフォルト値、および条件を設定します。

  7. [コマンドを作成] を選択します。

CreateCommand API または create-command CLI コマンドを使用して コマンドを作成します。

コマンドのペイロード

静的ペイロードまたはペイロードテンプレートを指定します。静的ペイロードは base64 でエンコードされます。ペイロードテンプレートの場合、最終的なペイロードは実行時にパラメータ値を使用して生成します。デバイスはペイロードを処理し、指定されたアクションを実行します。正しいデバイス受信のためにペイロードコンテンツタイプを指定します。

注記

コマンドの作成後にペイロードを変更することはできません。ペイロードを変更する新しいコマンドを作成します。

サンプルの IAM ポリシー

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

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

  • regionus-east-1 などお客様ご自身の AWS リージョンに置き換えます。

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

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

{ "Version":"2012-10-17", "Statement": { "Action": "iot:CreateCommand", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id" } }

静的コマンド作成の例

次の例は、静的コマンドを作成する方法を示しています。用途に応じて、以下を置き換えてください。

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

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

  • namespace は、コマンドの名前空間を指定するために使用できます。これは AWS-IoT である必要があります。にこの機能を使用する方法については AWS IoT FleetWise、「リモートコマンド」を参照してください。

  • 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:us-east-1:123456789012:command/LockDoor" }

動的コマンド作成の例

次の例は、動的コマンドを作成する方法を示しています。用途に応じて、以下を置き換えてください。

  • <command-id> をコマンドの一意の識別子で置き換えます。例えば、照明の電源ステータスを設定するには、 を指定できますLight_Power_Status。UUID を使用することをお勧めします。英数字、「-」、「_」を使用することもできます。

  • (オプション) <display-name> および <description> は、Turn a light ON or OFF など、コマンドのわかりやすい名前と意味を持つ説明を提供するために使用できるオプションのフィールドです。

  • namespace は、コマンドの名前空間を指定するために使用できます。これは AWS-IoT である必要があります。でこの機能を使用する方法については AWS IoT FleetWise、「リモートコマンド」を参照してください。

  • payloadTemplate には、プレースホドルを含む JSON 形式の playoad テンプレートが含まれています。

  • preprocessor には、payloadTemplateの処理方法を決定するプリプロセッサの設定が含まれています。

  • mandatoryParameter には、payloadTemplate のプレースホルダーに対応するパラメータ、そのタイプ、デフォルト値、および条件が含まれます。

aws iot create-command \ --command-id Light_Power_Status \ --description "Turn a light ON or OFF" \ --namespace AWS-IoT \ --payload-template '{"powerStatus":"${aws:iot:commandexecution::parameter:powerStatus}"}' \ --preprocessor awsJsonSubstitution={outputFormat=JSON} \ --mandatory-parameters "name=powerStatus, defaultValue={S=OFF}, valueConditions=[{comparisonOperator=IN_SET, operand={strings=['ON','OFF']}}]"

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

{ "commandId": "Light_Power_Status", "commandArn": "arn:aws:iot:us-east-1:123456789012:command/Light_Power_Status" }

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

コマンドを作成した後は、 AWS IoT コンソールから AWS CLIを使用してそのコマンドに関する情報を取得できます。取得できる情報は次のとおりです。

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

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

  • 指定したペイロードまたは payloadTemplate。

  • 指定したプリプロセッサ。

  • 指定した mandatoryParameters。

  • コマンドが作成され、最後にアップデートされた時刻。

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

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

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

サンプルの IAM ポリシー

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

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

  • regionus-east-1 などお客様ご自身の AWS リージョンに置き換えます。

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

  • command-id LockDoorまたは などの一意のコマンド識別子を使用します AWS IoT Light_Power_Status。複数のコマンドを取得する場合は、IAM ポリシーの「Resource」セクションでこれらのコマンドを指定できます。

{ "Version":"2012-10-17", "Statement": { "Action": "iot:GetCommand", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id" } }

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

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

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 コンソールでは、Command Hub に移動して、作成したコマンドのリストとその詳細を確認できます。

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

サンプルの IAM ポリシー

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

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

  • regionus-east-1 などお客様ご自身の AWS リージョンに置き換えます。

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

{ "Version":"2012-10-17", "Statement": { "Action": "iot:ListCommands", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012: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 ポリシーの例を示しています。

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

  • regionus-east-1 などお客様ご自身の AWS リージョンに置き換えます。

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

  • command-idLockDoor などの AWS IoT の一意のコマンド識別子に置き換えます。複数のコマンドを取得する場合は、IAM ポリシーの「Resource」セクションでこれらのコマンドを指定できます。

{ "Version":"2012-10-17", "Statement": { "Action": "iot:UpdateCommand", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012: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:us-east-1:123456789012:command/LockDoor", "displayName": "Secondary lock door", "description": "Locks doors to my home", "lastUpdatedAt": "2024-05-09T23:15:53.899000-07:00" }

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

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

注記

非推奨にしたコマンドを編集したり、そのコマンドに新しい実行を実行したりすることはできません。デバイスで新しいコマンドを実行するには、コマンドを復元して、コマンドの状態を [利用可能] にする必要があります。

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

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

コマンドが不要になった場合は、コマンドをアカウントから完全に削除することができます。削除アクションが成功した場合、以下が適用されます。

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

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

注記

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

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

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

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

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

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

サンプルの IAM ポリシー

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

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

  • regionus-east-1 などお客様ご自身の AWS リージョンに置き換えます。

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

  • command-idLockDoor などの AWS IoT の一意のコマンド識別子に置き換えます。複数のコマンドを取得する場合は、IAM ポリシーの「Resource」セクションでこれらのコマンドを指定できます。

{ "Version":"2012-10-17", "Statement": { "Action": "iot:DeleteCommand", "Effect": "Allow", "Resource": "arn:aws:iot:us-east-1:123456789012:command/command-id" } }

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

次の例は、 コマンドを使用してdelete-command AWS CLI コマンドを削除する方法を示しています。用途に応じて、<command-id> を、削除するコマンドの識別子に置き換えてください。

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

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