

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

# 하위 배포 생성
<a name="create-subdeployments"></a>

**참고**  
하위 배포 특성은 Greengrass nucleus 버전 2.9.0 이상에서 사용할 수 있습니다. Greengrass nucleus의 이전 구성 요소 버전을 사용하여 하위 배포에 구성을 배포할 수는 없습니다.

하위 배포는 상위 배포 내 더 작은 디바이스 하위 집합이 대상이 되는 배포입니다. 하위 배포를 사용하여 더 작은 디바이스 하위 집합에 구성을 배포할 수 있습니다. 상위 배포에서 하나 이상의 디바이스가 실패할 때 성공하지 못한 해당 상위 배포를 다시 시도할 하위 배포를 생성할 수도 있습니다. 이 특성으로 해당 상위 배포에서 실패한 디바이스를 선택하고 하위 배포를 생성하여 하위 배포가 성공할 때까지 구성을 테스트할 수 있습니다. 하위 배포에 성공하면 해당 구성을 상위 배포에 다시 배포할 수 있습니다.

이 단원의 단계에 따라 하위 배포를 생성하고 상태를 확인합니다. 배포를 생성하는 방법에 대한 자세한 내용은 [배포 생성](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html)을 참조하세요.

**하위 배포를 생성하는 방법(AWS CLI)**

1. <a name="create-subdeployments-step1"></a>다음 명령을 실행하여 사물 그룹에 대한 최신 배포를 검색합니다. 쿼리할 사물 그룹의 ARN으로 명령의 ARN을 바꿉니다. `--history-filter`를 **LATEST\$1ONLY**로 설정하여 해당 사물 그룹의 최신 배포를 참조합니다.

   ```
   aws greengrassv2 list-deployments --target-arn arn:aws:iot:region:account-id:thinggroup/thingGroupName --history-filter LATEST_ONLY
   ```

1. 응답 중에서 `deploymentId`를 다음 단계에서 사용할 **list-deployments** 명령에 복사합니다.

1. 다음 명령을 실행하여 배포의 상태를 검색합니다. 쿼리할 배포의 ID로 `deploymentId`를 바꿉니다.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

1. 응답 중에서 `iotJobId`를 다음 단계에서 사용할 **get-deployment** 명령에 복사합니다.

1. 다음 명령을 실행하여 지정된 작업에 대한 작업 실행 목록을 검색합니다. 이전 단계의 `iotJobId`로 *jobID*를 바꿉니다. 필터링하려는 상태로 *상태*를 바꿉니다. 다음 상태로 결과를 필터링할 수 있습니다.
   + `QUEUED`
   + `IN_PROGRESS`
   + `SUCCEEDED`
   + `FAILED`
   + `TIMED_OUT`
   + `REJECTED`
   + `REMOVED`
   + `CANCELED`

   ```
   aws iot list-job-executions-for-job --job-id jobID --status status
   ```

1. 하위 배포에 대해 새 AWS IoT 사물 그룹을 생성하거나 기존 사물 그룹을 사용합니다. 그런 다음에 AWS IoT 사물을 이 사물 그룹에 추가합니다. 사물 그룹을 사용하여 Greengrass 코어 디바이스 플릿을 관리합니다. 소프트웨어 구성 요소를 디바이스에 배포할 때 개별 디바이스 또는 디바이스 그룹을 대상으로 지정할 수 있습니다. 활성 Greengrass 배포가 있는 사물 그룹에 디바이스를 추가할 수 있습니다. 추가하면 해당 사물 그룹의 소프트웨어 구성 요소를 해당 디바이스에 배포할 수 있습니다.

   새 사물 그룹을 생성하고 디바이스를 추가하려면 다음을 수행합니다.

   1. AWS IoT 사물 그룹을 생성합니다. 새 사물 그룹의 이름으로 *MyGreengrassCoreGroup*을 바꿉니다. 사물 그룹 이름에 콜론(:)은 사용할 수 없습니다.
