

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

# Greengrass 코어 디바이스를 다른 AWS 계정 또는 리전으로 전환
<a name="switch-core-device-connectivity"></a>

nucleus 구성 업데이트를 배포하여 코어 디바이스의 IoT 연결을 한 AWS 계정 또는 리전에서 다른 리전으로 전환할 수 있습니다. 이는 다음 시나리오에서 유용합니다.
+ **제조에서 프로덕션으로 전환** - 제조 중에 스테이징 계정에 디바이스를 프로비저닝하고 필드 설치 중에 대상 계정으로 디바이스를 이동합니다.
+ **지리적 재배치** - 한 리전에서 다른 리전으로 이동하는 디바이스는 지연 시간을 줄이려면 로컬 리전의 AWS IoT 엔드포인트에 연결해야 합니다.
+ **장애 영향 감소** - 처음에 디바이스를 여러 계정에 걸쳐 단일 계정에 다시 배포하여 서비스 할당량 제한 또는 보안 인시던트와 같은 계정 수준 문제의 영향을 제한합니다.

IoT 연결 스위치를 배포하면 nucleus는 변경 사항을 적용하기 전에 새 엔드포인트에 대한 연결을 검증하고 연결에 실패하면 자동으로 롤백합니다.

이 기능을 사용하려면 Greengrass nucleus v2.18.0 이상 또는 Greengrass nucleus lite v2.6.0 이상이 필요합니다.

