

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

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

# AWS IoT Greengrass 코어에 AWS IoT Greengrass 그룹 배포
<a name="deployments"></a>

 AWS IoT Greengrass 그룹을 사용하여 엣지 환경에서 개체를 구성합니다. 그룹을 사용해 그룹의 엔터티가 서로 그리고 AWS 클라우드와 상호 작용할 수 있는 방법을 제어합니다. 예를 들어 로컬 실행에는 그룹의 Lambda 함수만 배포되며, 그룹에 있는 장치만 로컬 MQTT 서버를 사용하여 통신할 수 있습니다.

그룹에는 [코어](gg-core.md) 소프트웨어를 실행하는 AWS IoT 디바이스인 AWS IoT Greengrass 코어가 포함되어야 합니다. 코어는 엣지 게이트웨이 역할을 하며 엣지 환경에서 AWS IoT Core 기능을 제공합니다. 비즈니스 요구에 맞게 그룹에 다음 엔터티를 추가할 수도 있습니다.
+ **클라이언트 장치**. AWS IoT 레지스트리에서 사물로 표시됩니다. 이 장치는 [FreeRTOS](https://docs.aws.amazon.com/freertos/latest/userguide/freertos-lib-gg-connectivity.html)를 실행하거나 [AWS IoT 장치 SDK](what-is-gg.md#iot-device-sdk) 또는 [AWS IoT Greengrass Discovery API](gg-discover-api.md)를 사용하여 코어에 대한 연결 정보를 가져옵니다. 그룹 구성원인 클라이언트 장치만 코어에 연결할 수 있습니다.
+ **Lambda 함수**. 코어에서 코드를 실행하는 사용자 정의된 서버리스 애플리케이션입니다. Lambda 함수는 Greengrass 그룹에서 작성 AWS Lambda 및 참조됩니다. 자세한 내용은 [AWS IoT Greengrass 코어에서 Lambda 함수 실행](lambda-functions.md) 단원을 참조하십시오.
+ **커넥터**. 코어에서 코드를 실행하는 미리 정의된 서버리스 애플리케이션입니다. 커넥터는 로컬 인프라, 디바이스 프로토콜 AWS및 기타 클라우드 서비스와의 기본 통합을 제공할 수 있습니다. 자세한 내용은 [Greengrass 커넥터를 사용하여 서비스 및 프로토콜과 통합](connectors.md) 단원을 참조하십시오.
+ **구독**. MQTT 통신을 위해 인증을 받는 MQTT 주제(또는 제목), 게시자 및 구독자를 정의합니다.
+ **리소스**. 로컬 [장치 및 볼륨](access-local-resources.md), [기계 학습 모델](ml-inference.md) 및 [보안](secrets.md)에 대한 참조로 Greengrass Lambda 함수 및 커넥터에 의한 액세스 제어에 사용됩니다.
+ **로그**. AWS IoT Greengrass 시스템 구성 요소 및 Lambda 함수에 대한 구성 로깅. 자세한 내용은 [AWS IoT Greengrass 로그를 사용한 모니터링](greengrass-logs-overview.md) 단원을 참조하십시오.

에서 Greengrass 그룹을 관리한 AWS 클라우드 다음 코어에 배포합니다. 배포하면 코어 장치에서 `group.json` 파일로 그룹 구성이 복제됩니다. 이 파일은 `greengrass-root/ggc/deployments/group`에 위치합니다.

![\[코어 장치에 배포된 Greengrass 그룹의 클라우드 정의\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/group-deploy.png)


**참고**  
배포 중에는 코어 장치에서 Greengrass 대몬(daemon) 프로세스가 중지한 다음 다시 시작됩니다.

## AWS IoT 콘솔에서 그룹 배포
<a name="manage-deployments-console"></a>

 AWS IoT 콘솔의 그룹 구성 페이지에서 그룹을 배포하고 해당 배포를 관리할 수 있습니다.

**참고**  
콘솔에서 이 페이지를 열려면 **Greengrass 장치**를 선택한 다음 **그룹(V1)**을 선택하고 **Greengrass 그룹**에서 그룹을 선택합니다.

**현재 그룹 버전을 배포하려면**  
+ 그룹 구성 페이지에서 **배포**를 선택합니다.

**그룹의 배포 이력을 확인하려면**  
그룹의 배포 이력에는 각 배포 시도의 날짜 및 시간, 그룹 버전, 상태를 포함하여 그룹의 배포 기록이 포함됩니다.  

1. 그룹 구성 페이지에서 **배포** 탭을 선택합니다.

1. 오류 메시지를 포함하여 배포에 대한 자세한 내용을 보려면 AWS IoT 콘솔의 **Greengrass 디바이스**에서 **배포를** 선택합니다.

**그룹 배포를 재배포하려면**  
현재 배포가 실패할 경우 배포를 재배포하거나 다른 그룹 버전으로 되돌릴 수 있습니다.  

1.  AWS IoT 콘솔에서 **Greengrass 디바이스**를 선택한 다음 **그룹(V1)을** 선택합니다.

1. **배포** 탭을 선택합니다.

1. 재배포하려는 배포를 선택하고 **재배포**를 선택합니다.

**그룹 배포를 재설정하려면**  
그룹 배포를 재설정하여 그룹을 이동 또는 삭제하거나 배포 정보를 제거할 수 있습니다. 자세한 내용은 [배포 재설정](reset-deployments-scenario.md) 단원을 참조하십시오.  

1.  AWS IoT 콘솔에서 **Greengrass 디바이스**를 선택한 다음 **그룹(V1)을** 선택합니다.

1. **배포** 탭을 선택합니다.

1. 재설정할 배포를 선택하려면 **배포 재설정**을 선택합니다.

## AWS IoT Greengrass API를 사용하여 그룹 배포
<a name="manage-deployments-api"></a>

 AWS IoT Greengrass API는 AWS IoT Greengrass 그룹을 배포하고 그룹 배포를 관리하기 위해 다음 작업을 제공합니다. 이러한 작업은 AWS CLI AWS IoT Greengrass API 또는 AWS SDK에서 호출할 수 있습니다.


| 작업 | 설명 | 
| --- | --- | 
| [CreateDeployment](https://docs.aws.amazon.com/greengrass/v1/apireference/createdeployment-post.html) |  `NewDeployment` 또는 `Redeployment` 배포를 생성합니다. 현재 배포가 실패할 경우 배포를 재배포할 수 있습니다. 또는 재배포를 통해 다른 그룹 버전으로 되돌릴 수 있습니다. | 
| [GetDeploymentStatus](https://docs.aws.amazon.com/greengrass/v1/apireference/getdeploymentstatus-get.html) |  배포 상태를 `Building`, `InProgress`, `Success` 또는 `Failure`로 반환합니다. 배포 알림을 수신하도록 Amazon EventBridge 이벤트를 구성할 수 있습니다. 자세한 내용은 [배포 알림 받기](deployment-notifications.md) 단원을 참조하십시오. | 
| [ListDeployments](https://docs.aws.amazon.com/greengrass/v1/apireference/listdeployments-get.html) | 그룹의 배포 이력을 반환합니다. | 
| [ResetDeployments](https://docs.aws.amazon.com/greengrass/v1/apireference/resetdeployments-post.html) |  그룹에 대한 배포를 재설정합니다. 그룹 배포를 재설정하여 그룹을 이동 또는 삭제하거나 배포 정보를 제거할 수 있습니다. 자세한 내용은 [배포 재설정](reset-deployments-scenario.md) 단원을 참조하십시오. | 

**참고**  
대량 작업에 대한 자세한 내용은 [그룹의 대량 배포 생성](bulk-deploy-cli.md) 섹션을 참조하십시오.

### 그룹 ID 가져오기
<a name="api-get-group-id"></a>

그룹 ID는 일반적으로 API 작업에 사용됩니다. [ListGroups](https://docs.aws.amazon.com/greengrass/v1/apireference/listgroups-get.html) 작업을 사용하여 그룹 목록에서 대상 그룹의 ID를 찾을 수 있습니다. 예를 들어에서 `list-groups` 명령을 AWS CLI사용합니다.

```
aws greengrass list-groups
```

결과를 필터링하는 `query` 옵션을 포함할 수도 있습니다. 예시:
+ 가장 최근에 만든 그룹을 가져오려면 다음을 수행하십시오.

  ```
  aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
  ```
+ 이름으로 그룹을 가져오려면 다음을 수행하십시오.

  ```
  aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
  ```

  그룹 이름은 고유한 이름이 아니어도 되므로 여러 그룹을 반환할 수도 있습니다.

다음은 `list-groups` 응답의 예입니다. 각 그룹에 대한 정보에는 속성에 있는 그룹의 ID(`Id` 속성에 있음) 및 최신 그룹 버전의 ID(`LatestVersion` 속성에 있음)가 포함됩니다. 그룹의 다른 버전 ID를 가져오려면 [ListGroupVersions](https://docs.aws.amazon.com/greengrass/v1/apireference/listgroupversions-get.html)와 함께 그룹 ID를 사용합니다.

**참고**  
<a name="find-group-ids-console"></a> AWS IoT 콘솔에서 이러한 값을 찾을 수도 있습니다. 그룹 ID는 그룹의 **설정** 페이지에 표시됩니다. 그룹 버전 ID는 그룹의 **배포** 탭에 표시됩니다.

```
{
    "Groups": [
        {
            "LatestVersionArn": "arn:aws:us-west-2:123456789012:/greengrass/groups/00dedaaa-ac16-484d-ad77-c3eedEXAMPLE/versions/4cbc3f07-fc5e-48c4-a50e-7d356EXAMPLE",
            "Name": "MyFirstGroup",
            "LastUpdatedTimestamp": "2019-11-11T05:47:31.435Z",
            "LatestVersion": "4cbc3f07-fc5e-48c4-a50e-7d356EXAMPLE",
            "CreationTimestamp": "2019-11-11T05:47:31.435Z",
            "Id": "00dedaaa-ac16-484d-ad77-c3eedEXAMPLE",
            "Arn": "arn:aws:us-west-2:123456789012:/greengrass/groups/00dedaaa-ac16-484d-ad77-c3eedEXAMPLE"
        },
        {
            "LatestVersionArn": "arn:aws:us-west-2:123456789012:/greengrass/groups/036ceaf9-9319-4716-ba2a-237f9EXAMPLE/versions/8fe9e8ec-64d1-4647-b0b0-01dc8EXAMPLE",
            "Name": "GreenhouseSensors",
            "LastUpdatedTimestamp": "2020-01-07T19:58:36.774Z",
            "LatestVersion": "8fe9e8ec-64d1-4647-b0b0-01dc8EXAMPLE",
            "CreationTimestamp": "2020-01-07T19:58:36.774Z",
            "Id": "036ceaf9-9319-4716-ba2a-237f9EXAMPLE",
            "Arn": "arn:aws:us-west-2:123456789012:/greengrass/groups/036ceaf9-9319-4716-ba2a-237f9EXAMPLE"
        },
        ...
    ]
}
```

를 지정하지 않으면 AWS 리전 AWS CLI 명령은 프로파일의 기본 리전을 사용합니다. 다른 리전의 그룹을 반환하려면 *리전* 옵션을 포함합니다. 예시:

```
aws greengrass list-groups --region us-east-1
```

## AWS IoT Greengrass 그룹 객체 모델 개요
<a name="api-overview"></a>

 AWS IoT Greengrass API로 프로그래밍할 때는 Greengrass 그룹 객체 모델을 이해하는 것이 좋습니다.

### Groups
<a name="api-overview-groups"></a>

 AWS IoT Greengrass API에서 최상위 `Group` 객체는 메타데이터와 `GroupVersion` 객체 목록으로 구성됩니다. `GroupVersion` 객체는 ID`Group`별로와 연결됩니다.

![\[그룹 다이어그램(그룹 버전 목록과 메타데이터로 구성)\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/om-group.png)


### 그룹 버전
<a name="api-overview-versions"></a>

`GroupVersion` 객체는 그룹 구성원을 정의합니다. 각 `GroupVersion`은 `CoreDefinitionVersion`과, ARN을 기준으로 다른 구성 요소 버전을 참조합니다. 이러한 참조를 통해 그룹에 포함할 엔터티가 결정됩니다.

![\[ARN 기준 다른 버전 유형을 참조하는 그룹 버전 다이어그램\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/om-groupversion.png)


예를 들어 그룹에 Lambda 함수 3개, 장치 1개, 구독 2개를 포함하려면 `GroupVersion`은 다음을 참조합니다.
+ 필수 코어가 포함된 `CoreDefinitionVersion`입니다.
+ 3개의 함수가 포함된 `FunctionDefinitionVersion` 
+ 클라이언트 장치가 포함된 `DeviceDefinitionVersion`.
+ 2개의 구독이 포함된 `SubscriptionDefinitionVersion`

코어 장치에 배포된 `GroupVersion`은 로컬 환경에서 제공되는 개체와 해당 개체가 상호 작용하는 방식을 결정합니다.

### 그룹 구성 요소
<a name="api-overview-group-components"></a>

그룹에 추가한 구성 요소는 3개 레벨의 계층 구조로 되어 있습니다.
+ 주어진 유형의 *DefinitionVersion* 객체 목록을 참조하는 *정의*입니다. 예를 들어 `DeviceDefinition`은 `DeviceDefinitionVersion` 객체를 참조합니다.
+ 지정된 유형의 엔터티 집합이 포함된 *DefinitionVersion*. 예를 들어 `DeviceDefinitionVersion`에는 `Device` 객체 목록이 포함되어 있습니다.
+ 속성과 동작을 정의하는 개별 엔터티. 예를 들어는 AWS IoT 레지스트리에 있는 해당 클라이언트 디바이스의 ARN, 디바이스 인증서의 ARN, 로컬 섀도우가 클라우드와 자동으로 동기화되는지 여부를 `Device` 정의합니다.

  다음 유형의 엔터티를 그룹에 추가할 수 있습니다.
  + [지원](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-connector.html)
  + [Core](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-core.html)
  + [장치](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-device.html)
  + [함수](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-function.html)
  + [Logger](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-logger.html)
  + [리소스](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resource.html)
  + [Subscription](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-subscription.html)

다음 예제는 `DeviceDefinition` 각각 여러 `Device` 객체를 포함하고 있는 3개의 `DeviceDefinitionVersion` 객체를 참조합니다. 그룹에서는 한 번에 한 개의 `DeviceDefinitionVersion`만 사용됩니다.

![\[장치 계층 구조 다이어그램(DeviceDefinition, DeviceDefinitionVersion, Device 객체 포함)\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/om-devicedefinition.png)


### 그룹 업데이트
<a name="api-update-groups"></a>

 AWS IoT Greengrass API에서 버전을 사용하여 그룹의 구성을 업데이트합니다. 버전은 불변하므로 그룹 구성요소를 추가, 제거 또는 변경하려면 새롭거나 업데이트된 엔터티를 포함하는 *DefinitionVersion* 객체를 생성해야 합니다.

새 *DefinitionVersions* 객체는 신규이거나 기존에 있었던 *Definition* 객체와 연결할 수 있습니다. 예를 들어, `CreateFunctionDefinition` 작업을 사용하여 `FunctionDefinitionVersion`을 초기 버전으로 포함하는 `FunctionDefinition`을 만들거나, `CreateFunctionDefinitionVersion` 작업을 사용하여 기존 `FunctionDefinition`을 참조할 수 있습니다.

그룹 구성 요소를 만든 후 그룹에 포함하려는 모든 *DefinitionVersion* 객체를 포함하는 `GroupVersion`을 생성합니다. 그런 다음 `GroupVersion`을 배포합니다.

`GroupVersion`을 배포하려면 `Core`가 정확히 1개 포함된 `CoreDefinitionVersion`을 참조해야 합니다. 참조된 모든 엔터티는 그룹의 구성원이어야 합니다. 또한 [Greengrass 서비스 역할은](service-role.md)를 배포 AWS 리전 하는 AWS 계정 의와 연결되어야 합니다`GroupVersion`.

**참고**  
API에서 `Update` 작업은 `Group` 또는 구성 요소 *Definition* 객체의 이름을 변경하는 데 사용됩니다.

** AWS 리소스를 참조하는 엔터티 업데이트**

Greengrass Lambda 함수 및 [보안 리소스](secrets.md)는 Greengrass별 속성을 정의하고 해당 AWS 리소스도 참조합니다. 이러한 엔터티를 업데이트하려면 Greengrass 객체 대신 해당 AWS 리소스를 변경할 수 있습니다. 예를 들어 Lambda 함수는의 함수를 참조 AWS Lambda 하고 Greengrass 그룹과 관련된 수명 주기 및 기타 속성도 정의합니다.
+ Lambda 함수 코드나 패키징된 종속성을 업데이트하려면 AWS Lambda에서 변경하십시오. 다음 그룹 배포 중에 이러한 변경 사항이에서 검색 AWS Lambda 되어 로컬 환경에 복사됩니다.
+ [Greengrass별 속성](lambda-group-config.md)을 업데이트하려면 업데이트된 `Function` 속성이 포함된 `FunctionDefinitionVersion`을 생성합니다.

**참고**  
Greengrass Lambda 함수는 별칭 ARN 또는 버전 ARN을 기준으로 Lambda 함수를 참조할 수 있습니다. 별칭 ARN을 참조하면(권장 사항), AWS Lambda에서 새로운 함수 버전을 게시할 때 `FunctionDefinitionVersion`(또는 `SubscriptionDefinitionVersion`)을 업데이트하지 않아도 됩니다. 자세한 내용은 [별칭 또는 버전을 기준으로 Lambda 함수 참조](lambda-functions.md#lambda-versions-aliases) 단원을 참조하십시오.

## 다음 사항도 참조하세요.
<a name="deployments-see-also"></a>
+ [배포 알림 받기](deployment-notifications.md)
+ [배포 재설정](reset-deployments-scenario.md)
+ [그룹의 대량 배포 생성](bulk-deploy-cli.md)
+ [배포 문제 해결](gg-troubleshooting.md#gg-troubleshooting-deploymentissues)<a name="see-also-gg-api-cli"></a>
+ [AWS IoT Greengrass Version 1 API Reference](https://docs.aws.amazon.com/greengrass/v1/apireference/)
+ <a name="see-also-gg-cli"></a>[AWS IoT Greengrass 명령](https://docs.aws.amazon.com/cli/latest/reference/greengrass/index.html) *AWS CLI 참조의 명령*

# 배포 알림 받기
<a name="deployment-notifications"></a>

Amazon EventBridge 이벤트 규칙을 사용하여 Greengrass 그룹 배포의 상태 변경에 대한 알림을 받을 수 있습니다. EventBridge는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다.는 이러한 이벤트를 EventBridge에 *한 번 이상* AWS IoT Greengrass 전송합니다. 즉,는 전송을 보장하기 위해 지정된 이벤트의 사본을 여러 개 전송할 AWS IoT Greengrass 수 있습니다. 또한 이벤트 리스너는 이벤트가 발생한 순서대로 이벤트를 수신하지 못할 수 있습니다.

**참고**  
Amazon EventBridge는 애플리케이션을 [Greengrass 코어 장치](telemetry.md) 및 배포 알림과 같이 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 이벤트 버스 서비스입니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 섹션을 참조하세요.

AWS IoT Greengrass 는 그룹 배포 상태가 변경될 때 이벤트를 내보냅니다. 모든 상태 전환 또는 지정한 상태로의 전환에 대해 실행하는 EventBridge 규칙을 생성할 수 있습니다. 배포가 규칙을 트리거하는 상태로 전환되면 EventBridge는 규칙에 정의된 대상 작업을 간접 호출합니다. 이렇게 하면 알림을 전송하고, 이벤트 정보를 캡처하고, 적절한 조치를 취하거나, 상태 변경에 대응하는 기타 이벤트를 시작할 수 있습니다. 예를 들어 다음 사용 사례에 대한 규칙을 생성할 수 있습니다.
+ 자산 다운로드 및 담당자 알림 전송과 같은 배포 후 작업을 트리거합니다.
+ 배포 성공 또는 실패 시 알림 보내기
+ 배포 이벤트에 대한 사용자 지정 지표 게시

AWS IoT Greengrass 는 배포가 `Building`, `InProgress`, 및 상태가 `Success`되면 이벤트를 내보냅니다`Failure`.

**참고**  
[대량 배포](bulk-deploy-cli.md) 작업 상태를 모니터링하는 기능은 현재 지원되지 않습니다. 그러나는 대량 배포의 일부인 개별 그룹 배포에 대한 상태 변경 이벤트를 AWS IoT Greengrass 내보냅니다.

## 그룹 배포 상태 변경 이벤트
<a name="events-message-format"></a>

배포 상태 변경에 대한 [이벤트](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)에서 사용하는 형식은 다음과 같습니다.

```
{
    "version":"0",
    "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8",
    "detail-type":"Greengrass Deployment Status Change",
    "source":"aws.greengrass",
    "account":"123456789012",
    "time":"2018-03-22T00:38:11Z",
    "region":"us-west-2",
    "resources":[],
    "detail":{    
        "group-id": "284dcd4e-24bc-4c8c-a770-EXAMPLEf03b8",
        "deployment-id": "4f38f1a7-3dd0-42a1-af48-EXAMPLE09681",
        "deployment-type": "NewDeployment|Redeployment|ResetDeployment|ForceResetDeployment",
        "status": "Building|InProgress|Success|Failure"
    }
}
```

하나 이상의 그룹에 적용할 규칙을 생성할 수 있습니다. 다음 배포 유형과 배포 상태 중 하나로 규칙을 필터링할 수 있습니다.

**배포 유형**  
+ `NewDeployment`. 그룹 버전의 최초 배포.
+ `ReDeployment`. 그룹 버전의 재배포.
+ `ResetDeployment`. AWS 클라우드 및 AWS IoT Greengrass 코어에 저장된 배포 정보를 삭제합니다. 자세한 내용은 [배포 재설정](reset-deployments-scenario.md) 단원을 참조하십시오.
+ `ForceResetDeployment`. AWS 클라우드 에 저장된 배포 정보를 삭제하며, 코어 대응을 대기하지 않고 성공을 보고합니다. 코어가 연결되었거나 다음에 연결할 때 코어에 저장된 배포 정보도 삭제합니다.

**배포 상태**  
+ `Building`. AWS IoT Greengrass 는 그룹 구성을 검증하고 배포 아티팩트를 빌드합니다.
+ `InProgress`. AWS IoT Greengrass 코어에서 배포가 진행 중입니다.
+ `Success`. 배포가 성공했습니다.
+ `Failure`. 배포가 실패했습니다.

이벤트가 중복되거나 이벤트 순서가 잘못되었을 수 있습니다. 이벤트 순서를 정하려면 `time` 속성을 사용하세요.

**참고**  
AWS IoT Greengrass 는 `resources` 속성을 사용하지 않으므로 항상 비어 있습니다.

## EventBridge 규칙 생성을 위한 사전 조건
<a name="create-events-rule-prereqs"></a>

에 대한 EventBridge 규칙을 생성하기 전에 다음을 AWS IoT Greengrass수행합니다.
+ Eventbridge의 이벤트, 규칙, 대상을 숙지해야 합니다.
+ EventBridge 규칙에 의해 간접 호출되는 대상을 생성하고 구성해야 합니다. 규칙은 다음을 비롯한 다양한 유형의 대상을 간접 호출할 수 있습니다.
  + Amazon Simple Notification Service(Amazon SNS)
  + AWS Lambda 함수
  + Amazon Kinesis Video Streams
  + Amazon Simple Queue Service(Amazon SQS) 대기열

자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 및 [Amazon EventBridge 시작하기](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) 섹션을 참조하세요.

## 배포 알림 구성(콘솔)
<a name="create-events-rule-console"></a>

다음 단계를 사용하여 그룹의 배포 상태가 변경될 때 Amazon SNS 주제를 게시하는 EventBridge 규칙을 생성합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 주제 구독자가 이벤트에 대응할 수 있습니다. 자세한 내용은 Amazon [ EventBridge 사용 설명서의 AWS 리소스에서 이벤트를 트리거하는 EventBridge 규칙 생성을](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html) 참조하세요. * EventBridge *

1. [Amazon EventBridge 콘솔](https://console.aws.amazon.com/events/)을 엽니다.

1. 탐색 창에서 **규칙**을 선택합니다.

1. **규칙 생성**을 선택합니다.

1. 규칙에 대해 이름과 설명을 입력하세요.

   규칙은 동일한 리전과 동일한 이벤트 버스의 다른 규칙과 동일한 이름을 가질 수 없습니다.

1. **이벤트 버스**에서 이 규칙과 연결할 이벤트 버스를 선택합니다. 이 규칙이 자신의 계정에서 발생하는 이벤트와 일치하도록 하려면 **AWS 기본 이벤트 버스(default event bus)**를 선택합니다. 계정의 AWS 서비스가 이벤트를 내보내면 항상 계정의 기본 이벤트 버스로 이동합니다.

1. **규칙 유형(Rule type)**에서 **이벤트 패턴이 있는 규칙(Rule with an event pattern)**을 생성합니다.

1. **다음**을 선택합니다.

1. **이벤트 소스**에서 **AWS 서비스**를 선택합니다.

1. **이벤트 패턴**의 경우, **AWS 서비스**를 선택합니다.

1. **AWS 서비스 이름**에서 Greengrass를 선택합니다.

1. **이벤트 유형에**에서 **Greengrass 배포 상태 변경**을 선택합니다.
**참고**  
**AWS CloudTrail 이벤트 유형을 통한 API 호출**은 와의 AWS IoT Greengrass 통합을 기반으로 합니다 AWS CloudTrail. 이 옵션을 사용하여 AWS IoT Greengrass API에 대한 읽기 또는 쓰기 호출로 시작된 규칙을 생성할 수 있습니다. 자세한 내용은 [를 사용하여 AWS IoT Greengrass API 호출 로깅 AWS CloudTrail](logging-using-cloudtrail.md) 단원을 참조하십시오.

1. 알림을 트리거하는 배포 상태를 선택합니다.
   + 모든 상태 변경 이벤트에 대한 알림을 받으려면 **모든 상태**를 선택합니다.
   + 일부 상태 변경 이벤트에 대해서만 알림을 받으려면 **특정 상태**를 선택한 다음 대상 상태를 선택합니다.

1. 알림을 트리거하는 배포 유형을 선택합니다.
   + 모든 배포 유형에 대한 알림을 받으려면 **모든 상태**를 선택합니다.
   + 일부 배포 유형에 대해서만 알림을 받으려면 **특정 상태**를 선택한 다음 대상 배포 유형을 선택합니다.

1. **다음**을 선택합니다.

1. **대상 유형**에서 **AWS 서비스**를 선택합니다.

1. **대상 선택**에서 대상을 구성합니다. 이 예제에서는 Amazon SNS 주제를 사용하지만 알림을 보내도록 다른 대상 유형을 구성할 수 있습니다.

   1. **대상**에서 **SNS 주제**를 선택합니다.

   1. **주제**에서 대상 주제를 선택합니다.

   1. **다음**을 선택합니다.

1. **태그**에서 규칙에 대한 태그를 정의하거나 필드를 비워 둡니다.

1. **다음**을 선택합니다.

1. 규칙의 세부 정보를 검토하고 **규칙 생성**을 선택합니다.

## 배포 알림 구성(CLI)
<a name="create-events-rule-cli"></a>

다음 단계를 사용하여 그룹의 배포 상태가 변경될 때 Amazon SNS 주제를 게시하는 EventBridge 규칙을 생성합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 주제 구독자가 이벤트에 대응할 수 있습니다.

1. 규칙을 생성합니다.
   + *group-id*를 AWS IoT Greengrass 그룹 ID로 바꿉니다.

   ```
   aws events put-rule \
     --name TestRule \
     --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail\": {\"group-id\": [\"group-id\"]}}"
   ```

   패턴에서 생략된 속성은 무시됩니다.

1. 규칙 대상으로 주제를 추가합니다.
   + *topic-arn*을 Amazon SNS 주제의 ARN으로 바꿉니다.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**참고**  
Amazon EventBridge가 대상 주제를 호출하도록 허용하려면 주제에 리소스 기반 정책을 추가해야 합니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon SNS 권한](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) 섹션을 참조하세요.

자세한 내용은 *Amazon EventBridge 사용 설명서*에서 [EventBridge의 이벤트 및 이벤트 패턴](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) 섹션을 참조하세요.

## 배포 알림 구성(CloudFormation)
<a name="create-events-rule-cloudformation"></a>

 CloudFormation 템플릿을 사용하여 Greengrass 그룹 배포의 상태 변경에 대한 알림을 보내는 EventBridge 규칙을 생성합니다. 자세한 내용은 **AWS CloudFormation 사용 설명서의 [Amazon EventBridge 리소스 유형 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Events.html)를 참조하세요.

## 다음 사항도 참조하세요.
<a name="deployment-notifications-see-also"></a>
+ [AWS IoT Greengrass 코어에 AWS IoT Greengrass 그룹 배포](deployments.md)
+ *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 섹션을 참조하세요.

# 배포 재설정
<a name="reset-deployments-scenario"></a>

이 기능은 AWS IoT Greengrass 코어 v1.1 이상에서 사용할 수 있습니다.

다음 작업을 수행하여 그룹의 배포를 재설정할 수 있습니다.
+ 그룹의 코어를 다른 그룹으로 이동하려는 경우 또는 그룹의 코어가 다시 이미징된 경우 그룹을 삭제합니다. 그룹을 삭제하기 전에 다른 Greengrass 그룹과 함께 코어를 사용하도록 그룹 배포를 재설정해야 합니다.
+ 그룹의 코어를 다른 그룹으로 이동합니다.
+ 그룹의 상태를 배포 이전으로 되돌립니다.
+ 코어 장치에서 배포 구성을 제거합니다.
+ 코어 장치나 클라우드에서 중요한 데이터를 삭제합니다.
+ 현재 그룹에서 코어를 다른 코어로 바꾸지 않고 새 그룹 구성을 코어에 배치합니다.

**참고**  
배포 재설정 기능은 AWS IoT Greengrass 코어 소프트웨어 v1.0.0에서는 제공되지 않습니다. v1.0.0을 이용해 배포된 그룹은 삭제할 수 없습니다.

재설정 배포 작업은 먼저 클라우드에 저장되어 있는 해당 그룹의 배포 정보를 모두 정리합니다. 그런 다음, 배포 관련 정보(Lambda 함수, 사용자 로그, 섀도우 데이터베이스 및 서버 인증서를 포함하지만 사용자가 정의한 `config.json` 또는 Greengrass 코어 인증서는 제외)도 모두 정리하도록 그룹의 코어 장치에 지시합니다. 그룹에 현재 `In Progress` 또는 `Building` 상태의 배포가 있는 경우 그룹에 대한 배포 재설정을 시작할 수 없습니다.

## AWS IoT 콘솔에서 배포 재설정
<a name="reset-deployments-console"></a>

 AWS IoT 콘솔의 그룹 구성 페이지에서 그룹 배포를 재설정할 수 있습니다.

1. <a name="console-gg-groups"></a> AWS IoT 콘솔 탐색 창의 **관리**에서 **Greengrass 디바이스**를 확장한 다음 **그룹(V1)을** 선택합니다.

1. 대상 그룹을 선택합니다.

1. **배포** 탭에서 **배포 재설정**을 선택합니다.

1. **이 Greengrass Group의 배포 재설정** 대화 상자에 동의한다는 의미의 **confirm**을(를) 입력하고 **배포 재설정**을 선택합니다.

## AWS IoT Greengrass API를 사용하여 배포 재설정
<a name="reset-deployments-api"></a>

, AWS CLI AWS IoT Greengrass API 또는 AWS SDK에서 `ResetDeployments` 작업을 사용하여 배포를 재설정할 수 있습니다. 이 단원의 예제에서는 CLI를 사용합니다.

```
aws greengrass reset-deployments --group-id GroupId [--force]
````reset-deployments` CLI 명령의 인수:

`--group-id`  
그룹 ID입니다. `list-groups` 명령을 사용하여 이 값을 가져옵니다.

`--force`  
선택 사항. 그룹의 코어 장치가 분실, 도난 또는 파괴된 경우 이 파라미터를 사용합니다. 이 옵션을 사용하면 배포 재설정 프로세스가 코어 장치의 응답을 기다리지 않고 클라우드에서 모든 배포 정보가 정리되고 난 후 성공을 보고합니다. 그러나 코어 장치가 활성 상태이거나 활성화되면 해당 정리 작업도 수행합니다.

`reset-deployments` CLI 명령의 출력은 다음과 같습니다.

```
{
    "DeploymentId": "4db95ef8-9309-4774-95a4-eea580b6ceef",
    "DeploymentArn": "arn:aws:greengrass:us-west-2:106511594199:/greengrass/groups/b744ed45-a7df-4227-860a-8d4492caa412/deployments/4db95ef8-9309-4774-95a4-eea580b6ceef"
}
```

다음과 같이 `get-deployment-status` CLI 명령을 사용하면 배포 재설정 상태를 확인할 수 있습니다.

```
aws greengrass get-deployment-status --deployment-id DeploymentId --group-id GroupId
````get-deployment-status` CLI 명령의 인수:

`--deployment-id`  
배포 ID입니다.

`--group-id`  
그룹 ID입니다.

`get-deployment-status` CLI 명령의 출력은 다음과 같습니다.

```
{
    "DeploymentStatus": "Success",
    "UpdatedAt": "2017-04-04T00:00:00.000Z"
}
```

배포 재설정을 준비 중일 때 `DeploymentStatus`는 `Building`으로 설정됩니다. 재설정 배포가 준비되었지만 AWS IoT Greengrass 코어가 재설정 배포를 선택하지 않은 경우는 `DeploymentStatus`입니다`InProgress`.

작업이 실패하면 응답에 오류 정보가 반환됩니다.

## 다음 사항도 참조하세요.
<a name="reset-deployments-see-also"></a>
+ [AWS IoT Greengrass 코어에 AWS IoT Greengrass 그룹 배포](deployments.md)
+ *AWS IoT Greengrass Version 1 API 참조*의 [ResetDeployments](https://docs.aws.amazon.com/greengrass/v1/apireference/resetdeployments-post.html)
+ *AWS IoT Greengrass Version 1 API 참조*의 [GetDeploymentStatus](https://docs.aws.amazon.com/greengrass/v1/apireference/getdeploymentstatus-get.html)

# 그룹의 대량 배포 생성
<a name="bulk-deploy-cli"></a>

 간단한 API 호출을 사용하여 한 번에 많은 수의 Greengrass 그룹을 배포할 수 있습니다. 이러한 배포는 상한이 고정된 가변 레이트로 트리거됩니다.

 이 자습서에서는를 사용하여에서 대량 그룹 배포를 AWS CLI 생성하고 모니터링하는 방법을 설명합니다 AWS IoT Greengrass. 이 자습서에 나오는 대량 배포 예제에는 여러 그룹이 포함되어 있습니다. 구현 시 이러한 예제를 사용해 필요한 수 만큼 그룹을 추가할 수 있습니다.

 자습서에는 다음과 같은 상위 수준 단계가 포함됩니다.

1. [대량 배포 입력 파일 생성 및 업로드](#bulk-deploy-cli-create-input-file)

1. [벌크 배포를 위한 IAM 실행 역할 생성 및 구성](#bulk-deploy-cli-create-role)

1. [실행 역할이 S3 버킷에 액세스하도록 허용](#bulk-deploy-cli-modify-bucket)

1. [그룹 배포](#bulk-deploy-cli-start-bulk-deployments)

1. [배포 테스트](#bulk-deploy-cli-test)

## 사전 조건
<a name="bulk-deploy-cli-prerequisites"></a>

 이 자습서를 완료하려면 다음이 필요합니다.
+  배포 가능한 Greengrass 그룹 한 개 이상. AWS IoT Greengrass 그룹 및 코어 만들기에 대한 자세한 내용은 [시작하기 AWS IoT Greengrass](gg-gs.md) 단원을 참조하십시오.
+  시스템에 AWS CLI 설치 및 구성된 입니다. 자세한 내용은 [AWS CLI 사용 설명서](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)를 참조하십시오.
+  AWS 리전 와 동일한에서 생성된 S3 버킷입니다 AWS IoT Greengrass. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [첫 S3 버킷 생성 및 구성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-configure-bucket.html)을 참조하세요.
**참고**  
 현재 SSE KMS를 사용하는 버킷은 지원되지 않습니다.

## 1단계: 대량 배포 입력 파일 생성 및 업로드
<a name="bulk-deploy-cli-create-input-file"></a>

 이 단계에서는 배포 입력 파일을 생성하여 Amazon S3 버킷에 업로드합니다. 이 파일은 대량 배포의 각 그룹에 대한 정보가 포함된 직렬화된 줄로 구분된 JSON 파일입니다.는 대량 그룹 배포를 초기화할 때이 정보를 AWS IoT Greengrass 사용하여 사용자를 대신하여 각 그룹을 배포합니다.

1.  다음 명령을 실행하여 배포하려는 각 그룹의 `groupId`를 가져옵니다. AWS IoT Greengrass 에서 배포할 각 그룹을 식별할 수 있도록 대량 배포 입력 파일에 `groupId`를 입력합니다.
**참고**  
<a name="find-group-ids-console"></a> AWS IoT 콘솔에서 이러한 값을 찾을 수도 있습니다. 그룹 ID는 그룹의 **설정** 페이지에 표시됩니다. 그룹 버전 ID는 그룹의 **배포** 탭에 표시됩니다.

   ```
   aws greengrass list-groups
   ```

    응답에는 AWS IoT Greengrass 계정의 각 그룹에 대한 정보가 포함됩니다.

   ```
   {
     "Groups": [
       {
         "Name": "string",
         "Id": "string",
         "Arn": "string",
         "LastUpdatedTimestamp": "string",
         "CreationTimestamp": "string",
         "LatestVersion": "string",
         "LatestVersionArn": "string"
       }
     ],
     "NextToken": "string"
   }
   ```

    다음 명령을 실행하여 배포하려는 각 그룹의 `groupVersionId`를 가져옵니다.

   ```
   list-group-versions --group-id groupId
   ```

    응답에는 그룹 내 모든 버전에 대한 정보가 들어 있습니다. 사용할 그룹 버전의 `Version` 값을 적어 둡니다.

   ```
   {
     "Versions": [
       {
         "Arn": "string",
         "Id": "string",
         "Version": "string",
         "CreationTimestamp": "string"
       }
     ],
     "NextToken": "string"
   }
   ```

1.  다음 예제에서 선택한 컴퓨터 터미널 또는 편집기에서 *MyBulkDeploymentInputFile* 파일을 생성합니다. 이 파일에는 대량 배포에 포함할 각 AWS IoT Greengrass 그룹에 대한 정보가 포함되어 있습니다. 자습서에서 사용하기 위해 이 예제에서 여러 그룹을 정의하더라도 파일에 한 그룹만 포함할 수 있습니다.
**참고**  
 이 파일의 크기는 100MB 미만이어야 합니다.

   ```
   {"GroupId":"groupId1", "GroupVersionId":"groupVersionId1", "DeploymentType":"NewDeployment"}
   {"GroupId":"groupId2", "GroupVersionId":"groupVersionId2", "DeploymentType":"NewDeployment"}
   {"GroupId":"groupId3", "GroupVersionId":"groupVersionId3", "DeploymentType":"NewDeployment"}
   ...
   ```

    각 레코드(또는 행)에는 그룹 객체가 포함되어 있습니다. 각 그룹 객체에는 해당하는 `GroupId`, `GroupVersionId` 및 `DeploymentType`이 들어 있습니다. 현재는 `NewDeployment` 대량 배포 유형만 AWS IoT Greengrass 지원합니다.

    파일을 저장하고 닫습니다. 파일의 위치를 메모해 둡니다.

1.  터미널에서 다음 명령을 사용해 Amazon S3 버킷에 입력 파일을 업로드합니다. 파일의 위치 및 이름으로 파일 경로를 바꿉니다. 자세한 내용은 [버킷에 객체 추가](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html)를 참조하십시오.

   ```
   aws s3 cp path/MyBulkDeploymentInputFile s3://amzn-s3-demo-bucket/
   ```

## 2단계: IAM 실행 역할 생성 및 구성
<a name="bulk-deploy-cli-create-role"></a>

 이 단계에서는 IAM 콘솔을 사용하여 독립 실행형 실행 역할을 생성합니다. 그런 다음 역할과 간에 신뢰 관계를 설정하고 IAM 사용자에게 실행 역할에 대한 `PassRole` 권한이 있는지 AWS IoT Greengrass 확인합니다. 이렇게 하면 AWS IoT Greengrass 가 실행 역할을 수임하고 사용자를 대신하여 배포를 생성할 수 있습니다.

1.  다음 정책에 따라 실행 역할을 생성합니다. 이 정책 문서를 통해 AWS IoT Greengrass 에서는 사용자를 대신해 배포를 생성할 때마다 대량 배포 입력 파일에 액세스할 수 있습니다.

    IAM 역할 생성 및 권한 위임에 대한 자세한 내용은 [IAM 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)을 참조하십시오.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": "greengrass:CreateDeployment",
               "Resource": [
               "arn:aws:greengrass:us-east-1:123456789012:/greengrass/groups/groupId1",
       "arn:aws:greengrass:us-east-1:123456789012:/greengrass/groups/groupId2",
       "arn:aws:greengrass:us-east-1:123456789012:/greengrass/groups/groupId3"
               ]
           }
       ]
   }
   ```

------
**참고**  
 AWS IoT Greengrass에서 대량 배포 입력 파일의 각 그룹 또는 그룹 버전을 배포하려면 이 정책에는 리소스가 있어야 합니다. 모든 그룹에 대한 액세스를 허용하려면 다음과 같이 `Resource`에 별표를 지정합니다.  

   ```
   "Resource": ["*"]
   ```

1.  AWS IoT Greengrass를 포함하도록 실행 역할에 대한 신뢰 관계를 수정합니다. 그러면 AWS IoT Greengrass 에서는 사용자의 실행 역할과 해당 역할에 연결된 권한을 사용할 수 있습니다. 자세한 내용은 [기존 역할에서 신뢰 관계를 편집](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html)을 참조하십시오.

   혼동된 대리자 보안 문제를 방지하려면 신뢰 정책에 `aws:SourceArn` 및 `aws:SourceAccount` 글로벌 조건 컨텍스트 키도 포함하는 것이 좋습니다.** 조건 컨텍스트 키는 지정된 계정 및 Greengrass 작업 영역에서 들어오는 요청만 허용하도록 액세스를 제한합니다. 혼동된 대리자 문제에 대한 자세한 내용은, [교차 서비스 혼동된 대리인 방지](cross-service-confused-deputy-prevention.md)를 참조하세요.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "StringEquals": {
           "aws:SourceAccount": "123456789012"
           },
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:us-east-1:123456789012:*"
           }
         }
       }
     ]
   }
   ```

------

1.  IAM 사용자에게 실행 역할에 대한 IAM `PassRole` 권한을 부여합니다. 이 IAM 사용자는 대량 배포를 시작하기 위해 사용한 사용자입니다. `PassRole` 권한을 사용하면 IAM 사용자가 실행 권한을 AWS IoT Greengrass 에 사용할 수 있도록 전달할 수 있습니다. 자세한 내용은 [AWS 서비스에 역할을 전달할 수 있는 사용자 권한 부여를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).

    다음 예제를 사용하여 실행 역할에 연결된 IAM 정책을 업데이트합니다. 필요에 따라 이 예제를 수정하십시오.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt1508193814000",
               "Effect": "Allow",
               "Action": [
                   "iam:PassRole"
               ],
               "Resource": [
                   "arn:aws:iam::123456789012:user/executionRoleArn"
               ],
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": "greengrass.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

## 3단계: 실행 역할이 S3 버킷에 액세스하도록 허용
<a name="bulk-deploy-cli-modify-bucket"></a>

 대량 배포를 시작하려면 실행 역할이 Amazon S3 버킷에서 대량 배포 입력 파일을 읽을 수 있어야 합니다. `GetObject` 권한이 실행 역할에 액세스할 수 있도록 Amazon S3 버킷에 다음 정책 예제를 연결합니다.

 자세한 내용은 [S3 버킷 정책을 추가하려면 어떻게 해야 합니까?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)를 참조하십시오.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "examplePolicy",
    "Statement": [
        {
            "Sid": "Stmt1535408982966",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "executionRoleArn"
                ]
            },
            "Action": "s3:GetObject",
            "Resource":
            "arn:aws:s3:::amzn-s3-demo-bucket/objectKey"
        }
    ]
}
```

------

 터미널에서 다음 명령을 사용해 버킷의 정책을 확인할 수 있습니다.

```
aws s3api get-bucket-policy --bucket amzn-s3-demo-bucket
```

**참고**  
 Amazon S3 버킷의 `GetObject` 권한에 권한을 부여하도록 실행 역할을 직접 수정할 수 있습니다. 이렇게 하려면 실행 역할에 다음 정책 예제를 연결합니다.  

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/objectKey"
        }
    ]
}
```

## 4단계: 그룹 배포
<a name="bulk-deploy-cli-start-bulk-deployments"></a>

 이 단계에서는 대량 배포 입력 파일에 구성된 모든 그룹 버전에 대해 대량 배포 작업을 시작합니다. 각 그룹 버전에 대한 배포 작업의 유형은 `NewDeploymentType`입니다.

**참고**  
 동일한 계정의 또 다른 대량 배포 작업이 실행 중인 경우에는 **StartBulkDeployment**를 호출할 수 없습니다. 요청이 거부됩니다.

1.  다음 명령을 사용하여 대량 배포를 시작합니다.

    모든 **StartBulkDeployment** 요청에 `X-Amzn-Client-Token` 토큰을 포함하는 것이 좋습니다. 이러한 요청은 토큰 및 요청 파라미터에 관한 idempotent입니다. 이 토큰은 최대 64개의 ASCII 문자로 구성된 고유한 문자열일 수 있으며, 대소문자를 구분합니다.

   ```
   aws greengrass start-bulk-deployment --cli-input-json "{
             "InputFileUri":"URI of file in S3 bucket", 
             "ExecutionRoleArn":"ARN of execution role",
             "AmznClientToken":"your Amazon client token"
             }"
   ```

    이 명령은 다음 응답과 함께 성공한 상태 코드인 `200`을 반환해야 합니다.

   ```
   {
     "bulkDeploymentId": UUID
   }
   ```

    대량 배포 ID를 메모해 둡니다. 이 ID는 대량 배포의 상태를 확인하는 데 사용할 수 있습니다.
**참고**  
현재 대량 배포 작업은 지원되지 않지만 개별 그룹에 대한 배포 상태 변경에 대한 알림을 받을 수 있는 Amazon EventBridge 이벤트 규칙을 생성할 수 있습니다. 자세한 내용은 [배포 알림 받기](deployment-notifications.md) 단원을 참조하십시오.

1.  다음 명령을 사용하여 대량 배포 상태를 확인합니다.

   ```
   aws greengrass get-bulk-deployment-status --bulk-deployment-id 1234567
   ```

    이 명령은 정보의 JSON 페이로드 이외에 성공한 상태 코드인 `200`을 반환해야 합니다.

   ```
    {
     "BulkDeploymentStatus": Running,
     "Statistics": {
        "RecordsProcessed": integer,
        "InvalidInputRecords": integer,
        "RetryAttempts": integer
     },
     "CreatedAt": "string",
     "ErrorMessage": "string",
     "ErrorDetails": [
       {
         "DetailedErrorCode": "string",
         "DetailedErrorMessage": "string"
       }
     ]
   }
   ```

    `BulkDeploymentStatus`에는 대량 실행의 현재 상태가 포함되어 있습니다. 실행의 상태는 6개 중 하나일 수 있습니다.
   + `Initializing`. 대량 배포 요청이 수신되었고 실행이 시작 준비 중입니다.
   + `Running`. 대량 배포 실행이 시작되었습니다.
   + `Completed`. 대량 배포 실행이 모든 레코드 처리를 마쳤습니다.
   + `Stopping`. 대량 배포 실행이 중지 명령을 수신했고 곧 종료됩니다. 이전 배포의 상태가 `Stopping`이면 새 대량 배포를 시작할 수 없습니다.
   + `Stopped`. 대량 배포 실행이 수동으로 중지되었습니다.
   + `Failed`. 대량 배포 실행에서 오류가 발생해 종료되었습니다. 오류에 대한 자세한 내용은 `ErrorDetails` 필드를 참조하십시오.

    또한 JSON 페이로드에는 대량 배포 진행에 대한 통계 정보가 들어 있습니다. 이 정보를 사용해 처리된 그룹 수와 실패한 그룹 수를 확인할 수 있습니다. 통계 정보는 다음과 같습니다.
   +  `RecordsProcessed`: 시도한 그룹 레코드 수 
   +  `InvalidInputRecords`: 재시도할 수 없는 오류를 반환한 총 레코드 수. 예를 들어, 입력 파일의 그룹 레코드가 잘못된 형식을 사용하거나 존재하지 않는 버전을 지정한 경우 또는 실행이 그룹 또는 그룹 버전을 배포할 권한을 부여하지 않은 경우 이러한 정보가 생성될 수 있습니다.
   +  `RetryAttempts`: 재시도할 수 있는 오류를 반환한 배포 시도 횟수. 예를 들어, 그룹 배포 시도가 조절 오류를 반환한 경우 재시도가 트리거됩니다. 그룹 배포는 최대 5회까지 재시도할 수 있습니다.

    또한 대량 배포 실행에 실패한 경우 이 페이로드에는 문제 해결에 사용할 수 있는 `ErrorDetails` 섹션이 포함됩니다. 이 섹션에는 실행 실패의 원인에 대한 정보가 들어 있습니다.

    대량 배포 상태를 정기적으로 확인해 예상한 대로 진행 중인지 확인할 수 있습니다. 배포가 완료되면 `RecordsProcessed`가 대량 배포 입력 파일의 배포 그룹 수와 동일해야 합니다. 이는 각 레코드가 처리되었음을 나타냅니다.

## 5단계: 배포 테스트
<a name="bulk-deploy-cli-test"></a>

 **ListBulkDeployments** 명령을 사용하여 대량 배포의 ID를 찾습니다.

```
aws greengrass list-bulk-deployments
```

 이 명령을 `BulkDeploymentId`를 포함해 최근 대량 배포까지 모든 대량 배포 목록을 반환합니다.

```
{
  "BulkDeployments": [
    {
      "BulkDeploymentId": 1234567,
      "BulkDeploymentArn": "string",
      "CreatedAt": "string"
    }
  ],
  "NextToken": "string"
}
```

 이제, **ListBulkDeploymentDetailedReports** 명령을 호출해 각 배포에 대한 자세한 정보를 수집합니다.

```
aws greengrass list-bulk-deployment-detailed-reports --bulk-deployment-id 1234567 
```

 이 명령은 정보의 JSON 페이로드와 함께 성공한 상태 코드인 `200`을 반환해야 합니다.

```
{ 
  "BulkDeploymentResults": [
    {
      "DeploymentId": "string",
      "GroupVersionedArn": "string",
      "CreatedAt": "string",
      "DeploymentStatus": "string",
      "ErrorMessage": "string",
      "ErrorDetails": [
        {
          "DetailedErrorCode": "string",
          "DetailedErrorMessage": "string"
        }
      ]
    }
  ],
  "NextToken": "string"
}
```

 일반적으로, 이 페이로드에는 최근까지 각 배포와 그 배포 상태로 구성된, 페이지가 매겨진 목록이 포함되어 있습니다. 또한 대량 배포 실행에 실패하면 추가 정보가 포함됩니다. 다시, 목록의 총 배포 수와 대량 배포 입력 파일에서 식별한 그룹 수가 동일해야 합니다.

 배포가 종료 상태(성공 또는 실패)가 될 때까지 반환되는 정보가 바뀔 수 있습니다. 그때까지 이 명령을 정기적으로 호출할 수 있습니다.

## 대량 배포 문제 해결
<a name="bulk-deploy-cli-troubleshooting"></a>

 대량 배포가 성공적이지 않은 경우 다음 문제 해결 단계를 시도할 수 있습니다. 터미널에서 이 명령을 실행합니다.

### 입력 파일 오류 문제 해결
<a name="bulk-deploy-cli-troubleshooting-input-file-errors"></a>

 대량 배포 입력 파일에 구문 오류가 있는 경우 대량 배포에 실패할 수 있습니다. 그러면 대량 배포 상태로 `Failed`가 반환되고 첫 번째 확인 오류의 행 번호를 나타내는 오류 메시지가 함께 표시됩니다. 다음과 같은 4가지 오류가 발생할 수 있습니다.
+ 

  ```
  InvalidInputFile: Missing GroupId at line number: line number
  ```

   이 오류는 주어진 입력 파일 행이 지정된 파라미터를 등록할 수 없음을 나타냅니다. 누락될 수 있는 파라미터는 `GroupId` 및 `GroupVersionId`입니다.
+ 

  ```
  InvalidInputFile: Invalid deployment type at line number : line number. Only valid type is 'NewDeployment'.
  ```

   이 오류는 주어진 입력 파일 줄에 잘못된 배포 유형이 나열되었음을 나타냅니다. 현재, 지원되는 유일한 배포 유형은 `NewDeployment`입니다.
+ 

  ```
  Line %s is too long in S3 File. Valid line is less than 256 chars.
  ```

   이 오류는 주어진 입력 파일 행이 너무 길어 줄여야 함을 나타냅니다.
+ 

  ```
  Failed to parse input file at line number: line number
  ```

   이 오류는 주어진 입력 파일 행이 올바른 json으로 간주되지 않음을 나타냅니다.

### 동시 대량 배포 확인
<a name="bulk-deploy-cli-troubleshooting-concurrent-bulk-deployments"></a>

 다른 배포가 실행 중이거나 종료 상태가 아닌 경우에는 새 대량 배포를 시작할 수 없습니다. 그러면 `Concurrent Deployment Error`가 발생할 수 있습니다. **ListBulkDeployments** 명령을 사용해 대량 배포가 현재 실행 중이 아닌지 확인할 수 있습니다. 이 명령은 최근까지 대량 배포를 나열합니다.

```
{
  "BulkDeployments": [
    {
      "BulkDeploymentId": BulkDeploymentId,
      "BulkDeploymentArn": "string",
      "CreatedAt": "string"
    }
  ],
  "NextToken": "string"
}
```

 맨 처음 나열된 대량 배포의 `BulkDeploymentId`를 사용하여 **GetBulkDeploymentStatus** 명령을 실행합니다. 최근 대량 배포의 상태가 실행 중이면(`Initializing` 또는 `Running`) 다음 명령을 사용하여 대량 배포를 중지합니다.

```
aws greengrass stop-bulk-deployment --bulk-deployment-id BulkDeploymentId
```

 이 작업은 배포 상태가 `Stopped`가 될 때까지 `Stopping` 상태로 유지됩니다. 배포가 `Stopped` 상태가 되면 새 대량 배포를 시작할 수 있습니다.

### 오류 세부 정보 확인
<a name="bulk-deploy-cli-troubleshooting-check-error-details"></a>

 `GetBulkDeploymentStatus` 명령을 실행하여 대량 배포 실행 실패에 대한 정보가 포함된 JSON 페이로드를 반환합니다.

```
  "Message": "string",
  "ErrorDetails": [
    {
      "DetailedErrorCode": "string",
      "DetailedErrorMessage": "string"
    }
  ]
```

 오류가 있는 경우 이 호출로 반환된 `ErrorDetails` JSON 페이로드에는 대량 배포 실행 실패에 대한 추가 정보가 포함됩니다. 예를 들어, `400` 시리즈의 오류 상태 코드는 입력 파라미터 또는 호출자 종속성에 대한 입력 오류를 나타냅니다.

### AWS IoT Greengrass 코어 로그 확인
<a name="bulk-deploy-cli-troubleshooting-check-core-log"></a>

 AWS IoT Greengrass 코어 로그를 확인하여 문제를 해결할 수 있습니다. `runtime.log`를 보려면 다음 명령을 사용하십시오.

```
cd /greengrass/ggc/var/log
sudo cat system/runtime.log | more
```

 AWS IoT Greengrass 로깅에 대한 자세한 내용은 섹션을 참조하세요[AWS IoT Greengrass 로그를 사용한 모니터링](greengrass-logs-overview.md).

## 다음 사항도 참조하세요.
<a name="bulk-deploy-cli-see-also"></a>

자세한 정보는 다음 자료를 참조하세요.
+ [AWS IoT Greengrass 코어에 AWS IoT Greengrass 그룹 배포](deployments.md)
+ *AWS CLI 명령 참조*에서 [Amazon S3 API 명령](https://docs.aws.amazon.com/cli/latest/reference/s3api)
+ <a name="see-also-gg-cli"></a>[AWS IoT Greengrass 명령](https://docs.aws.amazon.com/cli/latest/reference/greengrass/index.html) *AWS CLI 참조의 명령*