

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

# 배포 만들기
<a name="create-deployments"></a>

사물 또는 사물 그룹이 대상인 배포를 생성할 수 있습니다.

배포를 생성할 때 배포할 소프트웨어 구성 요소와 배포 작업이 대상 디바이스로 롤아웃되는 방식을 구성합니다. AWS CLI에 제공하는 JSON 파일에서 배포를 정의할 수 있습니다.

배포 대상에 따라 구성 요소를 실행할 디바이스가 결정됩니다. 하나의 코어 디바이스에 배포하려면 사물을 지정합니다. 여러 코어 디바이스에 배포하려면 해당 디바이스가 포함된 사물 그룹을 지정합니다. 사물 그룹을 구성하는 방법에 대한 자세한 내용은 *AWS IoT 개발자 안내서*의 [정적 사물 그룹](https://docs.aws.amazon.com/iot/latest/developerguide/thing-groups.html)과 [동적 사물 그룹](https://docs.aws.amazon.com/iot/latest/developerguide/dynamic-thing-groups.html)을 참조하세요.

이 단원의 단계에 따라 대상에 대한 배포를 생성합니다. 배포가 있는 대상에서 소프트웨어 구성 요소를 업데이트하는 방법에 대한 자세한 내용은 [배포 수정](revise-deployments.md) 단원을 참조하세요.

**주의**  
[CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) 작업에서는 구성 요소가 코어 디바이스에서 제거될 수 있습니다. 새 배포가 아닌 이전 배포에 구성 요소가 있으면 코어 디바이스에서는 해당 구성 요소가 제거됩니다. 구성 요소 제거를 방지하려면 먼저 [ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html) 작업을 사용하여 배포 대상에 기존 배포가 이미 있는지 확인합니다. 그런 다음에 [GetDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetDeployment.html) 작업을 사용하여 새 배포를 생성할 때 기존 배포에서 시작합니다.

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

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

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

1. 배포 대상에 수정하려는 기존 배포가 있는지 확인하십시오. 다음을 수행합니다.

   1. <a name="revise-deployment-list-deployments-intro"></a>다음 명령을 실행하여 배포 대상의 배포를 나열합니다. 대상 AWS IoT 사물 또는 사물 그룹의 ARN으로 {{targetArn}}을 바꿉니다.

      ```
      aws greengrassv2 list-deployments --target-arn {{targetArn}}
      ```

      응답에는 대상에 대한 최신 배포 목록이 포함되어 있습니다. 응답이 비어 있는 경우 대상에 기존 배포가 없는 것이므로, [Step 3](#create-deployment-define-name-step)로 건너뛸 수 있습니다. 그렇지 않으면 다음 단계에서 사용할 수 있도록 응답에서 `deploymentId`을 복사합니다.
**참고**  <a name="revise-deployment-list-deployments-revision-note"></a>
대상에 대한 최신 버전이 아닌 다른 배포를 수정할 수도 있습니다. 대상에 대한 모든 배포를 나열할 `--history-filter ALL` 인수를 지정합니다. 그런 다음 수정하려는 배포의 ID를 복사합니다.

   1. <a name="revise-deployment-get-deployment"></a>다음 명령을 실행하여 배포의 세부 정보를 가져옵니다. 이러한 세부 정보에는 메타데이터, 구성 요소 및 작업 구성이 포함됩니다. 이전 단계의 ID로 {{deploymentId}}를 바꿉니다.

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

      응답에는 배포의 세부 정보가 포함되어 있습니다.

   1. 이전 명령의 응답에서 다음 키-값 쌍을 임의로 `deployment.json`에 복사합니다. 새 배포에서 이러한 값을 변경할 수 있습니다.
      + `deploymentName` - 배포의 이름입니다.
      + `components` - 배포의 구성 요소입니다. 구성 요소를 제거하려면 이 개체에서 구성 요소를 제거하십시오.
      + `deploymentPolicies` - 배포의 정책입니다.
      + `iotJobConfiguration` - 배포의 작업 구성입니다.
      + `tags` - 배포의 태그입니다.

1. <a name="create-deployment-define-name-step"></a>(선택 사항) 배포의 이름을 정의합니다. 배포의 이름으로 {{deploymentName}}을 바꿉니다.

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}"
   }
   ```

1. 각 구성 요소를 추가하여 대상 디바이스를 배포합니다. 이렇게 하려면 키는 구성 요소 이름이고 값은 해당 구성 요소에 대한 세부 정보가 있는 객체인 키-값 페어를 `components` 객체에 추가합니다. 추가하는 구성 요소마다 다음 세부 정보를 지정합니다.
   + `version` - 배포할 구성 요소 버전입니다.
   + `configurationUpdate` - 배포할 [구성 업데이트](update-component-configurations.md)입니다. 업데이트는 각 대상 디바이스에 있는 구성 요소의 기존 구성 또는 대상 디바이스에 기존 구성이 없는 경우 구성 요소의 기본 구성이 수정되는 패치 작업입니다. 다음 구성 업데이트를 지정할 수 있습니다.
     + 업데이트 재설정(`reset`) - (선택 사항) 대상 디바이스에서 기본값으로 재설정될 구성 값이 정의되는 JSON 포인터 목록입니다. AWS IoT Greengrass 코어 소프트웨어는 병합 업데이트를 적용하기 전에 재설정 업데이트를 적용합니다. 자세한 내용은 [재설정 업데이트](update-component-configurations.md#reset-configuration-update) 섹션을 참조하세요.
     + 병합 업데이트(`merge`) – (선택 사항) 대상 디바이스에 병합될 구성 값이 정의되는 JSON 문서입니다. JSON 문서를 문자열로 직렬화해야 합니다. 자세한 내용은 [병합 업데이트](update-component-configurations.md#merge-configuration-update) 섹션을 참조하세요.
   + <a name="component-run-with-config"></a>`runWith` – (선택 사항) 코어 디바이스에서 이 구성 요소의 프로세스가 실행되도록 AWS IoT Greengrass 코어 소프트웨어에서 사용되는 시스템 프로세스 옵션입니다. `runWith` 객체에서 이 파라미터를 생략하면 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)에서 구성하는 기본값이 AWS IoT Greengrass 코어 소프트웨어에서 사용됩니다.

     다음 옵션을 임의로 지정할 수 있습니다.
     + `posixUser` - Linux 코어 디바이스에서 이 구성 요소 실행에 사용되는 POSIX 시스템 사용자와 그룹(선택 사항)입니다. 사용자와 그룹(지정된 경우)이 각 Linux 코어 디바이스에 있어야 합니다. `user:group` 형식으로 사용자와 그룹을 콜론(`:`)으로 구분하여 지정합니다. 그룹은 선택 사항입니다. 그룹을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어에서는 사용자의 기본 그룹을 사용합니다. 자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 섹션을 참조하세요.
     + `windowsUser` – Windows 코어 디바이스에서 이 구성 요소 실행에 사용할 Windows 사용자입니다. 사용자가 각 Windows 코어 디바이스에 있어야 하며, 해당 이름과 암호가 LocalSystem 계정의 Credentials Manager 인스턴스에 저장되어야 합니다. 자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 섹션을 참조하세요.

       이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.5.0 이상에서 사용할 수 있습니다.
     + `systemResourceLimits` - 이 구성 요소의 프로세스에 적용되는 시스템 리소스 제한입니다. 기본적으로 일반 및 컨테이너화되지 않은 Lambda 구성 요소에 시스템 리소스 제한을 적용할 수 있습니다. 자세한 내용은 [구성 요소에 대한 시스템 리소스 제한 구성](configure-greengrass-core-v2.md#configure-component-system-resource-limits) 섹션을 참조하세요.

       다음 옵션을 임의로 지정할 수 있습니다.
       + `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 단위)입니다.

       이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.4.0 이상에서 사용할 수 있습니다. AWS IoT Greengrass는 현재 Windows 코어 디바이스에서 이 기능을 지원하지 않습니다.

      
