

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 명령 실행 시작 및 모니터링
<a name="send-monitor-remote-command-cli"></a>

**중요**  
특정 AWS IoT FleetWise 기능에 대한 액세스는 현재 게이트됩니다. 자세한 내용은 [AWS AWS IoT FleetWise의 리전 및 기능 가용성](fleetwise-regions.md) 단원을 참조하십시오.

명령 리소스를 생성한 후 대상 차량에서 명령 실행을 시작할 수 있습니다. 차량이 명령을 실행하기 시작하면 명령 실행의 결과 업데이트를 시작하고 상태 업데이트 및 결과 정보를 MQTT 예약 주제에 게시할 수 있습니다. 그러면 명령 실행 상태를 검색하고 계정의 실행 상태를 모니터링할 수 있습니다.

이 주제에서는 AWS CLI 또는 AWS IoT FleetWise 콘솔을 사용하여 차량에 명령을 보내는 방법을 보여줍니다. 또한 명령 실행 상태를 모니터링하고 업데이트하는 방법도 보여줍니다.

**Topics**
+ [명령 실행 결과 업데이트](#update-remote-command-execution-cli)
+ [명령 실행 가져오기](#get-remote-command-execution-cli)
+ [계정의 명령 실행 나열](#list-remote-command-execution-cli)
+ [명령 실행 삭제](#delete-remote-command-execution-cli)

## 명령 전송(콘솔)
<a name="send-command-console"></a>

콘솔에서 명령을 보내려면 AWS IoT FleetWise 콘솔의 [차량](https://console.aws.amazon.com/iotfleetwise/home#/vehicles) 페이지로 이동하여 다음 단계를 수행합니다.

1. 명령을 보낼 차량을 선택합니다.

1. **명령 실행**을 선택합니다.

1. 명령 ID를 선택합니다.

1. 명령 실행 제한 시간을 지정한 다음 **명령 실행**을 선택합니다.

## 명령 전송(AWS CLI)
<a name="send-remote-command-cli"></a>

[https://docs.aws.amazon.com/iot/latest/apireference/API_iot_data_StartCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iot_data_StartCommandExecution.html) AWS IoT 데이터 영역 API 작업을 사용하여 차량에 명령을 보낼 수 있습니다. 그런 다음 차량은 명령을 자동차 미들웨어 서비스(예: SOME/IP(IP를 통한 확장 가능한 서비스 지향 미들웨어))에 전달하거나 차량 네트워크(예: 컨트롤러 영역 네트워크(CAN) 디바이스 인터페이스)에 게시합니다. 다음 예제에서는 AWS CLI를 사용합니다.

**Topics**
+ [명령 전송 시 고려 사항](#send-remote-command-considerations)
+ [계정별 데이터 플레인 엔드포인트 획득](#send-remote-command-endpoint)
+ [명령 예제 전송](#send-remote-command-example)

### 명령 전송 시 고려 사항
<a name="send-remote-command-considerations"></a>

다음에서 명령 실행을 시작하는 경우 AWS IoT FleetWise:
+ 차량에 대한 AWS IoT 사물을 프로비저닝해야 합니다. 자세한 내용은 [Provision AWS IoT FleetWise 차량](provision-vehicles.md) 단원을 참조하십시오.
+ 를 네임스페이스`AWS-IoT-FleetWise`로 사용하여 명령을 이미 생성하고 AWS IoT FleetWise에서 명령을 생성하고 실행할 수 `role-Arn` 있는 권한을 부여하는를 제공했어야 합니다. 자세한 내용은 [명령 리소스 생성](create-manage-remote-command-cli.md#create-remote-command-cli) 단원을 참조하십시오.
+ 명령을 생성할 때 파라미터에 지정된 기본값을 사용하도록 선택한 경우 `parameters` 필드를 건너뛸 수 있습니다. 생성 시이 지정되지 `mandatory-parameters` 않았거나 파라미터에 대한 자체 값을 지정하여 기본값을 재정의하려면 `parameters` 필드를 지정해야 합니다. 이러한 추가 예제는 섹션을 참조하세요[명령 사용 시나리오](remote-command-use-cases.md).
+ `mandatory-parameters` 필드에 최대 3개의 이름-값 페어를 지정할 수 있습니다. 그러나 차량에서 명령을 실행할 때는 하나의 이름-값 페어만 허용되며 `name` 필드는 `$actuatorPath.` 접두사와 함께 정규화된 이름을 사용해야 합니다.

### 계정별 데이터 플레인 엔드포인트 획득
<a name="send-remote-command-endpoint"></a>

API 명령을 실행하기 전에 엔드포인트에 대한 계정별 `iot:Jobs` 엔드포인트 URL을 얻어야 합니다. 예를 들면 다음 명령을 실행하는 경우

```
aws iot describe-endpoint --endpoint-type iot:Jobs
```

아래 샘플 응답과 같이 계정별 엔드포인트 URL을 반환합니다.

```
{
    "endpointAddress": "<account-specific-prefix>.jobs.iot.<region>.amazonaws.com"
}
```

### 명령 예제 전송
<a name="send-remote-command-example"></a>

차량에 명령을 보내려면 다음 명령을 실행합니다.
+ *command-arn*을 실행하려는 명령의 ARN으로 바꿉니다. `create-command` CLI 명령의 응답에서 이 정보를 얻을 수 있습니다.
+ *target-arn*을 명령을 실행하려는 대상 디바이스 또는 AWS IoT 사물의 ARN으로 바꿉니다.
**참고**  
 AWS IoT 사물(AWS IoT FleetWise 차량)의 대상 ARN을 지정할 수 있습니다. 사물 그룹 및 플릿은 현재 지원되지 않습니다.
+ *endpoint-url*을에서 얻은 계정별 엔드포인트로 바꿉니다`https://123456789012abcd.jobs.iot.ap-south-1.amazonaws.com`. 예`https://`: [계정별 데이터 플레인 엔드포인트 획득](#send-remote-command-endpoint).
+ `create-command` CLI를 사용하여 명령을 생성할 때 지정한 `mandatory-parameters` 필드로 *이름과* *값을* 바꿉니다.

  `name` 필드는를 접두사`$actuatorPath.`로 사용하여 신호 카탈로그에 정의된 정규화된 이름입니다. 예를 들어 `name`는 *\$1actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode*일 수 있으며 *\$1"B": false\$1*와 같은 조향 모드 상태를 나타내는 부울일 `value` 수 있습니다.
+ (선택 사항) 추가 파라미터를 지정할 수도 있습니다`executionTimeoutSeconds`. 이 선택적 필드는 디바이스가 실행 결과로 응답해야 하는 시간을 초 단위로 지정합니다. 제한 시간을 최대 24시간으로 구성할 수 있습니다.

  명령 실행이 생성되면 타이머가 시작됩니다. 타이머가 만료되기 전에 명령 실행 상태가 `SUCCEEDED` 또는와 같이 터미널 상태가 되는 상태로 변경되지 않으면 `FAILED`상태가 자동으로 로 변경됩니다`TIMED_OUT`.
**참고**  
또한 디바이스는 `TIMED_OUT` 상태를 보고하거나이 상태를 `SUCCEEDED`, `FAILED`또는와 같은 상태로 재정의할 수 있으며`REJECTED`, 명령 실행은 터미널이 됩니다. 자세한 내용은 [명령 실행 제한 시간 상태](remote-command-concepts-states.md#remote-command-execution-status-timeout) 단원을 참조하십시오.

```
aws iot-jobs-data start-command-execution \ 
    --command-arn command-arn \ 
    --target-arn target-arn \
    --execution-timeout-seconds 30 \
    --endpoint-url endpoint-url \ 
    --parameters '[
        {
            "name": name, 
            "value": value
        }
   ]'
```

`StartCommandExecution` API 작업은 명령 실행 ID를 반환합니다. 이 ID를 사용하여 명령 실행 상태, 세부 정보 및 명령 실행 기록을 쿼리할 수 있습니다.

```
{
    "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542"
 }
```

명령을 실행하면 디바이스에 다음 정보가 포함된 알림이 전송됩니다. `issued_timestamp_ms` 필드는 `StartCommandExecution` API가 호출된 시간에 해당합니다. 는 `StartCommandExecution` API를 호출할 때 `executionTimeoutSeconds` 파라미터를 사용하여 구성된 제한 시간 값에 `timeout_ms` 해당합니다.

```
timeout_ms: 9000000
issued_timestamp_ms: 1723847831317
```

## 명령 실행 결과 업데이트
<a name="update-remote-command-execution-cli"></a>

명령 실행 상태를 업데이트하려면 디바이스가 MQTT 연결을 설정하고 다음 명령 요청 주제를 구독해야 합니다.

이 예제에서를 대상 디바이스의 고유 식별자*`<device-id>`*로 바꿉니다.이 식별자는 `VehicleId` 또는 사물 이름이 될 수 있으며를 명령 실행의 식별자*`<execution-id>`*로 바꿉니다.

**참고**  
페이로드는 protobuf 형식을 사용해야 합니다.
디바이스가 `/accepted` 및 `/rejected` 응답 주제를 구독하는 것은 선택 사항입니다. 디바이스는 명시적으로 구독하지 않은 경우에도 이러한 응답 메시지를 수신합니다.

```
// Request topic
$aws/devices/<DeviceID>/command_executions/+/request/protobuf

// Response topics (Optional)
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/accepted/protobuf
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/rejected/protobuf
```

디바이스는 명령 응답 주제에 메시지를 게시할 수 있습니다. 명령을 처리한 후이 주제에 protobuf 인코딩된 응답을 보냅니다. *<DeviceID>* 필드는 요청 주제의 해당 필드와 일치해야 합니다.

```
$aws/devices/<DeviceID>/command_executions/<ExecutionId>/response/<PayloadFormat>
```

디바이스가이 주제에 대한 응답을 게시한 후 `GetCommandExecution` API를 사용하여 업데이트된 상태 정보를 검색할 수 있습니다. 명령 실행의 상태는 여기에 나열된 상태 중 하나일 수 있습니다.
+ `IN_PROGRESS`
+ `SUCCEEDED`
+ `FAILED`
+ `REJECTED`
+ `TIMED_OUT`

상태 `SUCCEEDED`, `FAILED`및 중 하나의 명령 실행`REJECTED`은 터미널이며 상태는 디바이스에서 보고됩니다. 명령 실행이 터미널인 경우 상태 또는 관련 필드를 더 이상 업데이트하지 않습니다. 디바이스 또는 클라우드에서 `TIMED_OUT` 상태를 보고할 수 있습니다. 클라우드에서 보고하는 경우 나중에 디바이스에서 상태 이유 필드를 업데이트할 수 있습니다.

예를 들어, 다음은 디바이스에서 게시한 샘플 MQTT 메시지를 보여줍니다.

**참고**  
명령 실행 상태의 경우 디바이스가 `statusReason` 객체를 사용하여 상태 정보를 게시하는 경우 다음을 확인해야 합니다.  
는 패턴을 `reasonCode` 사용`[A-Z0-9_-]+`하며 길이는 64자를 초과하지 않습니다.
는 길이가 1,024자를 초과하지 `reasonDescription` 않습니다. 개행 문자와 같은 제어 문자를 제외한 모든 문자를 사용할 수 있습니다.

```
{
    "deviceId": "",
    "executionId": "",
    "status": "CREATED",
    "statusReason": {
        "reasonCode": "",
        "reasonDescription": ""
    }
}
```

 AWS IoT Core MQTT 테스트 클라이언트를 사용하여 주제를 구독하고 명령 실행 메시지를 보는 방법을 보여주는 예제는 *AWS IoT Core 개발자 안내서*[의 MQTT 테스트 클라이언트를 사용하여 명령 업데이트 보기를](https://docs.aws.amazon.com/iot/latest/developerguide/iot-remote-command-execution-start-monitor.html#iot-remote-command-execution-update-mqtt) 참조하세요.

## 명령 실행 가져오기
<a name="get-remote-command-execution-cli"></a>

[https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html) AWS IoT 컨트롤 플레인 API 작업을 사용하여 명령 실행에 대한 정보를 검색할 수 있습니다. `StartCommandExecution` API 작업을 사용하여 이 명령을 이미 실행했어야 합니다.

실행된 명령의 메타데이터를 검색하려면 다음 명령을 실행합니다.
+ *execution-id*를 명령의 ID로 바꿉니다. `start-command-execution` CLI 명령의 응답에서 이 정보를 얻을 수 있습니다.
+ *target-arn*을 명령을 실행하려는 대상 차량의 ARN 또는 AWS IoT 사물로 바꿉니다.

```
aws iot get-command-execution --execution-id execution-id \ 
    --target-arn target-arn
```

`GetCommandExecution` API 작업은 명령 실행의 ARN, 실행 상태, 명령 실행이 시작된 시간 및 완료된 시간에 대한 정보가 포함된 응답을 반환합니다. 다음 코드는 API 요청의 샘플 응답을 보여줍니다.

각 명령 실행의 상태에 대한 추가 컨텍스트를 제공하기 위해 명령 기능은 `statusReason` 객체를 제공합니다. 객체에는 `reasonCode` 및 라는 두 개의 필드가 포함되어 있습니다`reasonDescription`. 디바이스는 이러한 필드를 사용하여 명령 실행 상태에 대한 추가 정보를 제공할 수 있습니다. 이 정보는 모든 기본값을 재정의`reasonCode`하며 클라우드에서 보고`reasonDescription`됩니다.

이 정보를 보고하기 위해 디바이스는 업데이트된 상태 정보를 클라우드에 게시할 수 있습니다. 그런 다음 `GetCommandExecution` API를 사용하여 명령 실행 상태를 검색하면 최신 상태 코드가 표시됩니다.

**참고**  
실행 응답의 `completedAt` 필드는 디바이스가 클라우드에 터미널 상태를 보고하는 시간에 해당합니다. `TIMED_OUT` 상태인 경우 디바이스가 A 제한 시간을 보고할 때만이 필드가 설정됩니다. 클라우드에서 `TIMED_OUT` 상태를 설정하면 `TIMED_OUT` 상태가 업데이트되지 않습니다. 이 제한 시간 초과 동작에 대한 자세한 내용은 [명령 실행 제한 시간 상태](remote-command-concepts-states.md#remote-command-execution-status-timeout) 섹션을 참조하세요.

```
{
    "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542",
    "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor",
    "targetArn": "arn:aws:iot:ap-south-1:123456789012:thing/myFrontDoor",
    "status": "SUCCEEDED",
    "statusReason": {
        "reasonCode": "65536",
        "reasonDescription": "SUCCESS"
    },
    "createdAt": "2024-03-23T00:50:10.095000-07:00",
    "completedAt": "2024-03-23T00:50:10.095000-07:00",
    "Parameters": '{
         "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode":          
         { "B": true }
    }' 
}
```

## 계정의 명령 실행 나열
<a name="list-remote-command-execution-cli"></a>

[https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html](https://docs.aws.amazon.com/iot/latest/apireference/API_ListCommandExecutions.html) AWS IoT Core 컨트롤 플레인 HTTP API 작업을 사용하여 계정의 모든 명령 실행을 나열합니다. 이 예제에서는 AWS CLI을 사용합니다.

**Topics**
+ [명령 실행을 나열할 때 고려 사항](#list-remote-command-considerations)
+ [명령 실행 나열 예제](#list-remote-command-example)

### 명령 실행을 나열할 때 고려 사항
<a name="list-remote-command-considerations"></a>

다음은 `ListCommandExecutions` API를 사용할 때 고려해야 할 몇 가지 사항입니다.
+ 특정 명령 `targetArn` 또는 대상 차량에 대한 실행을 나열할지 여부에 `commandArn` 따라 최소한 또는를 지정해야 합니다. API 요청은 비워둘 수 없으며 동일한 요청에 두 필드를 모두 포함할 수 없습니다.
+ `startedTimeFilter` 또는 `completedTimeFilter` 정보만 제공해야 합니다. API 요청은 비워둘 수 없으며 동일한 요청에 두 필드를 모두 포함할 수 없습니다. 객체의 `before` 및 `after` 필드를 사용하여 특정 기간 내에 생성되거나 완료된 명령 실행을 나열할 수 있습니다.
+ `before` 및 `after` 필드 모두 현재 시간보다 크지 않아야 합니다. 기본적으로 값을 지정하지 않으면 `before` 필드는 현재 시간이고 `after` 필드는 현재 시간 - 6개월입니다. 즉, 사용하는 필터에 따라 API는 지난 6개월 이내에 생성되거나 완료된 모든 실행을 나열합니다.
+ `sort-order` 파라미터를 사용하여 실행을 오름차순으로 나열할지 여부를 지정할 수 있습니다. 기본적으로이 필드를 지정하지 않으면 실행이 내림차순으로 나열됩니다.
+ 명령 ARN에 대한 명령 실행을 나열할 때 상태를 기준으로 명령 실행을 필터링할 수 없습니다.

### 명령 실행 나열 예제
<a name="list-remote-command-example"></a>

다음 예제에서는 AWS 계정에서 명령 실행을 나열하는 방법을 보여줍니다.

명령을 실행할 때 목록을 필터링할 때, `targetArn`을 사용하여 특정 디바이스에 대해 생성된 명령 실행만 표시할지 또는 `commandArn`을 사용하여 지정된 특정 명령에 대한 실행만 표시할지 지정해야 합니다.

대체 예시:
+ *`<target-arn>`* 대신 실행을 대상으로 하는 디바이스의 Amazon 리소스 번호(ARN)(예: `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`)를 사용합니다.
+ *`<target-arn>`* 대신 실행을 대상으로 하는 디바이스의 Amazon 리소스 번호(ARN)(예: `arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f`)를 사용합니다.
+ *`<after>`* 대신 생성된 실행을 나열하려는 시간(예: `2024-11-01T03:00`)이 표시됩니다.

```
aws iot list-command-executions \ 
--target-arn <target-arn> \ 
--started-time-filter '{after=<after>}' \
--sort-order "ASCENDING"
```

이 명령을 실행하면 생성한 명령 실행 목록, 실행이 시작된 시간 및 완료된 시간이 포함된 응답이 생성됩니다. 또한, 상태 정보, 그리고 상태에 대한 추가 정보가 포함된 `statusReason` 객체도 제공합니다.

```
{
    "commandExecutions": [
        {
            "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002",
            "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24",
            "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f",
            "status": "TIMED_OUT",
            "createdAt": "2024-11-24T14:39:25.791000-08:00",
            "startedAt": "2024-11-24T14:39:25.791000-08:00"
        },
        {
            "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002",
            "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f",
            "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f",
            "status": "IN_PROGRESS",
            "createdAt": "2024-11-24T14:05:36.021000-08:00",
            "startedAt": "2024-11-24T14:05:36.021000-08:00"
        }
    ]
}
```

## 명령 실행 삭제
<a name="delete-remote-command-execution-cli"></a>

명령 실행을 더 이상 사용하지 않을 경우, 계정에서 영구적으로 제거할 수 있습니다.

**참고**  
명령 실행은 `SUCCEEDED`, `FAILED` 또는 `REJECTED`와 같은 터미널 상태가 된 경우에만 삭제할 수 있습니다.

다음 예제에서는 명령을 사용하여 `delete-command-execution` AWS CLI 명령 실행을 삭제하는 방법을 보여줍니다. 를 삭제하려는 명령 실행의 식별자*`<execution-id>`*로 바꿉니다.

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

API 요청이 성공하면 명령 실행은 상태 코드 200을 생성합니다. `GetCommandExecution` API를 사용하여 명령 실행이 계정에 더 이상 존재하지 않는지 확인할 수 있습니다.