

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

# 배포
<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
```