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

コマンドの作成と管理

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

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

コマンドを作成する際は、以下の情報を提供する必要があります。

  • 一般的な情報

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

  • Payload

    また、デバイスが実行する必要があるアクションを定義するペイロードを指定する必要があります。必須ではありませんが、ペイロード形式タイプを指定することで、デバイスが正しくペイロードを読み取れるようにしておくことをお勧めします。

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

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

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

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

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

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

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

コマンドのペイロード形式

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

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

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

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

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

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

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

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

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

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

コマンドのペイロード

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

注記

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

サンプルの IAM ポリシー

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

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

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

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

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

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

コマンド作成の例

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

  • <command-id> をコマンドの一意の識別子で置き換えます。たとえば、自宅の doc-history をロックするには、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-command CLI を使用してあらかじめ作成しておく必要があります。

サンプルの IAM ポリシー

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

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

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

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

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

JSON
{ "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 コンソールでは、[コマンドハブ]に移動して、作成したコマンドのリストとその詳細を確認することができます。

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

サンプルの IAM ポリシー

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

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

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

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

JSON
{ "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 ポリシーの例を示しています。

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

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

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

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

JSON
{ "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: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" }

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

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

注記

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

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

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

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

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

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

注記

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

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

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

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

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

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

サンプルの IAM ポリシー

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

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

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

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

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

JSON
{ "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 を使用して、コマンドがアカウントに存在していないことを確認できます。