**Example 기본 구성 업데이트 예제**  

   다음 예제 `components` 객체에서는 `pythonVersion`이라는 구성 파라미터가 예상되는 구성 요소 `com.example.PythonRuntime` 배포가 지정됩니다.

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.PythonRuntime": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"pythonVersion\":\"3.7\"}"
         }
       }
     }
   }
   ```  
**Example 재설정 및 병합 업데이트로 구성 업데이트 예제**  

   기본 구성이 다음 산업 대시보드 구성 요소 예제(`com.example.IndustrialDashboard`)를 고찰합니다.

   ```
   {
     "name": null,
     "mode": "REQUEST",
     "network": {
       "useHttps": true,
       "port": {
         "http": 80,
         "https": 443
       },
     },
     "tags": []
   }
   ```

   다음 구성 업데이트에서는 다음 지침이 지정됩니다.

   1. HTTPS 설정을 기본값(`true`)으로 재설정합니다.

   1. 산업 태그의 목록을 빈 목록으로 재설정합니다.

   1. 보일러 2대의 온도 및 압력 데이터 스트림이 식별되는 산업 태그 목록을 병합합니다.

   ```
   {
     "reset": [
       "/network/useHttps",
       "/tags"
     ],
     "merge": {
       "tags": [
         "/boiler/1/temperature",
         "/boiler/1/pressure",
         "/boiler/2/temperature",
         "/boiler/2/pressure"
       ]
     }
   }
   ```

   다음 `components` 객체 예제에서는 이 산업 대시보드 구성 요소 및 구성 업데이트 배포가 지정됩니다.

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     }
   }
   ```