**Topics**
+ [사전 조건](#switch-connectivity-prerequisites)
+ [배포 생성](#switch-connectivity-create-deployment)
+ [예상되는 사항](#switch-connectivity-what-to-expect)
+ [스위치 확인](#switch-connectivity-verify)

## 사전 조건
<a name="switch-connectivity-prerequisites"></a>

연결 스위치를 배포하기 전에 대상 AWS 계정 및 리전에서 다음을 설정합니다.
+ **AWS IoT 사물** - 소스 계정과 이름이 동일한 사물을 생성합니다.
+ **인증서** - 대상 계정에 동일한 디바이스 인증서를 등록합니다. 인증서는 디바이스가 소스 계정에서 사용하는 것과 동일한 인증서여야 합니다.
+ **AWS IoT 정책** - 정책을 인증서에 연결합니다. 정책은 클라이언트 ID`iot:Connect`에 와일드카드 접미사를 사용하는 리소스 ARN으로를 허용해야 합니다.

  ```
  "Resource": "arn:aws:iot:*:*:client/${iot:Connection.Thing.ThingName}*"
  ```

  nucleus 사전 연결 검사에는 클라이언트 ID가 사용되므로 와일드카드 접미사를 포함해야 합니다`{{thing-name}}#endpoint-switch`.
+ **AWS IoT 역할 별**칭 - Greengrass 작업에 대한 적절한 IAM 역할 권한을 사용하여 대상 리전에 역할 별칭을 생성합니다.

**참고**  
정책`${iot:Connection.Thing.ThingName}`에서와 같은 AWS IoT 사물 정책 변수를 사용하려면 대상 계정의 AWS IoT 사물에만 인증서를 연결 AWS IoT 해야 합니다.

Greengrass nucleus 코어 디바이스의 경우 nucleus 구성**iotdata**에서를 `greengrassDataPlaneEndpoint`로 설정해야 합니다. 연결 스위치 배포 또는 초기 프로비저닝 중에이 설정을 포함합니다.

이 설정이 없으면 데이터 영역은 전환 후에도 원래 계정에 바인딩된 상태로 유지됩니다. 이렇게 하면 구성 요소 아티팩트 다운로드 및 컨트롤 플레인 작업이 중단됩니다. 자세한 내용은의 `greengrassDataPlaneEndpoint` 구성 파라미터를 참조하세요[Greengrass nucleus](greengrass-nucleus-component.md).

Greengrass nucleus lite 코어 디바이스의 경우 nucleus에 구성 업데이트를 배포하기 전에 계정에 프라이빗 `aws.greengrass.NucleusLite` 구성 요소를 생성해야 합니다. AWS IoT Greengrass 배포는 계정의 구성 요소 레지스트리에 있는 구성 요소만 대상으로 지정할 수 있으며 nucleus lite에 대한 퍼블릭 구성 요소는 없습니다.

`aws_nucleus_lite` 런타임과 빈 수명 주기(작업 없음)를 사용하여 구성 요소를 생성합니다. 구성 요소 버전은 디바이스에서 실행되는 nucleus lite 버전과 일치해야 합니다.

## 배포 생성
<a name="switch-connectivity-create-deployment"></a>

소스 계정에서 코어 디바이스 또는 해당 사물 그룹을 대상으로 하는 배포를 생성합니다. 배포는 새 AWS IoT 엔드포인트 값을 사용하여 nucleus 구성 요소에 병합 구성 업데이트를 보냅니다.

**연결 스위치를 배포하려면(AWS CLI)**

1. 다음 콘텐츠를 통해 `switch-deployment.json`이라는 파일을 생성합니다. 자리 표시자 값을 대상 계정의 값으로 바꿉니다.
   + {{targetArn}}을 소스 계정의 AWS IoT 사물 그룹 또는 코어 디바이스의 ARN으로 바꿉니다.
   + {{componentName}}을 nucleus`aws.greengrass.Nucleus`의 경우 로 바꾸고 nucleus lite`aws.greengrass.NucleusLite`의 경우 로 바꿉니다.
   + {{componentVersion}}을 디바이스에서 실행 중인 nucleus의 버전으로 바꿉니다.

   ```
   {
     "targetArn": "{{targetArn}}",
     "deploymentName": "SwitchConnectivity",
     "components": {
       "{{componentName}}": {
         "componentVersion": "{{componentVersion}}",
         "configurationUpdate": {
           "merge": "{\"iotDataEndpoint\":\"{{account-prefix}}-ats.iot.{{region}}.amazonaws.com\",\"iotCredEndpoint\":\"{{account-prefix}}.credentials.iot.{{region}}.amazonaws.com\",\"awsRegion\":\"{{region}}\",\"iotRoleAlias\":\"{{role-alias-name}}\"}"
         }
       }
     },
     "deploymentPolicies": {
       "failureHandlingPolicy": "ROLLBACK"
     }
   }
   ```

   아직를 로 `greengrassDataPlaneEndpoint` 설정하지 않은 Greengrass nucleus 코어 디바이스의 경우 병합 구성에 **iotdata**추가합니다.

   ```
   "merge": "{\"iotDataEndpoint\":\"...\",\"iotCredEndpoint\":\"...\",\"awsRegion\":\"...\",\"iotRoleAlias\":\"...\",\"greengrassDataPlaneEndpoint\":\"iotdata\"}"
   ```

   `merge` 값을 JSON 문자열로 인코딩합니다. 백슬래시()를 사용하여 모든 내부 따옴표를 이스케이프합니다`\"`. 배포를 생성하기 전에 JSON 검증 도구를 사용하여 구문을 확인합니다.

1. 다음 명령을 실행하여 배포를 생성합니다.

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

## 예상되는 사항
<a name="switch-connectivity-what-to-expect"></a>

nucleus는 변경 사항을 적용하기 전에 새 엔드포인트에 대한 연결을 검증합니다. 디바이스가 새 엔드포인트에 연결할 수 없는 경우 배포가 실패하고 디바이스는 소스 계정에 연결된 상태로 유지됩니다.

nucleus는 비행 전 연결 검사에 클라이언트 ID`{{thing-name}}#endpoint-switch`를 사용합니다.

구성을 적용한 후 nucleus는 새 엔드포인트에 대한 연결을 테스트합니다. 연결에 실패하면 nucleus가 자동으로 원래 구성으로 롤백됩니다. 배포는 소스 계정`FAILED`의를 보고합니다.

연결 전환에 성공하면 배포는 소스 계정`SUCCEEDED`에서를 보고합니다.는 새 엔드포인트와 연결된 계정 및 리전에서 코어 디바이스를 AWS IoT Greengrass 생성합니다.

**참고**  
연결 전환 중에 nucleus는 토큰 교환 서비스에 대한 엄격한 종속성이 있는 구성 요소를 다시 시작합니다. 이렇게 다시 시작하면 새 자격 증명 엔드포인트에서 AWS IoT 자격 증명이 새로 고쳐집니다. nucleus는 다른 구성 요소를 다시 시작하지 않으며 기존 상태로 계속 실행됩니다.

## 스위치 확인
<a name="switch-connectivity-verify"></a>

배포가 완료되면 연결 전환이 성공했는지 확인합니다.

**연결 스위치를 확인하려면**

1. 소스 계정의 배포 상태를 확인합니다. 디바이스가 새 엔드포인트에 연결`SUCCEEDED`되면 배포가 보고합니다.

   ```
   aws greengrassv2 list-effective-deployments \
     --core-device-thing-name {{thing-name}}
   ```

1. 코어 디바이스가 대상 계정에 나타나는지 확인합니다. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)을 열거나 다음 명령을 실행합니다.

   ```
   aws greengrassv2 get-core-device \
     --core-device-thing-name {{thing-name}}
   ```

 AWS IoT 사물 및 코어 디바이스 레코드는 전환 후에도 소스 계정에 남아 있습니다. 향후 배포가 디바이스를 대상으로 하지 않도록 하려면 소스 계정의 사물 그룹에서 제거합니다.

배포 상태가가 아닌 경우 디바이스의 `{{/greengrass/v2}}/logs/greengrass.log`에서 Greengrass 로그에서 오류 세부 정보를 `SUCCEEDED`확인합니다. 연결 전환 작업과 관련된 일반적인 오류 코드는 섹션을 참조하세요[세부 배포 오류 코드](troubleshooting-deployment.md).