

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

# Greengrass CLI 명령
<a name="gg-cli-reference"></a>

Greengrass CLI는 AWS IoT Greengrass 코어 디바이스와 로컬로 상호 작용할 수 있는 명령줄 인터페이스를 제공합니다. Greengrass CLI 명령은 다음 형식을 사용합니다.

```
$ greengrass-cli <command> <subcommand> [arguments]
```

기본적으로 `/greengrass/v2/bin/` 폴더의 `greengrass-cli` 실행 파일은 `/greengrass/v2` 폴더에서 실행되는 AWS IoT Greengrass 코어 소프트웨어의 버전과 상호 작용합니다. 이 위치에 없는 실행 파일을 직접 호출하거나 다른 위치의 AWS IoT Greengrass 코어 소프트웨어와 상호 작용하려면 다음 방법 중 하나를 사용하여 상호 작용하려는 AWS IoT Greengrass 코어 소프트웨어의 루트 경로를 명시적으로 지정해야 합니다.<a name="greengrass-cli-set-root-path"></a>
+ `GGC_ROOT_PATH` 환경 변수를 `/greengrass/v2`로 설정합니다.
+ 다음 예제와 같이 명령에 `--ggcRootPath /greengrass/v2` 인수를 추가합니다.

  ```
  greengrass-cli --ggcRootPath /greengrass/v2 <command> <subcommand> [arguments]
  ```

모든 명령에서 다음 인수를 사용할 수 있습니다.
+ `--help`를 사용하면 특정 Greengrass CLI 명령에 관한 정보를 얻을 수 있습니다.
+ `--version`을 사용하면 Greengrass CLI 버전에 관한 정보를 얻을 수 있습니다.

이 섹션에서는 Greengrass CLI 명령을 설명하고 이러한 명령의 예제를 제공합니다. 각 명령의 개요에는 인수와 용도가 표시됩니다. 선택적 인수는 대괄호에 표시됩니다.

**Topics**
+ [구성 요소](gg-cli-component.md)
+ [배포](gg-cli-deployment.md)
+ [로그](gg-cli-logs.md)
+ [get-debug-password](gg-cli-get-debug-password.md)

# 구성 요소
<a name="gg-cli-component"></a>

`component` 명령을 사용하여 코어 디바이스의 로컬 구성 요소와 상호 작용합니다.