1. (선택 사항) 배포에 대한 배포 정책을 정의합니다. 코어 디바이스에서 배포가 안전하게 적용될 수 있는 시점 또는 코어 디바이스에서 배포를 적용되지 못한 경우 수행할 작업을 구성할 수 있습니다. 이렇게 하려면 `deployment.json`에 `deploymentPolicies` 객체를 추가한 다음에 다음 중 하나를 수행합니다.

   1. (선택 사항) 구성 요소 업데이트 정책(`componentUpdatePolicy`)을 지정합니다. 이 정책을 통해 구성 요소 업데이트가 준비될 때까지 업데이트 연기가 배포에서 허용되는지 여부가 정의됩니다. 예를 들어 구성 요소에서 업데이트 적용이 다시 시작될 수 있으려면 리소스가 정리되거나 중요한 작업이 마무리되어야 할 수 있습니다. 이 정책을 통해 구성 요소에서 업데이트 알림에 응답해야 하는 시간도 정의됩니다.

      이 정책은 다음 파라미터가 있는 객체입니다.
      + `action` – (선택 사항) 구성 요소에 알리고 업데이트 준비 완료 시 보고될 때까지 기다릴지 여부입니다. 다음 옵션 중 하나를 선택합니다.
        + `NOTIFY_COMPONENTS` - 배포는 해당 구성 요소를 중지하고 업데이트하기 전에 각 구성 요소에 알립니다. 구성 요소에서는 이러한 알림 수신에 [SubscribeToComponentUpdates](ipc-component-lifecycle.md#ipc-operation-subscribetocomponentupdates) IPC 작업이 사용될 수 있습니다.
        + `SKIP_NOTIFY_COMPONENTS` - 배포는 구성 요소에 알리거나 업데이트해도 안전할 때까지 기다리지 않습니다.

        기본값은 `NOTIFY_COMPONENTS`입니다.
      + `timeoutInSeconds` 각 구성 요소에서 [DeferComponentUpdate](ipc-component-lifecycle.md#ipc-operation-defercomponentupdate) IPC 작업으로 업데이트 알림에 응답해야 하는 시간(초)입니다. 이 시간 내에 구성 요소에서 응답하지 않으면 코어 디바이스에서 배포가 진행됩니다.

        기본값은 60초입니다.

   1. (선택 사항) 구성 검증 정책(`configurationValidationPolicy`)을 지정합니다. 이 정책을 통해 배포에서 구성 업데이트를 검증하는 데 걸리는 각 구성 요소의 시간이 정의됩니다. 구성 요소에서는 [SubscribeToValidateConfigurationUpdates](ipc-component-configuration.md#ipc-operation-subscribetovalidateconfigurationupdates) IPC 작업을 사용하여 자체 구성 업데이트에 대한 알림을 구독할 수 있습니다. 그런 다음에 구성 요소에서는 [SendConfigurationValidityReport](ipc-component-configuration.md#ipc-operation-sendconfigurationvalidityreport) IPC 작업을 사용하여 구성 업데이트가 유효한지 AWS IoT Greengrass 코어 소프트웨어에 알릴 수 있습니다. 구성 업데이트가 유효하지 않으면 배포에 실패합니다.

      이 정책은 다음 파라미터가 있는 객체입니다.
      + `timeoutInSeconds` (선택 사항) 구성 요소에서 구성 업데이트가 검증되어야 하는 시간(초)입니다. 이 시간 내에 구성 요소에서 응답하지 않으면 코어 디바이스에서 배포가 진행됩니다.

        기본값은 30초입니다.

   1. (선택 사항) 장애 처리 정책(`failureHandlingPolicy`)을 지정합니다. 이 정책은 배포에 실패할 경우 디바이스 롤백 여부가 정의되는 문자열입니다. 다음 옵션 중 하나를 선택합니다.
      + `ROLLBACK` - 코어 디바이스에서 배포에 실패하면 AWS IoT Greengrass 코어 소프트웨어에서는 해당 코어 디바이스가 이전 구성으로 롤백됩니다.
      + `DO_NOTHING` - 코어 디바이스에서 배포에 실패하면 AWS IoT Greengrass 코어 소프트웨어에서는 새 구성이 유지됩니다. 따라서 새 구성이 유효하지 않으면 구성 요소가 손상될 수 있습니다.

      기본값은 `ROLLBACK`입니다.

   `deployment.json`의 배포는 다음 예제와 비슷하게 보일 수 있습니다.

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     }
   }
   ```

1. (선택 사항) 배포의 중지, 롤아웃 또는 제한 시간을 정의합니다. AWS IoT Greengrass에서는 코어 디바이스로 배포를 보내는 데 AWS IoT Core 작업이 사용되므로 이러한 옵션은 AWS IoT Core 작업의 구성 옵션과 동일합니다. 자세한 내용은 *AWS IoT 개발자 안내서*의 [작업 롤아웃 및 중단 구성](https://docs.aws.amazon.com/iot/latest/developerguide/job-rollout-abort.html)을 참조하세요.

   작업 옵션을 정의하려면 `deployment.json`에 `iotJobConfiguration` 객체를 추가합니다. 그런 다음에 구성할 옵션을 정의합니다.

   `deployment.json`의 배포는 다음 예제와 비슷하게 보일 수 있습니다.

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "{{deploymentName}}",
     "components": {
       "com.example.IndustrialDashboard": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "reset": [
             "/network/useHttps",
             "/tags"
           ],
           "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}"
         }
       }
     },
     "deploymentPolicies": {
       "componentUpdatePolicy": {
         "action": "NOTIFY_COMPONENTS",
         "timeoutInSeconds": 30
       },
       "configurationValidationPolicy": {
         "timeoutInSeconds": 60
       },
       "failureHandlingPolicy": "ROLLBACK"
     },
     "iotJobConfiguration": {
       "abortConfig": {
         "criteriaList": [
           {
             "action": "CANCEL",
             "failureType": "ALL",
             "minNumberOfExecutedThings": 100,
             "thresholdPercentage": 5
           }
         ]
       },
       "jobExecutionsRolloutConfig": {
         "exponentialRate": {
           "baseRatePerMinute": 5,
           "incrementFactor": 2,
           "rateIncreaseCriteria": {
             "numberOfNotifiedThings": 10,
             "numberOfSucceededThings": 5
           }
         },
         "maximumPerMinute": 50
       },
       "timeoutConfig":  {
         "inProgressTimeoutInMinutes": 5
       }
     }
   }
   ```

1. (선택 사항) 배포에 대한 태그(`tags`)를 추가합니다. 자세한 내용은 [AWS IoT Greengrass Version 2 리소스에 태그 지정](tag-resources.md) 섹션을 참조하세요.

1. 다음 명령을 실행하여 `deployment.json`에서 배포를 생성합니다.

   ```
   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) 섹션을 참조하세요.