**참고**  
하나의 `parentTargetArn`으로 하위 배포의 사물 그룹을 사용하는 경우 다른 상위 플릿에서 재사용할 수 없습니다. 사물 그룹이 이미 다른 플릿에 대한 하위 배포 생성에 사용된 경우 API에서 오류가 반환됩니다.

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      요청에 성공하는 경우 응답은 다음 예제와 비슷하게 보입니다.

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. 프로비저닝된 Greengrass 코어를 사물 그룹에 추가합니다. 다음 명령을 이러한 파라미터와 함께 실행합니다.
      + 프로비저닝된 Greengrass 코어의 이름으로 *MyGreengrassCore*를 바꿉니다.
      + 사물 그룹의 이름으로 *MyGreengrassCoreGroup*를 바꿉니다.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      요청에 성공하는 경우 명령에 출력이 없습니다.

1. `deployment.json`이라는 파일을 만들고 다음 JSON을 파일로 복사합니다. 하위 배포 대상으로 지정할 AWS IoT 사물 그룹의 ARN으로 *targetArn*을 바꿉니다. 사물 그룹만 하위 배포 대상이 될 수 있습니다. 사물 그룹 ARN의 형식은 다음과 같습니다.
   + **사물 그룹** – `arn:aws:iot:region:account-id:thinggroup/thingGroupName`

   ```
   {
     "targetArn": "targetArn"
   }
   ```

1. 다음 명령을 다시 실행하여 원래 배포의 세부 정보를 가져옵니다. 이러한 세부 정보에는 메타데이터, 구성 요소 및 작업 구성이 포함됩니다. [Step 1](#create-subdeployments-step1)의 ID로 *deploymentId*를 바꿉니다. 이 배포 구성을 사용하여 하위 배포를 구성하고 필요에 따라 변경할 수 있습니다.

   ```
   aws greengrassv2 get-deployment --deployment-id deploymentId
   ```

   응답에는 배포의 세부 정보가 포함되어 있습니다. **get-deployment** 명령의 응답에서 다음 키-값 쌍을 임의로 `deployment.json`에 복사합니다. 하위 배포에 대한 이러한 값을 변경할 수 있습니다. 이 명령의 세부 정보에 대한 자세한 내용은 [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html)를 참조하세요.
   + `components` - 배포의 구성 요소입니다. 구성 요소를 제거하려면 이 개체에서 구성 요소를 제거하십시오.
   + `deploymentName` - 배포의 이름입니다.
   + `deploymentPolicies` - 배포의 정책입니다.
   + `iotJobConfiguration` - 배포의 작업 구성입니다.
   + `parentTargetArn` - 상위 배포의 대상입니다.
   + `tags` - 배포의 태그입니다.

1. 다음 명령을 실행하여 `deployment.json`에서 하위 배포를 생성합니다. 하위 배포의 이름으로 *subdeploymentName*을 바꿉니다.

   ```
   aws greengrassv2 create-deployment --deployment-name subdeploymentName --cli-input-json file://deployment.json
   ```

   이 하위 배포가 식별되는 `deploymentId`가 응답에 포함되어 있습니다. 배포 ID를 사용하여 배포 상태를 확인할 수 있습니다. 자세한 내용은 [배포 상태 확인](https://docs.aws.amazon.com/greengrass/v2/developerguide/check-deployment-status.html#check-cloud-deployment-status)을 참조하세요.

1. 하위 배포에 성공하면 해당 구성을 사용하여 상위 배포를 수정할 수 있습니다. 이전 단계에서 사용한 `deployment.json`을 복사합니다. 상위 배포의 ARN으로 JSON 파일의 `targetArn`을 바꾸고 다음 명령을 실행하여 이 새 구성으로 상위 배포를 생성합니다.
**참고**  
상위 플릿의 새 배포 수정을 생성하면 해당 상위 배포의 모든 배포 수정 및 하위 배포가 바뀝니다. 자세한 내용은 [배포 수정](https://docs.aws.amazon.com/greengrass/v2/developerguide/revise-deployments.html)을 참조하세요.

   ```
   aws greengrassv2 create-deployment --cli-input-json file://deployment.json
   ```

   <a name="check-new-deployment-status"></a>이 배포가 식별되는 `deploymentId`가 응답에 포함되어 있습니다. 배포 ID를 사용하여 배포 상태를 확인할 수 있습니다. 자세한 내용은 [배포 상태 확인](check-deployment-status.md#check-cloud-deployment-status) 섹션을 참조하세요.