**하위 명령**
+ [details](#component-details)
+ [list](#component-list)
+ [재시작](#component-restart)
+ [중단](#component-stop)

## details
<a name="component-details"></a>

한 구성 요소의 버전, 상태 및 구성을 검색합니다.

**시놉시스**  

```
greengrass-cli component details --name <component-name> 
```

**인수**:  
`--name`, `-n`. 구성 요소 이름.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli component details --name MyComponent 

Component Name: MyComponent 
Version: 1.0.0
State: RUNNING
Configuration: null
```

## list
<a name="component-list"></a>

디바이스에 설치된 각 구성 요소의 이름, 버전, 상태 및 구성을 검색합니다.

**시놉시스**  

```
greengrass-cli component list
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli component list

Components currently running in Greengrass:
Component Name: FleetStatusService
Version: 0.0.0
State: RUNNING
Configuration: {"periodicUpdateIntervalSec":86400.0}
Component Name: UpdateSystemPolicyService
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: aws.greengrass.Nucleus
Version: 2.0.0
State: FINISHED
Configuration: {"awsRegion":"region","runWithDefault":{"posixUser":"ggc_user:ggc_group"},"telemetry":{}}
Component Name: DeploymentService
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: TelemetryAgent
Version: 0.0.0
State: RUNNING
Configuration: null
Component Name: aws.greengrass.Cli
Version: 2.0.0
State: RUNNING
Configuration: {"AuthorizedPosixGroups":"ggc_user"}
```

## 재시작
<a name="component-restart"></a>

구성 요소를 다시 시작합니다.

**시놉시스**  

```
greengrass-cli component restart --names <component-name>,...
```

**인수**:  
`--names`, `-n`. 구성 요소 이름. 하나 이상의 구성 요소 이름이 필요합니다. 추가 구성 요소 이름을 지정하고, 각 이름을 쉼표로 구분할 수 있습니다.

**출력**:  
없음

## 중단
<a name="component-stop"></a>

구성 요소 실행을 중지합니다.

**시놉시스**  

```
greengrass-cli component stop --names <component-name>,...
```

**인수**:  
`--names`, `-n`. 구성 요소 이름. 하나 이상의 구성 요소 이름이 필요합니다. 필요한 경우 추가 구성 요소 이름을 지정하고, 각 이름을 쉼표로 구분할 수 있습니다.

**출력**:  
없음

# 배포
<a name="gg-cli-deployment"></a>

`deployment` 명령을 사용하여 코어 디바이스의 로컬 구성 요소와 상호 작용합니다.

로컬 배포 진행 상황을 모니터링하려면 `status` 하위 명령을 사용합니다. 콘솔을 사용하여 로컬 배포의 진행 상황을 모니터링할 수는 없습니다.

**하위 명령**
+ [생성](#deployment-create)
+ [취소](#deployment-cancel)
+ [list](#deployment-list)
+ [status](#deployment-status)

## 생성
<a name="deployment-create"></a>

지정된 구성 요소 레시피, 아티팩트 및 런타임 인수를 사용하여 로컬 배포를 생성하거나 업데이트합니다.

**시놉시스**  

```
greengrass-cli deployment create 
    --recipeDir path/to/component/recipe
    [--artifactDir path/to/artifact/folder ]
    [--update-config {component-configuration}]
    [--groupId <thing-group>]
    [--merge "<component-name>=<component-version>"]...
    [--runWith "<component-name>:posixUser=<user-name>[:<group-name>]"]...
    [--systemLimits "{component-system-resource-limits}]"]...
    [--remove <component-name>,...]
    [--failure-handling-policy <policy name[ROLLBACK, DO_NOTHING]>]
```

**인수**:  
+ `--recipeDir`, `-r`. 구성 요소 레시피 파일이 포함된 폴더의 전체 경로.
+ `--artifactDir`, `-a`. 배포에 포함할 아티팩트 파일이 포함된 폴더의 전체 경로. 아티팩트 폴더에는 다음 디렉터리 구조가 포함되어야 합니다.

  ```
  /path/to/artifact/folder/<component-name>/<component-version>/<artifacts>
  ```
+ `--update-config`, `-c`. JSON 문자열 또는 JSON 파일로 제공되는 배포에 대한 구성 인수. JSON 문자열은 다음 형식이어야 합니다.

  ```
  { \
    "componentName": { \ 
      "MERGE": {"config-key": "config-value"}, \
      "RESET": ["path/to/reset/"] \
    } \
  }
  ```

  `MERGE` 및 `RESET`은 대/소문자를 구분하며 대문자여야 합니다.
+ `--groupId`, `-g`. 배포의 대상 사물 그룹.
+ `--merge`, `-m`. 추가 또는 업데이트하려는 대상 구성 요소의 이름과 버전. `<component>=<version>` 형식으로 구성 요소 정보를 제공해야 합니다. 각 추가 구성 요소에 대해 별도의 인수를 사용하여 지정합니다. 필요한 경우 `--runWith` 인수를 사용하여 구성 요소 실행에 대한 `posixUser`, `posixGroup` 및 `windowsUser` 정보를 제공합니다.
+ `--runWith`. 일반 또는 Lambda 구성 요소 실행에 대한 `posixUser`, `posixGroup` 및 `windowsUser` 정보. `<component>:{posixUser|windowsUser}=<user>[:<=posixGroup>]` 형식으로 이 정보를 제공해야 합니다. 예를 들어, **HelloWorld:posixUser=ggc\$1user:ggc\$1group** 또는 **HelloWorld:windowsUser=ggc\$1user**를 지정할 수 있습니다. 각 추가 옵션에 대해 별도의 인수를 사용하여 지정합니다.

  자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 섹션을 참조하세요.
+ `--systemLimits`. 코어 디바이스에서 일반 및 컨테이너화되지 않은 Lambda 구성 요소의 프로세스에 적용할 시스템 리소스 제한. 각 구성 요소의 프로세스에서 사용할 수 있는 최대 CPU 및 RAM 사용량을 구성할 수 있습니다. 직렬화된 JSON 객체 또는 JSON 파일의 파일 경로를 지정합니다. JSON 객체는 다음 형식이어야 합니다.

  ```
  {  \
    "componentName": { \ 
      "cpus": cpuTimeLimit, \
      "memory": memoryLimitInKb \
    } \
  }
  ```

  각 구성 요소에 대해 다음 시스템 리소스 제한을 구성할 수 있습니다.
  + `cpus` - <a name="system-resource-limits-cpu-definition-this"></a>이 구성 요소의 프로세스가 코어 디바이스에서 사용할 수 있는 최대 CPU 시간입니다. 코어 디바이스의 총 CPU 시간은 디바이스의 CPU 코어 수와 같습니다. 예를 들어 CPU 코어가 4개인 코어 디바이스에서 이 값을 `2`로 설정하여 이 구성 요소 프로세스를 각 CPU 코어의 50% 사용량으로 제한할 수 있습니다. CPU 코어가 1개인 디바이스에서 이 값을 `0.25`로 설정하여 이 구성 요소 프로세스를 CPU의 25% 사용량으로 제한할 수 있습니다. 이 값을 CPU 코어 수보다 큰 수로 설정하면 AWS IoT Greengrass 코어 소프트웨어에서는 구성 요소의 CPU 사용량을 제한하지 않습니다.
  + `memory` - <a name="system-resource-limits-memory-definition-this"></a>이 구성 요소의 프로세스가 코어 디바이스에서 사용할 수 있는 최대 RAM(KB 단위)입니다.

  자세한 내용은 [구성 요소에 대한 시스템 리소스 제한 구성](configure-greengrass-core-v2.md#configure-component-system-resource-limits) 섹션을 참조하세요.

  이 기능은 Linux 코어 디바이스의 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) 및 Greengrass CLI v2.4.0 이상에서 사용할 수 있습니다. AWS IoT Greengrass는 현재 Windows 코어 디바이스에서 이 기능을 지원하지 않습니다.
+ `--remove`. 로컬 배포에서 제거하려는 대상 구성 요소의 이름. 클라우드 배포에서 병합된 구성 요소를 제거하려면 다음 형식으로 대상 사물 그룹의 그룹 ID를 제공해야 합니다.

------
#### [ Greengrass nucleus v2.4.0 and later ]

  ```
  --remove <component-name> --groupId <group-name>
  ```

------
#### [ Earlier than v2.4.0 ]

  ```
  --remove <component-name> --groupId thinggroup/<group-name>
  ```

------
+ `--failure-handling-policy`. 배포가 실패할 때 실시하는 작업 정의. 두 가지 작업을 지정할 수 있습니다.
  + `ROLLBACK` – 
  + `DO_NOTHING` – 

  이 기능은 [Greengrass nucleus](greengrass-nucleus-component.md)의 v2.11.0 이상에서 사용할 수 있습니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli deployment create \
    --merge MyApp1=1.0.0 \
    --merge MyApp2=1.0.0 --runWith MyApp2:posixUser=ggc_user \
    --remove MyApp3 \
    --recipeDir recipes/ \ 
    --artifactDir artifacts/

Local deployment has been submitted! Deployment Id: 44d89f46-1a29-4044-ad89-5151213dfcbc
```

## 취소
<a name="deployment-cancel"></a>

지정된 배포를 취소합니다.

시놉시스  

```
greengrass-cli deployment cancel
    -i <deployment-id>
```

인수  
`-i`. 취소할 배포의 고유 식별자. 배포 ID는 `create` 명령의 출력에 반환됩니다.

출력  
+ 없음

## list
<a name="deployment-list"></a>

마지막 10개의 로컬 배포 상태를 검색합니다.

**시놉시스**  

```
greengrass-cli deployment list
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다. 배포 상태에 따라 출력에 `IN_PROGRESS`, `SUCCEEDED` 또는 `FAILED` 중 하나의 상태 값이 표시됩니다.  

```
$ sudo greengrass-cli deployment list

44d89f46-1a29-4044-ad89-5151213dfcbc: SUCCEEDED
Created on: 6/27/23 11:05 AM
```

## status
<a name="deployment-status"></a>

특정 배포의 상태를 검색합니다.

**시놉시스**  

```
greengrass-cli deployment status -i <deployment-id>
```

**인수**:  
`-i`. 배포의 ID.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다. 배포 상태에 따라 출력에 `IN_PROGRESS`, `SUCCEEDED` 또는 `FAILED` 중 하나의 상태 값이 표시됩니다.  

```
$ sudo greengrass-cli deployment status -i 44d89f46-1a29-4044-ad89-5151213dfcbc

44d89f46-1a29-4044-ad89-5151213dfcbc: FAILED
Created on: 6/27/23 11:05 AM
Detailed Status: <Detailed deployment status>
Deployment Error Stack: List of error codes
Deployment Error Types: List of error types
Failure Cause: Cause
```

# 로그
<a name="gg-cli-logs"></a>

`logs` 명령을 사용하여 코어 디바이스의 Greengrass 로그를 분석합니다.

**하위 명령**
+ [get](#logs-get)
+ [list-keywords](#logs-list-keywords)
+ [list-log-files](#logs-list-log-files)

## get
<a name="logs-get"></a>

Greengrass 로그 파일을 수집, 필터링 및 시각화합니다. 이 명령은 JSON 형식의 로그 파일만 지원합니다. nucleus 구성에서 [로깅 형식](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-logging-format)을 지정할 수 있습니다.

**시놉시스**  

```
greengrass-cli logs get
    [--log-dir path/to/a/log/folder]
    [--log-file path/to/a/log/file]
    [--follow true | false ]
    [--filter <filter> ]
    [--time-window <start-time>,<end-time> ]
    [--verbose ]
    [--no-color ]
    [--before <value> ]
    [--after <value> ]
    [--syslog ]
    [--max-long-queue-size <value> ]
```

**인수**:  
+ `--log-dir`, `-ld`. 로그 파일을 확인할 디렉터리의 경로(예: **`/greengrass/v2`/logs**). `--syslog`와 함께 사용하지 않습니다. 각 추가 디렉터리에 대해 별도의 인수를 사용하여 지정합니다. `--log-dir` 또는 `--log-file` 중 하나 이상을 사용해야 합니다. 단일 명령에서 두 인수를 모두 사용할 수도 있습니다.
+ `--log-file`, `-lf`. 사용하려는 로그 디렉터리의 경로. 각 추가 디렉터리에 대해 별도의 인수를 사용하여 지정합니다. `--log-dir` 또는 `--log-file` 중 하나 이상을 사용해야 합니다. 단일 명령에서 두 인수를 모두 사용할 수도 있습니다.
+ `--follow`, `-fol`. 발생하는 로그 업데이트 표시. Greengrass CLI는 계속 실행되고 지정된 로그에서 읽습니다. 시간대를 지정하면 모든 시간대가 종료된 후 Greengrass CLI가 로그 모니터링을 중지합니다.
+ `--filter`, `-f`. 필터로 사용할 키워드, 정규식 또는 키-값 페어. 이 값을 문자열, 정규식 또는 키-값 페어로 제공하세요. 각 추가 필터에 대해 별도의 인수를 사용하여 지정합니다.

  평가 시 단일 인수에 지정된 여러 필터가 OR 연산자로 분리되고, 추가 인수에 지정된 필터가 AND 연산자와 결합됩니다. 예를 들어 명령에 `--filter "installed" --filter "name=alpha,name=beta"`가 포함된 경우 Greengrass CLI는 키워드 `installed`와 값이 `alpha` 또는 `beta`인 `name` 키가 모두 포함된 로그 메시지를 필터링하고 표시합니다.
+ `--time-window`, `-t`. 로그 정보를 표시할 시간대. 정확한 타임스탬프와 상대 오프셋을 모두 사용할 수 있습니다. `<begin-time>,<end-time>` 형식으로 이 정보를 제공해야 합니다. 시작 시간 또는 종료 시간을 지정하지 않으면 해당 옵션의 값은 현재 시스템 날짜 및 시간으로 기본 설정됩니다. 각 추가 시간대에 대해 별도의 인수를 사용하여 지정합니다.

  Greengrass CLI는 타임스탬프에 대해 다음 형식을 지원합니다.
  + `yyyy-MM-DD`(예: `2020-06-30`). 이 형식을 사용할 때 시간은 기본적으로 00:00:00으로 설정됩니다.

    `yyyyMMDD`(예: `20200630`). 이 형식을 사용할 때 시간은 기본적으로 00:00:00으로 설정됩니다.

    `HH:mm:ss`(예: `15:30:45`). 이 형식을 사용할 때 날짜는 기본적으로 현재 시스템의 날짜로 설정됩니다.

    `HH:mm:ssSSS`(예: `15:30:45`). 이 형식을 사용할 때 날짜는 기본적으로 현재 시스템의 날짜로 설정됩니다.

    `YYYY-MM-DD'T'HH:mm:ss'Z'`(예: `2020-06-30T15:30:45Z`).

    `YYYY-MM-DD'T'HH:mm:ss`(예: `2020-06-30T15:30:45`).

    `yyyy-MM-dd'T'HH:mm:ss.SSS`(예: `2020-06-30T15:30:45.250`).

  상대 오프셋은 현재 시스템 시간에서 시간 오프셋을 지정합니다. Greengrass CLI는 상대 오프셋에 대해 `+|-[<value>h|hr|hours][valuem|min|minutes][value]s|sec|seconds` 형식을 지원합니다.

  예를 들어 현재 시간에서 1시간\$12시간 15분 사이 전의 시간대를 지정하는 인수는 `--time-window -2h15min,-1hr`입니다.
+ `--verbose`. 로그 메시지의 모든 필드 표시. `--syslog`와 함께 사용하지 않습니다.
+ `--no-color`, `-nc`. 색상 코딩 제거. 로그 메시지의 기본 색상 코딩은 굵은 빨간색 텍스트 사용입니다. ANSI 이스케이프 시퀀스를 사용하기 때문에 UNIX 계열 터미널만 지원합니다.
+ `--before`, `-b`. 일치하는 로그 항목 앞에 표시할 줄 수. 기본값은 0.
+ `--after`, `-a`. 일치하는 로그 항목 뒤에 표시할 줄 수. 기본값은 0.
+ `--syslog`. RFC3164에서 정의한 syslog 프로토콜을 사용하여 모든 로그 파일 처리. `--log-dir` 및 `--verbose`와 함께 사용하지 않습니다. syslog 프로토콜에서 사용하는 형식: `"<$Priority>$Timestamp $Host $Logger ($Class): $Message"`. 로그 파일을 지정하지 않으면 Greengrass CLI는 `/var/log/messages`, `/var/log/syslog` 또는 `/var/log/system.log` 위치에서 로그 메시지를 읽습니다.

  AWS IoT Greengrass는 현재 Windows 코어 디바이스에서 이 기능을 지원하지 않습니다.
+ `--max-log-queue-size`, `-m`. 메모리에 할당할 최대 로그 항목 수. 이 옵션을 사용하여 메모리 사용량을 최적화합니다. 기본값은 100입니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli logs get --verbose \
    --log-file /greengrass/v2/logs/greengrass.log \
    --filter deployment,serviceName=DeploymentService \
    --filter level=INFO \
    --time-window 2020-12-08T01:11:17,2020-12-08T01:11:22

2020-12-08T01:11:17.615Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.DeploymentService: Current deployment finished. {DeploymentId=44d89f46-1a29-4044-ad89-5151213dfcbc, serviceName=DeploymentService, currentState=RUNNING}
2020-12-08T01:11:17.675Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.IotJobsHelper: Updating status of persisted deployment. {Status=SUCCEEDED, StatusDetails={detailed-deployment-status=SUCCESSFUL}, ThingName=MyThing, JobId=22d89f46-1a29-4044-ad89-5151213dfcbc
```

## list-keywords
<a name="logs-list-keywords"></a>

로그 파일을 필터링하는 데 사용할 수 있는 키워드 제안을 표시합니다.

**시놉시스**  

```
greengrass-cli logs list-keywords [arguments]
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli logs list-keywords

Here is a list of suggested keywords for Greengrass log:
level=$str
thread=$str
loggerName=$str
eventType=$str
serviceName=$str
error=$str
```

```
$ sudo greengrass-cli logs list-keywords --syslog

Here is a list of suggested keywords for syslog:
priority=$int
host=$str
logger=$str
class=$str
```

## list-log-files
<a name="logs-list-log-files"></a>

지정된 디렉터리에 있는 로그 파일을 표시합니다.

**시놉시스**  

```
greengrass-cli logs list-log-files [arguments]
```

**인수**:  
`--log-dir`, `-ld`. 로그 파일을 확인할 디렉터리의 경로.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli logs list-log-files -ld /greengrass/v2/logs/

/greengrass/v2/logs/aws.greengrass.Nucleus.log
/greengrass/v2/logs/main.log
/greengrass/v2/logs/greengrass.log
Total 3 files found.
```

# get-debug-password
<a name="gg-cli-get-debug-password"></a>

`get-debug-password` 명령을 사용하여 [로컬 디버그 콘솔 구성 요소](local-debug-console-component.md)(`aws.greengrass.LocalDebugConsole`)에 대해 무작위로 생성된 암호를 인쇄합니다. 암호는 생성되고 8시간 후에 만료됩니다.

**시놉시스**  

```
greengrass-cli get-debug-password
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ sudo greengrass-cli get-debug-password

Username: debug
Password: bEDp3MOHdj8ou2w5de_sCBI2XAaguy3a8XxREXAMPLE
Password expires at: 2021-04-01T17:01:43.921999931-07:00
The local debug console is configured to use TLS security. The certificate is self-signed so you will need to bypass your web browser's security warnings to open the console.
Before you bypass the security warning, verify that the certificate fingerprint matches the following fingerprints.
SHA-256: 15 0B 2C E2 54 8B 22 DE 08 46 54 8A B1 2B 25 DE FB 02 7D 01 4E 4A 56 67 96 DA A6 CC B1 D2 C4 1B
SHA-1: BC 3E 16 04 D3 80 70 DA E0 47 25 F9 90 FA D6 02 80 3E B5 C1
```