

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

# AWS IoT Greengrass 코어 디바이스 설정
<a name="setting-up"></a>

이 섹션의 작업을 완료하여 AWS IoT Greengrass 코어 소프트웨어를 설치, 구성 및 실행합니다.

**참고**  
이 섹션에서는 AWS IoT Greengrass 코어 소프트웨어의 고급 설치 및 구성에 대해 설명합니다. 이 단계는 nucleus lite에는 적용되지 않습니다. 처음 사용하는 경우 먼저 [시작하기 자습서를](getting-started.md) 완료하여 코어 디바이스를 설정하고 기능을 살펴보는 AWS IoT Greengrass V2것이 좋습니다 AWS IoT Greengrass.



**Topics**
+ [지원하는 플랫폼](#supported-platforms)
+ [장치 요구 사항](#device-requirements)
+ [Lambda 함수 요구 사항](#greengrass-v2-lambda-requirements)
+ [설정 AWS 계정](#set-up-aws-account)
+ [AWS IoT Greengrass 코어 소프트웨어 설치](install-greengrass-core-v2.md)
+ [AWS IoT Greengrass 코어 소프트웨어 실행](run-greengrass-core-v2.md)
+ [Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 실행](run-greengrass-docker.md)
+ [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass 코어 소프트웨어(OTA) 업데이트](update-greengrass-core-v2.md)
+ [AWS IoT Greengrass 코어 소프트웨어 제거](uninstall-greengrass-core-v2.md)

## 지원하는 플랫폼
<a name="supported-platforms"></a>
+ [Greengrass nucleus 지원 플랫폼](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-nucleus-component.html)
+ [Greengrass nucleus lite 지원 플랫폼](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-nucleus-lite-component.html)

## 장치 요구 사항
<a name="device-requirements"></a>
+ [Greengrass nucleus 디바이스 요구 사항](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-nucleus-component.html)
+ [Greengrass nucleus lite 디바이스 요구 사항](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-nucleus-lite-component.html)

## Lambda 함수 요구 사항
<a name="greengrass-v2-lambda-requirements"></a>

**중요**  
Greengrass Lambda 함수는 현재 Greengrass nucleus lite에서 지원되지 않습니다.

Lambda 함수를 실행하려면 디바이스가 다음과 같은 요구 사항을 충족해야 합니다.
+ Linux 기반 운영 체제.
+ 디바이스에 `mkfifo` 쉘 명령이 있어야 합니다.
+ 디바이스에서 Lambda 함수에 필요한 프로그래밍 언어 라이브러리를 실행해야 합니다. 디바이스에 필수 라이브러리를 설치하고 `PATH` 환경 변수에 추가해야 합니다. Greengrass는 Python, Node.js, Java 런타임의 모든 Lambda 지원 버전을 지원합니다. Greengrass는 더 이상 사용되지 않는 Lambda 런타임 버전에 추가 제한 사항을 적용하지 않습니다. Lambda 런타임 AWS IoT Greengrass 지원에 대한 자세한 내용은 섹션을 참조하세요[AWS Lambda 함수 실행](run-lambda-functions.md).
+ 컨테이너화된 Lambda 함수를 실행하려면 디바이스가 다음과 같은 요구 사항을 충족해야 합니다.
  + Linux 커널 버전 4.4 이상.
  + 커널은 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1을 지원해야 하며 사용자가 다음 cgroups를 활성화하고 탑재해야 합니다.
    + 컨테이너화된 Lambda 함수의 *메모리* 제한을 설정 AWS IoT Greengrass 하기 위한의 메모리 cgroup입니다.
    + 시스템 디바이스 또는 볼륨에 액세스하기 위한 컨테이너화된 Lambda 함수의 *devices* cgroup.

     AWS IoT Greengrass 코어 소프트웨어는 cgroups v2를 지원하지 않습니다.

    이 요구 사항을 충족하려면 다음 Linux 커널 파라미터로 디바이스를 부팅합니다.

    ```
    cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
    ```
**작은 정보**  
Raspberry Pi에서 `/boot/cmdline.txt` 파일을 편집하여 디바이스의 커널 파라미터를 설정합니다.
  + 디바이스에서 다음 Linux 커널 구성을 활성화해야 합니다.
    + 네임스페이스:
      + `CONFIG_IPC_NS`
      + `CONFIG_UTS_NS`
      + `CONFIG_USER_NS`
      + `CONFIG_PID_NS`
    + Cgroups:
      + `CONFIG_CGROUP_DEVICE`
      + `CONFIG_CGROUPS`
      + `CONFIG_MEMCG`
    + 기타:
      + `CONFIG_POSIX_MQUEUE`
      + `CONFIG_OVERLAY_FS`
      + `CONFIG_HAVE_ARCH_SECCOMP_FILTER`
      + `CONFIG_SECCOMP_FILTER`
      + `CONFIG_KEYS`
      + `CONFIG_SECCOMP`
      + `CONFIG_SHMEM`
**작은 정보**  
Linux 커널 파라미터를 확인하고 설정하는 방법을 알아보려면 사용 중인 Linux 배포의 설명서를 확인합니다. AWS IoT Device Tester 용 AWS IoT Greengrass 를 사용하여 디바이스가 이러한 요구 사항을 충족하는지 확인할 수도 있습니다. 자세한 내용은 [AWS IoT Greengrass V2용 AWS IoT Device Tester 사용](device-tester-for-greengrass-ug.md) 단원을 참조하십시오.

## 설정 AWS 계정
<a name="set-up-aws-account"></a>

이 없는 경우 다음 단계를 AWS 계정완료하여 생성합니다.

**에 가입하려면 AWS 계정**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)을 엽니다.

1. 온라인 지시 사항을 따릅니다.

   등록 절차 중 전화 또는 텍스트 메시지를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

   에 가입하면 AWS 계정*AWS 계정 루트 사용자*이 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 [루트 사용자 액세스 권한이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)을 수행하는 것입니다.

다음 옵션 중 하나를 선택하여 관리 사용자를 생성합니다.


****  

| 관리자를 관리하는 방법 한 가지 선택 | 목적 | By | 다른 방법 | 
| --- | --- | --- | --- | 
| IAM Identity Center에서 (권장) | 단기 보안 인증 정보를 사용하여 AWS에 액세스합니다.이는 보안 모범 사례와 일치합니다. 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)를 참조하세요. | AWS IAM Identity Center 사용 설명서의 [시작하기](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html) 지침을 따릅니다. | AWS Command Line Interface 사용 설명서에서 [사용하도록 AWS CLI 를 구성 AWS IAM Identity Center](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)하여 프로그래밍 방식 액세스를 구성합니다. | 
| IAM에서 (권장되지 않음) | 장기 보안 인증 정보를 사용하여 AWS에 액세스합니다. | IAM 사용 설명서의 [비상 액세스를 위한 IAM 사용자 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html)에 나와 있는 지침을 따르세요. | IAM 사용 설명서에 나온 [IAM 사용자의 액세스 키 관리](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html) 단계를 수행하여 프로그래밍 방식의 액세스를 구성합니다. | 

# AWS IoT Greengrass 코어 소프트웨어 설치
<a name="install-greengrass-core-v2"></a>

AWS IoT Greengrass는 AWS를 엣지 디바이스로 확장하면서 생성한 데이터를 작업할 수 있고, 관리, 분석 및 장기 저장 용도로 AWS 클라우드를 사용합니다. AWS IoT Greengrass 및 AWS 클라우드와 통합할 엣지 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.

**중요**  
AWS IoT Greengrass 코어 소프트웨어를 다운로드하고 설치하기 전에 코어 디바이스가 AWS IoT Greengrass 코어 소프트웨어 v2.0 설치 및 실행 [요구 사항](greengrass-nucleus-component.md#greengrass-v2-requirements)을 충족하는지 확인하세요.

AWS IoT Greengrass 코어 소프트웨어에는 디바이스를 Greengrass 코어 디바이스로 설정하는 설치 관리자가 포함되어 있습니다. 설치 관리자를 실행할 때 사용할 루트 폴더 및 AWS 리전과 같은 옵션을 구성할 수 있습니다. 설치 관리자에서 필요한 AWS IoT 및 IAM 리소스를 생성하도록 선택할 수 있습니다. 로컬 개발 도구를 배포하여 사용자 지정 구성 요소 개발에 사용하는 디바이스를 구성하도록 선택할 수도 있습니다.

AWS IoT Greengrass 코어 소프트웨어에서 AWS 클라우드에 연결하고 작동하려면 다음 AWS IoT 및 IAM 리소스가 필요합니다.
+ AWS IoT 사물. 디바이스를 AWS IoT 사물로 등록하면 해당 디바이스는 디지털 인증서를 사용하여 AWS에 인증할 수 있습니다. 이 인증서를 사용하면 디바이스가 AWS IoT 및 AWS IoT Greengrass와 통신할 수 있습니다. 자세한 내용은 [에 대한 디바이스 인증 및 권한 부여 AWS IoT Greengrass](device-auth.md) 섹션을 참조하세요.
+ (선택 사항) AWS IoT 사물 그룹. 사물 그룹을 사용하여 Greengrass 코어 디바이스 플릿을 관리합니다. 소프트웨어 구성 요소를 디바이스에 배포할 때 개별 디바이스 또는 디바이스 그룹에 배포할 수 있습니다. 사물 그룹에 디바이스를 추가하여 사물 그룹의 소프트웨어 구성 요소를 디바이스에 배포할 수 있습니다. 자세한 내용은 [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md) 섹션을 참조하세요.
+ IAM 역할. Greengrass 코어 디바이스에서는 AWS IoT Core 자격 증명 공급자를 통해 IAM 역할을 사용하여 AWS 서비스를 직접 호출할 권한을 부여합니다. 이 역할을 사용하면 디바이스가 AWS IoT와 상호 작용하고, Amazon CloudWatch Logs로 로그를 전송하고, Amazon Simple Storage Service(Amazon S3)에서 사용자 지정 구성 요소 아티팩트를 다운로드할 수 있습니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 섹션을 참조하세요.
+ AWS IoT 역할 별칭. Greengrass 코어 디바이스는 역할 별칭을 사용하여 사용할 IAM 역할을 식별합니다. 역할 별칭을 사용하면 IAM 역할을 변경하면서 디바이스 구성을 동일하게 유지할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS 서비스 직접 호출에 대한 권한 부여](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)를 참조하세요.

다음 옵션 중 하나를 선택하여 코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.
+ **빠른 설치**

  이 옵션을 선택하면 가능한 짧은 단계를 거쳐 Greengrass 코어 디바이스를 설정할 수 있습니다. 설치 관리자로 필요한 AWS IoT 및 IAM 리소스가 생성됩니다. 이 옵션을 사용하려면 설치 관리자에 AWS 자격 증명을 제공하여 AWS 계정에서 리소스를 생성해야 합니다.

  이 옵션을 사용하여 방화벽 또는 네트워크 프록시 뒤에 설치할 수 없습니다. 디바이스가 방화벽 또는 네트워크 프록시 뒤에 있는 경우 [수동 설치](manual-installation.md)를 고려하세요.

  자세한 내용은 [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md) 섹션을 참조하세요.
+ **수동 설치**

  필요한 AWS 리소스를 수동으로 생성하거나 방화벽 또는 네트워크 프록시 뒤에 설치하려면 이 옵션을 선택합니다. 수동 설치를 사용하면 필요한 AWS IoT 및 IAM 리소스를 생성하므로 설치 관리자에 AWS 계정에서 리소스를 생성할 권한을 부여할 필요가 없습니다. 포트 443 또는 네트워크 프록시를 통해 연결하도록 디바이스를 구성할 수도 있습니다. HSM(하드웨어 보안 모듈), TPM(Trusted Platform Module) 또는 다른 암호화 요소에 저장하는 프라이빗 키와 인증서를 사용하도록 AWS IoT Greengrass 코어 소프트웨어를 구성할 수도 있습니다.

  자세한 내용은 [수동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](manual-installation.md) 섹션을 참조하세요.
+ **AWS IoT 플릿 프로비저닝을 사용한 설치**

  이 옵션을 선택하여 AWS IoT 플릿 프로비저닝 템플릿에서 필요한 AWS 리소스를 생성합니다. 플릿에서 유사한 디바이스를 생성하거나 차량 또는 스마트 홈 디바이스와 같이 고객이 나중에 활성화하는 디바이스를 제조하는 경우 이 옵션을 선택할 수 있습니다. 디바이스는 클레임 인증서를 사용하여 디바이스가 정상 작동을 위해 AWS 클라우드에 연결하는 데 사용하는 X.509 클라이언트 인증서를 포함한 AWS 리소스를 인증 및 프로비저닝합니다. 제조 중에 클레임 인증서를 디바이스의 하드웨어에 임베드하거나 플래시할 수 있으며, 동일한 클레임 인증서와 키를 사용하여 여러 디바이스를 프로비저닝할 수 있습니다. 포트 443 또는 네트워크 프록시를 통해 연결하도록 디바이스를 구성할 수도 있습니다.

  자세한 내용은 [AWS IoT 플릿 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](fleet-provisioning.md) 섹션을 참조하세요.
+ **사용자 지정 프로비저닝을 사용한 설치**

  이 옵션을 선택하면 필요한 AWS 리소스를 프로비저닝하는 사용자 지정 Java 애플리케이션을 개발합니다. [자체 X.509 클라이언트 인증서를 생성](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)하거나 프로비저닝 프로세스를 효과적으로 제어하려는 경우 이 옵션을 선택할 수 있습니다. AWS IoT Greengrass는 사용자 지정 프로비저닝 애플리케이션과 AWS IoT Greengrass 코어 소프트웨어 설치 관리자 간에 정보를 교환하기 위해 구현할 수 있는 인터페이스를 제공합니다.

  자세한 내용은 [사용자 지정 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](custom-provisioning.md) 섹션을 참조하세요.

또한 AWS IoT Greengrass는 AWS IoT Greengrass 코어 소프트웨어를 실행하는 컨테이너화된 환경을 제공합니다. Dockerfile을 사용하여 [Docker 컨테이너에서 AWS IoT Greengrass를 실행](run-greengrass-docker.md)할 수 있습니다.

**Topics**
+ [자동 프로비저닝을 사용한 설치](quick-installation.md)
+ [수동 프로비저닝을 사용하여 설치](manual-installation.md)
+ [플릿 프로비저닝을 사용하여 설치](fleet-provisioning.md)
+ [사용자 지정 프로비저닝으로 설치](custom-provisioning.md)
+ [설치 프로그램 인수](configure-installer.md)

# 자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치
<a name="quick-installation"></a>

 AWS IoT Greengrass 코어 소프트웨어에는 디바이스를 Greengrass 코어 디바이스로 설정하는 설치 프로그램이 포함되어 있습니다. 디바이스를 빠르게 설정하기 위해 설치 관리자는 코어 디바이스가 작동하는 데 필요한 AWS IoT 사물, AWS IoT 사물 그룹, IAM 역할 및 AWS IoT 역할 별칭을 프로비저닝할 수 있습니다. 설치 관리자는 또한 로컬 개발 도구를 코어 디바이스에 배포할 수 있으므로 디바이스를 사용하여 사용자 지정 소프트웨어 구성 요소를 개발하고 테스트할 수 있습니다. 설치 관리자는 이러한 리소스를 프로비저닝하고 배포를 생성하려면 AWS 자격 증명이 필요합니다.

디바이스에 AWS 자격 증명을 제공할 수 없는 경우 코어 디바이스가 작동하는 데 필요한 AWS 리소스를 프로비저닝할 수 있습니다. 개발 도구를 코어 디바이스에 배포하여 개발 디바이스로 사용할 수도 있습니다. 이렇게 하면 설치 관리자 실행 시 디바이스에 더 적은 권한을 제공할 수 있습니다. 자세한 내용은 [수동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](manual-installation.md) 단원을 참조하십시오.

**중요**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass 코어 소프트웨어를 다운로드하기 전에 코어 디바이스가 AWS IoT Greengrass 코어 소프트웨어 v2.0 설치 및 실행 [요구 사항을](greengrass-nucleus-component.md#greengrass-v2-requirements) 충족하는지 확인합니다.

**참고**  
루트가 아닌 사용자로 AWS IoT Greengrass 코어 소프트웨어를 설치하고 실행하려면 섹션을 참조하세요[AWS IoT Greengrass V2 코어 디바이스를 루트가 아닌 디바이스로 설정](setup-greengrass-non-root.md).

**Topics**
+ [디바이스 환경 설정](#set-up-device-environment)
+ [디바이스에 AWS 자격 증명 제공](#provide-installer-aws-credentials)
+ [AWS IoT Greengrass 코어 소프트웨어 다운로드](#download-greengrass-core-v2)
+ [AWS IoT Greengrass 코어 소프트웨어 설치](#run-greengrass-core-v2-installer)

## 디바이스 환경 설정
<a name="set-up-device-environment"></a>

이 섹션의 단계에 따라 AWS IoT Greengrass 코어 디바이스로 사용할 Linux 또는 Windows 디바이스를 설정합니다.

### Linux 디바이스 설정
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**용 Linux 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다. 다음 명령은 디바이스에 OpenJDK를 설치하는 방법을 보여줍니다.
   + Debian 기반 또는 Ubuntu 기반 배포판의 경우:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat 기반 배포판의 경우:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 대상 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + Amazon Linux 2023의 경우:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   설치가 완료되면 다음 명령을 실행하여 Linux 디바이스에서 Java가 실행되는지 확인합니다.

   ```
   java -version
   ```

   디바이스에서 실행되는 Java 버전이 명령을 통해 인쇄됩니다. 예를 들어 Debian 기반 배포의 경우 출력이 다음 샘플과 유사할 수 있습니다.

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (선택 사항) 디바이스에서 구성 요소를 실행하는 기본 시스템 사용자와 그룹을 생성합니다. 설치 관리자 인수를 사용하여 설치하는 동안 AWS IoT Greengrass 코어 소프트웨어 `--component-default-user` 설치 관리자가이 사용자와 그룹을 생성하도록 선택할 수도 있습니다. 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 단원을 참조하십시오.

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass 코어 소프트웨어(일반적으로 `root`)를 실행하는 사용자에게 모든 사용자 및 모든 그룹에서를 실행할 수 `sudo` 있는 권한이 있는지 확인합니다.

   1. 다음 명령을 실행하여 `/etc/sudoers` 파일을 엽니다.

      ```
      sudo visudo
      ```

   1. 사용자에 대한 권한이 다음 예제와 같은지 확인합니다.

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (선택 사항) [컨테이너화된 Lambda 함수를 실행](run-lambda-functions.md)하려면 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1을 활성화하고 *memory* 및 *devices* cgroups를 활성화하고 탑재해야 합니다. 컨테이너화된 Lambda 함수를 실행할 계획이 없는 경우 이 단계를 건너뛸 수 있습니다.

   이러한 cgroups 옵션을 활성화하려면 다음 Linux 커널 파라미터로 디바이스를 부팅합니다.

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   디바이스의 커널 파라미터를 보고 설정하는 방법에 대한 자세한 내용은 운영 체제 및 부트 로더 설명서를 참조하세요. 지침에 따라 커널 파라미터를 영구적으로 설정합니다.

1. [디바이스 요구 사항](greengrass-nucleus-component.md#greengrass-v2-requirements)의 요구 사항 목록에 따라 디바이스에 기타 모든 필수 종속성을 설치합니다.

### Windows 디바이스 설정
<a name="set-up-windows-device-environment"></a>

**참고**  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.5.0 이상에서 사용할 수 있습니다.<a name="set-up-windows-device-environment-procedure"></a>

**용 Windows 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다.

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 시스템 변수에서 Java를 사용할 수 있는지 확인하고 사용할 수 없는 경우 추가합니다. LocalSystem 계정은 AWS IoT Greengrass 코어 소프트웨어를 실행하므로 사용자의 PATH 사용자 변수 대신 PATH 시스템 변수에 Java를 추가해야 합니다. 해결 방법:

   1. Windows 키를 눌러 시작 메뉴를 엽니다.

   1. 시작 메뉴에서 **environment variables**를 입력하여 시스템 옵션을 검색합니다.

   1. 시작 메뉴 검색 결과에서 **시스템 환경 변수 편집**을 선택하여 **시스템 속성** 창을 엽니다.

   1. **환경 변수...**를 선택하여 **환경 변수** 창을 엽니다.

   1. **시스템 변수**에서 **경로**를 선택하고 **편집**을 선택합니다. **환경 변수 편집** 창에서 각 경로를 별도의 줄로 볼 수 있습니다.

   1. Java 설치 `bin` 폴더의 경로가 있는지 확인합니다. 경로는 다음 예제와 유사할 수 있습니다.

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **경로**에서 Java 설치 `bin` 폴더가 누락된 경우 **새로 만들기**를 선택하여 추가한 다음 **확인**을 선택합니다.

1. <a name="set-up-windows-device-environment-open-cmd"></a>관리자 권한으로 Windows 명령 프롬프트(`cmd.exe`)를 엽니다.

1. <a name="set-up-windows-device-environment-create"></a>Windows 디바이스의 LocalSystem 계정에 기본 사용자를 생성합니다. *암호*를 안전한 암호로 바꿉니다.

   ```
   net user /add ggc_user password
   ```
**작은 정보**  <a name="windows-password-expiration-tip"></a>
Windows 구성에 따라 사용자의 암호가 미래의 날짜에 만료되도록 설정할 수 있습니다. Greengrass 애플리케이션이 계속 작동하도록 하려면 암호가 만료되는 시기를 추적하고 만료되기 전에 이를 업데이트합니다. 사용자의 암호가 만료되지 않도록 설정할 수도 있습니다.  
사용자와 암호가 만료되는 시기를 확인하려면 다음 명령을 실행합니다.  

     ```
     net user ggc_user | findstr /C:expires
     ```
사용자의 암호가 만료되지 않도록 설정하려면 다음 명령을 실행합니다.  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` 명령이 더는 사용되지 않는](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 이상을 사용하는 경우 다음 PowerShell 명령을 실행합니다.  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>Microsoft에서 [PsExec 유틸리티](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)를 다운로드하여 디바이스에 설치합니다.

1. <a name="set-up-windows-device-credentials"></a>PsExec 유틸리티를 사용하여 기본 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장합니다. 이전에 설정한 사용자의 암호로 *암호*를 바꿉니다.

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement**가 열리면 **Accept**를 선택하여 라이선스에 동의하고 명령을 실행합니다.
**참고**  
Windows 디바이스에서 LocalSystem 계정은 Greengrass nucleus를 실행하고 PsExec 유틸리티를 사용하여 기본 사용자 정보를 LocalSystem 계정에 저장해야 합니다. Credential Manager 애플리케이션을 사용하면 이 정보가 LocalSystem 계정 대신 현재 로그인한 사용자의 Windows 계정에 저장됩니다.

## 디바이스에 AWS 자격 증명 제공
<a name="provide-installer-aws-credentials"></a>

설치 관리자가 필요한 AWS 리소스를 프로비저닝할 수 있도록 디바이스에 AWS 자격 증명을 제공합니다. 필요한 권한에 대한 자세한 정보는 [설치 관리자가 리소스를 프로비저닝하기 위한 최소 IAM 정책](provision-minimal-iam-policy.md) 섹션을 참조하세요.

**디바이스에 AWS 자격 증명을 제공하려면**
+ <a name="installer-export-aws-credentials"></a>설치 관리자가 코어 디바이스에 대한 AWS IoT 및 IAM 리소스를 프로비저닝할 수 있도록 디바이스에 AWS 자격 증명을 제공합니다. 보안을 강화하려면 프로비저닝에 필요한 최소 권한만 허용하는 IAM 역할에 대한 임시 자격 증명을 받는 것이 좋습니다. 자세한 내용은 [설치 관리자가 리소스를 프로비저닝하기 위한 최소 IAM 정책](provision-minimal-iam-policy.md) 섹션을 참조하세요.
**참고**  
설치 관리자에서는 자격 증명을 저장하거나 저장하지 않습니다.

  디바이스에서 다음 중 하나를 수행하여 자격 증명을 검색하고 AWS IoT Greengrass 코어 소프트웨어 설치 관리자가 사용할 수 있도록 합니다.
  + (권장)의 임시 자격 증명 사용 AWS IAM Identity Center

    1. IAM Identity Center에서 액세스 키 ID, 비밀 액세스 키, 세션 토큰을 제공합니다. 자세한 내용은 *IAM Identity Center 사용 설명서*의 [임시 자격 증명 가져오기 및 새로 고침](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html#how-to-get-temp-credentials)에서 **수동 자격 증명 새로 고침**을 참조하세요.

    1. 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어에 자격 증명을 제공합니다.

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ PowerShell ]

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
       ```

------
  + IAM 역할에서 임시 보안 인증을 사용합니다.

    1. 수임하는 IAM 역할에서 액세스 키 ID, 비밀 액세스 키, 세션 토큰을 제공합니다. 이러한 자격 증명을 검색하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*에서 [임시 보안 인증 요청](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)을 참조하세요.

    1. 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어에 자격 증명을 제공합니다.

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ PowerShell ]

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
       ```

------
  + IAM 사용자의 장기 자격 증명 사용:

    1. IAM 사용자의 액세스 키 ID 및 비밀 액세스 키를 제공합니다. 나중에 삭제하는 프로비저닝을 위한 IAM 사용자를 생성할 수 있습니다. 사용자에게 제공할 IAM 정책은 [설치 관리자가 리소스를 프로비저닝하기 위한 최소 IAM 정책](provision-minimal-iam-policy.md) 섹션을 참조하세요. 장기 자격 증명을 검색하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*에서 [IAM 사용자의 액세스 키 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)를 참조하세요.

    1. 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어에 자격 증명을 제공합니다.

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       ```

------
#### [ PowerShell ]

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       ```

------

    1. (선택 사항) Greengrass 디바이스를 프로비저닝하기 위해 IAM 사용자를 생성한 경우 사용자를 삭제합니다.

    1. (선택 사항) 기존 IAM 사용자의 액세스 키 ID 및 비밀 액세스 키를 사용한 경우 해당 키가 더 이상 유효하지 않도록 사용자의 키를 업데이트합니다. 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [액세스 키 업데이트](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)를 참조하세요.

## AWS IoT Greengrass 코어 소프트웨어 다운로드
<a name="download-greengrass-core-v2"></a>

다음 위치에서 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다.
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**참고**  
다음 위치에서 특정 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다. 다운로드할 버전으로 *version*을 바꿉니다.  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass 코어 소프트웨어를 다운로드하려면**

1. <a name="installation-download-ggc-software-step"></a>코어 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 라는 파일에 다운로드합니다`greengrass-nucleus-latest.zip`.

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>이 소프트웨어를 다운로드하면 [ Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 동의하는 것입니다.

1. <a name="verify-gg-nucleus-signature"></a>(선택 사항) Greengrass nucleus 소프트웨어 서명을 확인하려면
**참고**  
이 기능은 Greengrass nucleus 버전 2.9.5 이상에서 사용할 수 있습니다.

   1. 다음 명령을 사용하여 Greengrass nucleus 아티팩트의 서명을 확인합니다.

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 간접 호출 시 확인 결과를 나타내는 출력이 생성됩니다.

      1. Greengrass nucleus zip 파일이 서명되면 출력에 다음 문이 포함됩니다.

         ```
         jar verified.
         ```

      1. Greengrass nucleus zip 파일이 서명되지 않으면 출력에 다음 문이 포함됩니다.

         ```
         jar is unsigned.
         ```

   1. `-verify` 및 `-certs` 옵션과 함께 Jarsigner `-verbose` 옵션을 제공한 경우 출력에는 자세한 서명자 인증서 정보도 포함됩니다.

1. <a name="installation-unzip-ggc-software-step"></a> AWS IoT Greengrass 코어 소프트웨어의 압축을 디바이스의 폴더에 풉니다. *GreengrassInstaller*를 사용하려는 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (선택 사항) 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**중요**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 이전 버전의 Greengrass nucleus를 설치하는 경우 AWS IoT Greengrass 코어 소프트웨어를 설치한 후에는이 폴더를 제거하지 마십시오. AWS IoT Greengrass 코어 소프트웨어는이 폴더의 파일을 사용하여 실행합니다.  
최신 버전의 소프트웨어를 다운로드한 경우 v2.4.0 이상을 설치하고 AWS IoT Greengrass 코어 소프트웨어를 설치한 후이 폴더를 제거할 수 있습니다.

## AWS IoT Greengrass 코어 소프트웨어 설치
<a name="run-greengrass-core-v2-installer"></a>

다음 작업을 지정하는 인수를 사용하여 설치 관리자 실행:
+ <a name="install-argument-aws-resources"></a>코어 디바이스가 작동하는 데 필요한 AWS 리소스를 생성합니다.
+ <a name="install-argument-component-default-user"></a>`ggc_user` 시스템 사용자를 사용하도록 지정하여 코어 디바이스에서 소프트웨어 구성 요소를 실행합니다. Linux 디바이스에서 이 명령은 `ggc_group` 시스템 그룹을 사용하도록 지정하고 설치 관리자가 시스템 사용자와 그룹을 생성합니다.
+ <a name="install-argument-system-service"></a> AWS IoT Greengrass 코어 소프트웨어를 부팅 시 실행되는 시스템 서비스로 설정합니다. Linux 디바이스에서는 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 시스템이 필요합니다.
**중요**  <a name="windows-system-service-requirement-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.

로컬 개발 도구를 사용하여 개발 디바이스를 설정하려면 `--deploy-dev-tools true` 인수를 지정합니다. 설치 완료 후 로컬 개발 도구를 배포하는 데 최대 1분이 걸릴 수 있습니다.

지정할 수 있는 인수에 대한 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 섹션을 참조하세요.

**참고**  
<a name="jvm-tuning-note"></a>메모리가 제한된 디바이스 AWS IoT Greengrass 에서를 실행하는 경우 AWS IoT Greengrass 코어 소프트웨어에서 사용하는 메모리 양을 제어할 수 있습니다. 메모리 할당을 제어하기 위해 nucleus 구성 요소의 `jvmOptions` 구성 파라미터에서 JVM 힙 크기 옵션을 설정할 수 있습니다. 자세한 내용은 [JVM 옵션으로 메모리 할당 제어](configure-greengrass-core-v2.md#jvm-tuning) 단원을 참조하십시오.

**AWS IoT Greengrass 코어 소프트웨어를 설치하려면**

1.  AWS IoT Greengrass 코어 설치 관리자를 실행합니다. 다음과 같이 명령의 인수 값을 바꿉니다.
**참고**  
Windows의 경우 260자의 경로 길이 제한이 있습니다. Windows를 사용하는 경우 `C:\greengrass\v2` 또는 `D:\greengrass\v2`와 같은 루트 폴더를 사용하여 Greengrass 구성 요소 경로를 260자 제한 미만으로 유지합니다.<a name="installer-replace-arguments"></a>

   1. `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*: AWS IoT Greengrass 코어 소프트웨어를 설치하는 데 사용할 루트 폴더의 경로입니다.

   1. *GreengrassInstaller*. AWS IoT Greengrass 코어 소프트웨어 설치 관리자를 압축 해제한 폴더의 경로입니다.

   1. *region*. 리소스를 찾거나 생성할 AWS 리전 입니다.

   1. *MyGreengrassCore*. Greengrass 코어 디바이스에 대한 AWS IoT 사물의 이름입니다. 사물이 존재하지 않는 경우 설치 관리자가 이를 생성합니다. 설치 관리자는 인증서를 다운로드하여 AWS IoT 사물로 인증합니다. 자세한 내용은 [에 대한 디바이스 인증 및 권한 부여 AWS IoT Greengrass](device-auth.md) 단원을 참조하십시오.
**참고**  <a name="install-argument-thing-name-constraint"></a>
사물 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.

   1. *MyGreengrassCoreGroup*. Greengrass 코어 디바이스의 AWS IoT 사물 그룹 이름입니다. 사물 그룹이 존재하지 않는 경우 설치 관리자가 이를 생성하고 사물을 추가합니다. 사물 그룹이 존재하고 활성 배포가 있는 경우 코어 디바이스는 배포에서 지정한 소프트웨어를 다운로드하고 실행합니다.
**참고**  <a name="install-argument-thing-group-name-constraint"></a>
사물 그룹 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.

   1. *GreengrassV2IoTThingPolicy*. Greengrass 코어 디바이스가 AWS IoT 및와 통신할 수 있도록 허용하는 AWS IoT 정책의 이름입니다 AWS IoT Greengrass. 정책이 없는 경우 AWS IoT 설치 관리자는이 이름으로 허용 AWS IoT 정책을 생성합니다. 사용 사례에 대해 이 정책의 권한을 제한할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass V2 코어 디바이스에 대한 최소 AWS IoT 정책](device-auth.md#greengrass-core-minimal-iot-policy) 단원을 참조하십시오.

   1. *GreengrassV2TokenExchangeRole*. Greengrass 코어 디바이스가 임시 AWS 자격 증명을 가져오도록 허용하는 IAM 역할의 이름입니다. 역할이 없는 경우 설치 관리자는 이를 생성하고 `GreengrassV2TokenExchangeRoleAccess`라는 정책을 생성 및 연결합니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.

   1. *GreengrassCoreTokenExchangeRoleAlias*. Greengrass 코어 디바이스가 나중에 임시 자격 증명을 가져올 수 있도록 허용하는 IAM 역할의 별칭입니다. 역할 별칭이 없는 경우 설치 관리자에서 이를 생성하고 지정한 IAM 역할로 가리킵니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --aws-region region ^
     --thing-name MyGreengrassCore ^
     --thing-group-name MyGreengrassCoreGroup ^
     --thing-policy-name GreengrassV2IoTThingPolicy ^
     --tes-role-name GreengrassV2TokenExchangeRole ^
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias ^
     --component-default-user ggc_user ^
     --provision true ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --aws-region region `
     --thing-name MyGreengrassCore `
     --thing-group-name MyGreengrassCoreGroup `
     --thing-policy-name GreengrassV2IoTThingPolicy `
     --tes-role-name GreengrassV2TokenExchangeRole `
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias `
     --component-default-user ggc_user `
     --provision true `
     --setup-system-service true
   ```

------
**중요**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정`--setup-system-service true`하도록를 지정해야 합니다.

   설치 관리자가 성공하면 다음 메시지가 인쇄됩니다.
   + `--provision`을 지정하면 리소스가 성공적으로 구성된 경우 설치 관리자에서 `Successfully configured Nucleus with provisioned resource details`가 인쇄됩니다.
   + `--deploy-dev-tools`를 지정하면 배포가 성공적으로 생성된 경우 설치 관리자에서 `Configured Nucleus to deploy aws.greengrass.Cli component`가 인쇄됩니다.
   + `--setup-system-service true`를 지정하면 소프트웨어가 설정되고 서비스로 실행되면 설치 관리자에서 `Successfully set up Nucleus as a system service`가 인쇄됩니다.
   + `--setup-system-service true`를 지정하지 않으면 소프트웨어가 실행되면 설치 관리자에서 `Launched Nucleus successfully`가 인쇄됩니다.

1. [Greengrass nucleus](greengrass-nucleus-component.md) v2.0.4 이상을 설치한 경우 이 단계를 건너뜁니다. 최신 버전의 소프트웨어를 다운로드한 경우 v2.0.4 이상을 설치한 것입니다.

   다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어 루트 폴더에 필요한 파일 권한을 설정합니다. `/greengrass/v2`를 설치 명령에서 지정한 루트 폴더로 바꾸고 */greengrass*를 루트 폴더의 상위 폴더로 바꿉니다.

   ```
   sudo chmod 755 /greengrass/v2 && sudo chmod 755 /greengrass
   ```

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설치한 경우 설치 관리자가 소프트웨어를 실행합니다. 그렇지 않으면 소프트웨어를 수동으로 실행해야 합니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 실행](run-greengrass-core-v2.md) 단원을 참조하십시오.

**참고**  
기본적으로 설치 관리자가 생성하는 IAM 역할은 S3 버킷의 구성 요소 아티팩트에 대한 액세스를 허용하지 않습니다. Amazon S3에서 아티팩트를 정의하는 사용자 지정 구성 요소를 배포하려면 코어 디바이스가 구성 요소 아티팩트를 검색할 수 있도록 역할에 권한을 추가해야 합니다. 자세한 내용은 [구성 요소 아티팩트에 대한 S3 버킷 액세스 허용](device-service-role.md#device-service-role-access-s3-bucket) 단원을 참조하십시오.  
구성 요소 아티팩트에 대한 S3 버킷이 아직 없는 경우 버킷을 생성한 후 권한을 추가할 수 있습니다.

**참고**  <a name="install-greengrass-core-recognized-note"></a>
<a name="install-greengrass-core-recognized-para"></a> AWS IoT Greengrass 코어 소프트웨어가 클라우드에 연결되면 디바이스가 코어 디바이스로 인식됩니다.

<a name="install-greengrass-core-next-steps-intro"></a>소프트웨어를 구성하고 사용하는 방법에 대한 자세한 내용은 다음을 AWS IoT Greengrass참조하세요.<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass 구성 요소 개발](develop-greengrass-components.md)
+ [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md)
+ [Greengrass 명령줄 인터페이스](gg-cli.md)

# 수동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치
<a name="manual-installation"></a>

 AWS IoT Greengrass 코어 소프트웨어에는 디바이스를 Greengrass 코어 디바이스로 설정하는 설치 프로그램이 포함되어 있습니다. 디바이스를 수동으로 설정하려면 디바이스에서 사용할 필수 AWS IoT 및 IAM 리소스를 생성할 수 있습니다. 이러한 리소스를 수동으로 생성하는 경우 설치 프로그램에 AWS 자격 증명을 제공할 필요가 없습니다.

 AWS IoT Greengrass 코어 소프트웨어를 수동으로 설치할 때 네트워크 프록시를 사용하거나 포트 443에서 AWS 에 연결하도록 디바이스를 구성할 수도 있습니다. 예를 들어 디바이스가 방화벽 또는 네트워크 프록시 뒤에서 실행되는 경우 이러한 구성 옵션을 지정해야 할 수 있습니다. 자세한 내용은 [포트 443에서 또는 네트워크 프록시를 통해 연결](configure-greengrass-core-v2.md#configure-alpn-network-proxy) 단원을 참조하십시오.

[PKCS\$111 인터페이스를](https://en.wikipedia.org/wiki/PKCS_11) 통해 하드웨어 보안 모듈(HSM)을 사용하도록 AWS IoT Greengrass 코어 소프트웨어를 구성할 수도 있습니다. 이 기능을 사용하면 프라이빗 키와 인증서 파일을 소프트웨어에 노출되거나 복제되지 않도록 안전하게 저장할 수 있습니다. 프라이빗 키와 인증서를 HSM, TPM(Trusted Platform Module) 또는 다른 암호화 요소와 같은 하드웨어 모듈에 저장할 수 있습니다. 이 기능은 Linux 디바이스에서만 사용할 수 있습니다. 하드웨어 보안 및 이를 사용하는 데 필요한 요구 사항에 대한 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 섹션을 참조하세요.

**중요**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass 코어 소프트웨어를 다운로드하기 전에 코어 디바이스가 AWS IoT Greengrass 코어 소프트웨어 v2.0 설치 및 실행 [요구 사항을](greengrass-nucleus-component.md#greengrass-v2-requirements) 충족하는지 확인합니다.

**Topics**
+ [AWS IoT 엔드포인트 검색](#retrieve-iot-endpoints)
+ [AWS IoT 사물 생성](#create-iot-thing)
+ [사물 인증서 생성](#create-thing-certificate)
+ [사물 인증서 구성](#configure-thing-certificate)
+ [토큰 교환 역할 생성](#create-token-exchange-role)
+ [디바이스에 인증서 다운로드](#download-thing-certificates)
+ [디바이스 환경 설정](#set-up-device-environment)
+ [AWS IoT Greengrass 코어 소프트웨어 다운로드](#download-greengrass-core-v2)
+ [AWS IoT Greengrass 코어 소프트웨어 설치](#run-greengrass-core-v2-installer-manual)

## AWS IoT 엔드포인트 검색
<a name="retrieve-iot-endpoints"></a>

의 AWS IoT 엔드포인트를 가져 AWS 계정와 나중에 사용할 수 있도록 저장합니다. 디바이스에서는 이러한 엔드포인트를 사용하여 AWS IoT에 연결합니다. 해결 방법:

1. 의 AWS IoT 데이터 엔드포인트를 가져옵니다 AWS 계정.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 의 AWS IoT 자격 증명 엔드포인트를 가져옵니다 AWS 계정.

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## AWS IoT 사물 생성
<a name="create-iot-thing"></a>

AWS IoT *사물*은에 연결하는 디바이스 및 논리적 엔터티를 나타냅니다 AWS IoT. Greengrass 코어 디바이스는 AWS IoT 사물입니다. 디바이스를 AWS IoT 사물로 등록하면 해당 디바이스는 디지털 인증서를 사용하여 인증할 수 있습니다 AWS.

이 섹션에서는 디바이스를 나타내는 AWS IoT 사물을 생성합니다.

**AWS IoT 사물을 생성하려면**

1. 디바이스에 대한 AWS IoT 사물을 생성합니다. 개발 컴퓨터에서 다음 명령을 실행합니다.
   + *MyGreengrassCore*를 사용할 사물 이름으로 바꿉니다. 이 이름은 Greengrass 코어 디바이스의 이름이기도 합니다.
**참고**  <a name="install-argument-thing-name-constraint"></a>
사물 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (선택 사항) 새 AWS IoT 사물 또는 기존 사물 그룹에 사물을 추가합니다. 사물 그룹을 사용하여 Greengrass 코어 디바이스 플릿을 관리합니다. 소프트웨어 구성 요소를 디바이스에 배포할 때 개별 디바이스 또는 디바이스 그룹을 대상으로 지정할 수 있습니다. 활성 Greengrass 배포가 있는 사물 그룹에 디바이스를 추가하여 사물 그룹의 소프트웨어 구성 요소를 디바이스에 배포할 수 있습니다. 해결 방법:

   1. (선택 사항) AWS IoT 사물 그룹을 생성합니다.
      + *MyGreengrassCoreGroup*을 생성할 사물 그룹의 이름으로 바꿉니다.
**참고**  <a name="install-argument-thing-group-name-constraint"></a>
사물 그룹 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.

      ```
      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.  AWS IoT 사물을 사물 그룹에 추가합니다.
      + *MyGreengrassCore*를 AWS IoT 사물의 이름으로 바꿉니다.
      + *MyGreengrassCoreGroup*을 사물 그룹의 이름으로 바꿉니다.

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

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

## 사물 인증서 생성
<a name="create-thing-certificate"></a>

<a name="create-thing-certificate-intro-1"></a>디바이스를 AWS IoT 사물로 등록하면 해당 디바이스는 디지털 인증서를 사용하여 인증할 수 있습니다 AWS. 이 인증서를 사용하면 디바이스가 AWS IoT 및와 통신할 수 있습니다 AWS IoT Greengrass.

<a name="create-thing-certificate-intro-2"></a>이 섹션에서는 디바이스가 AWS에 연결하는 데 사용할 수 있는 인증서를 생성하고 다운로드합니다.

<a name="create-thing-certificate-intro-3"></a>하드웨어 보안 모듈(HSM)을 사용하여 프라이빗 키와 인증서를 안전하게 저장하도록 AWS IoT Greengrass 코어 소프트웨어를 구성하려면 단계에 따라 HSM의 프라이빗 키에서 인증서를 생성합니다. 그렇지 않으면 단계에 따라 AWS IoT 서비스에서 인증서와 프라이빗 키를 생성합니다. 하드웨어 보안 기능은 Linux 디바이스에서만 사용할 수 있습니다. 하드웨어 보안 및 이를 사용하는 데 필요한 요구 사항에 대한 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 섹션을 참조하세요.

### AWS IoT 서비스에서 인증서 및 프라이빗 키 생성
<a name="create-thing-certificate-cloud"></a><a name="create-thing-certificate-cloud-steps"></a>

**사물 인증서를 생성하려면**

1.  AWS IoT 사물에 대한 인증서를 다운로드할 폴더를 생성합니다.

   ```
   mkdir greengrass-v2-certs
   ```

1.  AWS IoT 사물에 대한 인증서를 생성하고 다운로드합니다.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   이후 인증서 구성에 사용할 인증서의 Amazon 리소스 이름(ARN)을 저장합니다.

### HSM의 프라이빗 키에서 인증서 생성
<a name="create-thing-certificate-hardware-security"></a>

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

**사물 인증서를 생성하려면**

1. 코어 디바이스에서 HSM의 PKCS\$111 토큰을 초기화하고, 프라이빗 키를 생성합니다. 프라이빗 키는 RSA-2048 키 크기(또는 그 이상)의 RSA 키나 ECC 키여야 합니다.
**참고**  <a name="hardware-security-module-requirements-key-notes"></a>
ECC 키와 함께 하드웨어 보안 모듈을 사용하려면 [Greengrass nucleus](greengrass-nucleus-component.md) v2.5.6 이상을 사용해야 합니다.  
하드웨어 보안 모듈 및 [보안 암호 관리자](secret-manager-component.md)를 사용하려면 RSA 키가 있는 하드웨어 보안 모듈을 사용해야 합니다.

   HSM의 설명서를 확인하여 토큰을 초기화하고 프라이빗 키를 생성하는 방법을 알아봅니다. HSM이 객체 ID를 지원하는 경우 프라이빗 키를 생성할 때 객체 ID를 지정합니다. 토큰을 초기화하고 프라이빗 키를 생성할 때 지정한 슬롯 ID, 사용자 PIN, 객체 레이블, 객체 ID(HSM에서 이를 사용하는 경우)를 저장합니다. 나중에 사물 인증서를 HSM으로 가져오고 AWS IoT Greengrass 코어 소프트웨어를 구성할 때 이러한 값을 사용합니다.

1. 프라이빗 키에서 인증서 서명 요청(CSR)을 생성합니다.는이 CSR을 AWS IoT 사용하여 HSM에서 생성한 프라이빗 키에 대한 사물 인증서를 생성합니다. 프라이빗 키에서 CSR을 생성하는 방법에 대한 자세한 내용은 HSM 설명서를 참조하세요. CSR은 `iotdevicekey.csr`과 같은 파일입니다.

1. 디바이스에서 개발 컴퓨터로 CSR을 복사합니다. 개발 컴퓨터와 디바이스에서 SSH 및 SCP가 활성화된 경우 개발 컴퓨터에서 `scp` 명령을 사용하여 CSR을 전송할 수 있습니다. *device-ip-address*를 디바이스의 IP 주소로 바꾸고, *\$1/iotdevicekey.csr*을 디바이스의 CSR 파일 경로로 바꿉니다.

   ```
   scp device-ip-address:~/iotdevicekey.csr iotdevicekey.csr
   ```

1. 개발 컴퓨터에서 AWS IoT 사물에 대한 인증서를 다운로드할 폴더를 생성합니다.

   ```
   mkdir greengrass-v2-certs
   ```

1. CSR 파일을 사용하여 AWS IoT 사물에 대한 인증서를 생성하고 개발 컴퓨터에 다운로드합니다.

   ```
   aws iot create-certificate-from-csr --set-as-active --certificate-signing-request=file://iotdevicekey.csr --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

   이후 인증서 구성에 사용할 인증서의 ARN을 저장합니다.

## 사물 인증서 구성
<a name="configure-thing-certificate"></a>

사물 인증서를 이전에 생성한 AWS IoT 사물에 연결하고 인증서에 정책을 추가하여 AWS IoT 코어 디바이스에 대한 AWS IoT 권한을 정의합니다.

**사물의 인증서를 구성하려면**

1. 인증서를 AWS IoT 사물에 연결합니다.
   + *MyGreengrassCore*를 AWS IoT 사물의 이름으로 바꿉니다.
   + 인증서 Amazon 리소스 이름(ARN)을 이전 단계에서 생성한 인증서의 ARN으로 바꿉니다.

   ```
   aws iot attach-thing-principal --thing-name MyGreengrassCore --principal arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
   ```

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

1. Greengrass 코어 디바이스에 대한 AWS IoT 권한을 정의하는 AWS IoT 정책을 생성하고 연결합니다. 다음 정책은 모든 MQTT 주제 및 Greengrass 작업에 대한 액세스를 허용하므로 디바이스에서 사용자 지정 애플리케이션 및 새로운 Greengrass 작업이 필요한 향후 변경 사항과 호환됩니다. 사용 사례를 기반으로 이 정책을 제한할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass V2 코어 디바이스에 대한 최소 AWS IoT 정책](device-auth.md#greengrass-core-minimal-iot-policy) 단원을 참조하십시오.

   이전에 Greengrass 코어 디바이스를 설정한 경우 새 디바이스를 생성하는 대신 해당 AWS IoT 정책을 연결할 수 있습니다.

   해결 방법:

   1. Greengrass 코어 디바이스에 필요한 AWS IoT 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano greengrass-v2-iot-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "iot:Publish",
              "iot:Subscribe",
              "iot:Receive",
              "iot:Connect",
              "greengrass:*"
            ],
            "Resource": [
              "*"
            ]
          }
        ]
      }
      ```

   1.  AWS IoT 정책 문서에서 정책을 생성합니다.
      + *GreengrassV2IoTThingPolicy*를 생성할 정책의 이름으로 바꿉니다.

      ```
      aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "policyName": "GreengrassV2IoTThingPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
        "policyDocument": "{
          \\"Version\\": \\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": [
                \\"iot:Publish\\",
                \\"iot:Subscribe\\",
                \\"iot:Receive\\",
                \\"iot:Connect\\",
                \\"greengrass:*\\"
              ],
              \\"Resource\\": [
                \\"*\\"
              ]
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1.  AWS IoT 사물의 인증서에 AWS IoT 정책을 연결합니다.
      + *GreengrassV2IoTThingPolicy*를 연결할 정책의 이름으로 바꿉니다.
      + 대상 ARN을 AWS IoT 사물 인증서의 ARN으로 바꿉니다.

      ```
      aws iot attach-policy --policy-name GreengrassV2IoTThingPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

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

## 토큰 교환 역할 생성
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass 코어 디바이스는 *토큰 교환* 역할이라는 IAM 서비스 역할을 사용하여 AWS 서비스에 대한 호출을 승인합니다. 디바이스는 자격 AWS IoT 증명 공급자를 사용하여이 역할에 대한 임시 AWS 자격 증명을 가져오므로 디바이스가 상호 작용하고 AWS IoT, Amazon CloudWatch Logs로 로그를 전송하고, Amazon S3에서 사용자 지정 구성 요소 아티팩트를 다운로드할 수 있습니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.

<a name="installation-create-token-exchange-role-alias-intro"></a> AWS IoT *Anrole 별칭을* 사용하여 Greengrass 코어 디바이스에 대한 토큰 교환 역할을 구성합니다. 역할 별칭을 사용하면 디바이스의 토큰 교환 역할을 변경할 수 있지만 디바이스 구성은 동일하게 유지할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS 서비스 직접 호출에 대한 권한 부여](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)를 참조하세요.

이 섹션에서는 토큰 교환 IAM 역할과 AWS IoT 역할을 가리키는 역할 별칭을 생성합니다. 이미 Greengrass 코어 디바이스를 설정한 경우 새 디바이스를 생성하는 대신 토큰 교환 역할 및 역할 별칭을 사용할 수 있습니다. 그런 다음 해당 역할과 별칭을 사용하도록 디바이스의 AWS IoT 사물을 구성합니다.

**토큰 교환 IAM 역할을 생성하려면**

1. <a name="create-token-exchange-role-create-iam-role"></a>디바이스가 토큰 교환 역할로 사용할 수 있는 IAM 역할을 생성합니다. 해결 방법:

   1. 토큰 교환 역할에 필요한 신뢰 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano device-role-trust-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 신뢰 정책 문서를 사용하여 토큰 교환 역할을 생성합니다.
      + *GreengrassV2TokenExchangeRole*을 생성할 IAM 역할의 이름으로 바꿉니다.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. 토큰 교환 역할에 필요한 액세스 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano device-role-access-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**참고**  
이 액세스 정책은 S3 버킷의 구성 요소 아티팩트에 대한 액세스를 허용하지 않습니다. Amazon S3에서 아티팩트를 정의하는 사용자 지정 구성 요소를 배포하려면 코어 디바이스가 구성 요소 아티팩트를 검색할 수 있도록 역할에 권한을 추가해야 합니다. 자세한 내용은 [구성 요소 아티팩트에 대한 S3 버킷 액세스 허용](device-service-role.md#device-service-role-access-s3-bucket) 단원을 참조하십시오.  
구성 요소 아티팩트에 대한 S3 버킷이 아직 없는 경우 버킷을 생성한 후 권한을 추가할 수 있습니다.

   1. 정책 문서에서 IAM 정책을 생성합니다.
      + *GreengrassV2TokenExchangeRoleAccess*를 생성할 IAM 정책의 이름으로 바꿉니다.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. IAM 정책을 토큰 교환 역할에 연결합니다.
      + *GreengrassV2TokenExchangeRole*을 IAM 역할의 이름으로 바꿉니다.
      + 정책 ARN을 이전 단계에서 생성한 IAM 정책의 ARN으로 변경합니다.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

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

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>토큰 교환 AWS IoT 역할을 가리키는 역할 별칭을 생성합니다.
   + *GreengrassCoreTokenExchangeRoleAlias*를 생성할 역할 별칭의 이름으로 바꿉니다.
   + 역할 ARN을 이전 단계에서 생성한 IAM 역할의 ARN으로 변경합니다.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**참고**  
역할 별칭을 생성하려면 토큰 교환 IAM 역할을 AWS IoT에 전달할 권한이 있어야 합니다. 역할 별칭을 생성하려고 할 때 오류 메시지가 표시되면 AWS 사용자에게이 권한이 있는지 확인합니다. 자세한 내용은 사용 *AWS Identity and Access Management 설명서*의 [AWS 서비스에 역할을 전달할 수 있는 사용자 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

1. Greengrass 코어 디바이스가 역할 별칭을 사용하여 토큰 교환 역할을 수임하도록 허용하는 AWS IoT 정책을 생성하고 연결합니다. 이전에 Greengrass 코어 디바이스를 설정한 경우 새 디바이스를 생성하는 대신 역할 별칭 AWS IoT 정책을 연결할 수 있습니다. 해결 방법:

   1. (선택 사항) 역할 별칭에 필요한 AWS IoT 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      다음 JSON을 파일로 복사합니다.
      + 리소스 ARN을 역할 별칭의 ARN으로 바꿉니다.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1.  AWS IoT 정책 문서에서 정책을 생성합니다.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*를 생성할 AWS IoT 정책의 이름으로 바꿉니다.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1.  AWS IoT 사물의 인증서에 AWS IoT 정책을 연결합니다.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*를 역할 별칭 AWS IoT 정책의 이름으로 바꿉니다.
      + 대상 ARN을 AWS IoT 사물 인증서의 ARN으로 바꿉니다.

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

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

## 디바이스에 인증서 다운로드
<a name="download-thing-certificates"></a>

앞서 디바이스의 인증서를 개발 컴퓨터에 다운로드했습니다. 이 섹션에서는 인증서를 코어 디바이스에 복사하여 AWS IoT에 연결하는 데 사용하는 인증서로 디바이스를 설정합니다. Amazon 루트 CA(인증 기관) 인증서도 다운로드합니다. HSM을 사용하는 경우 이 섹션의 HSM으로 인증서 파일도 가져옵니다.
+ 이전에 AWS IoT 서비스에서 사물 인증서와 프라이빗 키를 생성한 경우 단계에 따라 프라이빗 키와 인증서 파일이 있는 인증서를 다운로드합니다.
+ 먼저 HSM(하드웨어 보안 모듈)의 프라이빗 키에서 사물 인증서를 생성한 경우 단계에 따라 프라이빗 키와 HSM의 인증서가 포함된 인증서를 다운로드합니다.

### 프라이빗 키 및 인증서 파일이 포함된 인증서 다운로드
<a name="download-thing-certificates-without-hardware-security"></a>

**디바이스에 인증서를 다운로드하려면**

1. <a name="installation-copy-thing-certificate-to-device"></a>개발 컴퓨터에서 디바이스로 AWS IoT 사물 인증서를 복사합니다. 개발 컴퓨터와 디바이스에서 SSH 및 SCP가 활성화된 경우 개발 컴퓨터에서 `scp` 명령을 사용하여 인증서를 전송할 수 있습니다. *device-ip-address*를 디바이스의 IP 주소로 바꿉니다.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>디바이스에 Greengrass 루트 폴더를 생성합니다. 나중에이 폴더에 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.
**참고**  
Windows의 경우 260자의 경로 길이 제한이 있습니다. Windows를 사용하는 경우 루트 폴더(예: `C:\greengrass\v2` 또는 `D:\greengrass\v2`)를 사용하여 Greengrass 구성 요소 경로를 260자 제한 미만으로 유지합니다.

------
#### [ Linux or Unix ]
   + `/greengrass/v2`를 사용할 폴더로 바꿉니다.

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>(Linux만 해당) Greengrass 루트 폴더의 상위 권한을 설정합니다.
   + */greengrass*를 루트 폴더의 상위로 바꿉니다.

   ```
   sudo chmod 755 /greengrass
   ```

1.  AWS IoT 사물 인증서를 Greengrass 루트 폴더에 복사합니다.

------
#### [ Linux or Unix ]
   + `/greengrass/v2`를 Greengrass 루트 폴더로 바꿉니다.

   ```
   sudo cp -R ~/greengrass-v2-certs/* /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   robocopy %USERPROFILE%\greengrass-v2-certs C:\greengrass\v2 /E
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   cp -Path ~\greengrass-v2-certs\* -Destination C:\greengrass\v2
   ```

------

1. <a name="installation-download-root-ca-certificate"></a>Amazon 루트 인증 기관(CA) 인증서를 다운로드합니다. AWS IoT 인증서는 기본적으로 Amazon의 루트 CA 인증서와 연결됩니다.

------
#### [ Linux or Unix ]

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

### HSM에서 프라이빗 키 및 인증서 파일이 포함된 인증서 다운로드
<a name="download-thing-certificates-with-hardware-security"></a>

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

**디바이스에 인증서를 다운로드하려면**

1. <a name="installation-copy-thing-certificate-to-device"></a>개발 컴퓨터에서 디바이스로 AWS IoT 사물 인증서를 복사합니다. 개발 컴퓨터와 디바이스에서 SSH 및 SCP가 활성화된 경우 개발 컴퓨터에서 `scp` 명령을 사용하여 인증서를 전송할 수 있습니다. *device-ip-address*를 디바이스의 IP 주소로 바꿉니다.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>디바이스에 Greengrass 루트 폴더를 생성합니다. 나중에이 폴더에 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.
**참고**  
Windows의 경우 260자의 경로 길이 제한이 있습니다. Windows를 사용하는 경우 루트 폴더(예: `C:\greengrass\v2` 또는 `D:\greengrass\v2`)를 사용하여 Greengrass 구성 요소 경로를 260자 제한 미만으로 유지합니다.

------
#### [ Linux or Unix ]
   + `/greengrass/v2`를 사용할 폴더로 바꿉니다.

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>(Linux만 해당) Greengrass 루트 폴더의 상위 권한을 설정합니다.
   + */greengrass*를 루트 폴더의 상위로 바꿉니다.

   ```
   sudo chmod 755 /greengrass
   ```

1. 사물 인증서 파일인 `~/greengrass-v2-certs/device.pem.crt`를 HSM으로 가져옵니다. 인증서를 가져오는 방법을 알아보려면 HSM 설명서를 확인하세요. 이전에 HSM에서 프라이빗 키를 생성한 것과 동일한 토큰, 슬롯 ID, 사용자 PIN, 객체 레이블 및 객체 ID(HSM에서 사용하는 경우)를 사용하여 인증서를 가져옵니다.
**참고**  
앞서 객체 ID 없이 프라이빗 키를 생성했고, 인증서에 객체 ID가 있는 경우 프라이빗 키의 객체 ID를 인증서와 동일한 값으로 설정합니다. 프라이빗 키 객체의 객체 ID를 설정하는 방법을 알아보려면 HSM의 설명서를 확인하세요.

1. (선택 사항) HSM에만 존재하도록 사물 인증서 파일을 삭제합니다.

   ```
   rm ~/greengrass-v2-certs/device.pem.crt
   ```

1. <a name="installation-download-root-ca-certificate"></a>Amazon 루트 인증 기관(CA) 인증서를 다운로드합니다. AWS IoT 인증서는 기본적으로 Amazon의 루트 CA 인증서와 연결됩니다.

------
#### [ Linux or Unix ]

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

## 디바이스 환경 설정
<a name="set-up-device-environment"></a>

이 섹션의 단계에 따라 AWS IoT Greengrass 코어 디바이스로 사용할 Linux 또는 Windows 디바이스를 설정합니다.

### Linux 디바이스 설정
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**용 Linux 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다. 다음 명령은 디바이스에 OpenJDK를 설치하는 방법을 보여줍니다.
   + Debian 기반 또는 Ubuntu 기반 배포판의 경우:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat 기반 배포판의 경우:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 대상 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + Amazon Linux 2023의 경우:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   설치가 완료되면 다음 명령을 실행하여 Linux 디바이스에서 Java가 실행되는지 확인합니다.

   ```
   java -version
   ```

   디바이스에서 실행되는 Java 버전이 명령을 통해 인쇄됩니다. 예를 들어 Debian 기반 배포의 경우 출력이 다음 샘플과 유사할 수 있습니다.

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (선택 사항) 디바이스에서 구성 요소를 실행하는 기본 시스템 사용자와 그룹을 생성합니다. 설치 관리자 인수를 사용하여 설치하는 동안 AWS IoT Greengrass 코어 소프트웨어 `--component-default-user` 설치 관리자가이 사용자 및 그룹을 생성하도록 선택할 수도 있습니다. 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 단원을 참조하십시오.

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass 코어 소프트웨어(일반적으로 `root`)를 실행하는 사용자에게 모든 사용자 및 모든 그룹에서를 실행할 수 `sudo` 있는 권한이 있는지 확인합니다.

   1. 다음 명령을 실행하여 `/etc/sudoers` 파일을 엽니다.

      ```
      sudo visudo
      ```

   1. 사용자에 대한 권한이 다음 예제와 같은지 확인합니다.

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (선택 사항) [컨테이너화된 Lambda 함수를 실행](run-lambda-functions.md)하려면 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1을 활성화하고 *memory* 및 *devices* cgroups를 활성화하고 탑재해야 합니다. 컨테이너화된 Lambda 함수를 실행할 계획이 없는 경우 이 단계를 건너뛸 수 있습니다.

   이러한 cgroups 옵션을 활성화하려면 다음 Linux 커널 파라미터로 디바이스를 부팅합니다.

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   디바이스의 커널 파라미터를 보고 설정하는 방법에 대한 자세한 내용은 운영 체제 및 부트 로더 설명서를 참조하세요. 지침에 따라 커널 파라미터를 영구적으로 설정합니다.

1. [디바이스 요구 사항](greengrass-nucleus-component.md#greengrass-v2-requirements)의 요구 사항 목록에 따라 디바이스에 기타 모든 필수 종속성을 설치합니다.

### Windows 디바이스 설정
<a name="set-up-windows-device-environment"></a>

**참고**  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.5.0 이상에서 사용할 수 있습니다.<a name="set-up-windows-device-environment-procedure"></a>

**용 Windows 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다.

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 시스템 변수에서 Java를 사용할 수 있는지 확인하고 사용할 수 없는 경우 추가합니다. LocalSystem 계정은 AWS IoT Greengrass 코어 소프트웨어를 실행하므로 사용자의 PATH 사용자 변수 대신 PATH 시스템 변수에 Java를 추가해야 합니다. 해결 방법:

   1. Windows 키를 눌러 시작 메뉴를 엽니다.

   1. 시작 메뉴에서 **environment variables**를 입력하여 시스템 옵션을 검색합니다.

   1. 시작 메뉴 검색 결과에서 **시스템 환경 변수 편집**을 선택하여 **시스템 속성** 창을 엽니다.

   1. **환경 변수...**를 선택하여 **환경 변수** 창을 엽니다.

   1. **시스템 변수**에서 **경로**를 선택하고 **편집**을 선택합니다. **환경 변수 편집** 창에서 각 경로를 별도의 줄로 볼 수 있습니다.

   1. Java 설치 `bin` 폴더의 경로가 있는지 확인합니다. 경로는 다음 예제와 유사할 수 있습니다.

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **경로**에서 Java 설치 `bin` 폴더가 누락된 경우 **새로 만들기**를 선택하여 추가한 다음 **확인**을 선택합니다.

1. <a name="set-up-windows-device-environment-open-cmd"></a>관리자 권한으로 Windows 명령 프롬프트(`cmd.exe`)를 엽니다.

1. <a name="set-up-windows-device-environment-create"></a>Windows 디바이스의 LocalSystem 계정에 기본 사용자를 생성합니다. *암호*를 안전한 암호로 바꿉니다.

   ```
   net user /add ggc_user password
   ```
**작은 정보**  <a name="windows-password-expiration-tip"></a>
Windows 구성에 따라 사용자의 암호가 미래의 날짜에 만료되도록 설정할 수 있습니다. Greengrass 애플리케이션이 계속 작동하도록 하려면 암호가 만료되는 시기를 추적하고 만료되기 전에 이를 업데이트합니다. 사용자의 암호가 만료되지 않도록 설정할 수도 있습니다.  
사용자와 암호가 만료되는 시기를 확인하려면 다음 명령을 실행합니다.  

     ```
     net user ggc_user | findstr /C:expires
     ```
사용자의 암호가 만료되지 않도록 설정하려면 다음 명령을 실행합니다.  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` 명령이 더는 사용되지 않는](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 이상을 사용하는 경우 다음 PowerShell 명령을 실행합니다.  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>Microsoft에서 [PsExec 유틸리티](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)를 다운로드하여 디바이스에 설치합니다.

1. <a name="set-up-windows-device-credentials"></a>PsExec 유틸리티를 사용하여 기본 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장합니다. 이전에 설정한 사용자의 암호로 *암호*를 바꿉니다.

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement**가 열리면 **Accept**를 선택하여 라이선스에 동의하고 명령을 실행합니다.
**참고**  
Windows 디바이스에서 LocalSystem 계정은 Greengrass nucleus를 실행하고 PsExec 유틸리티를 사용하여 기본 사용자 정보를 LocalSystem 계정에 저장해야 합니다. Credential Manager 애플리케이션을 사용하면 이 정보가 LocalSystem 계정 대신 현재 로그인한 사용자의 Windows 계정에 저장됩니다.

## AWS IoT Greengrass 코어 소프트웨어 다운로드
<a name="download-greengrass-core-v2"></a>

다음 위치에서 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다.
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**참고**  
다음 위치에서 특정 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다. 다운로드할 버전으로 *version*을 바꿉니다.  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass 코어 소프트웨어를 다운로드하려면**

1. <a name="installation-download-ggc-software-step"></a>코어 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 라는 파일에 다운로드합니다`greengrass-nucleus-latest.zip`.

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>이 소프트웨어를 다운로드하면 [ Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 동의하는 것입니다.

1. <a name="verify-gg-nucleus-signature"></a>(선택 사항) Greengrass nucleus 소프트웨어 서명을 확인하려면
**참고**  
이 기능은 Greengrass nucleus 버전 2.9.5 이상에서 사용할 수 있습니다.

   1. 다음 명령을 사용하여 Greengrass nucleus 아티팩트의 서명을 확인합니다.

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 간접 호출 시 확인 결과를 나타내는 출력이 생성됩니다.

      1. Greengrass nucleus zip 파일이 서명되면 출력에 다음 문이 포함됩니다.

         ```
         jar verified.
         ```

      1. Greengrass nucleus zip 파일이 서명되지 않으면 출력에 다음 문이 포함됩니다.

         ```
         jar is unsigned.
         ```

   1. `-verify` 및 `-certs` 옵션과 함께 Jarsigner `-verbose` 옵션을 제공한 경우 출력에는 자세한 서명자 인증서 정보도 포함됩니다.

1. <a name="installation-unzip-ggc-software-step"></a>디바이스의 폴더에 AWS IoT Greengrass 코어 소프트웨어의 압축을 풉니다. *GreengrassInstaller*를 사용하려는 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (선택 사항) 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**중요**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 이전 버전의 Greengrass nucleus를 설치하는 경우 AWS IoT Greengrass 코어 소프트웨어를 설치한 후에는이 폴더를 제거하지 마십시오. AWS IoT Greengrass 코어 소프트웨어는이 폴더의 파일을 사용하여 실행합니다.  
최신 버전의 소프트웨어를 다운로드한 경우 v2.4.0 이상을 설치하고 AWS IoT Greengrass 코어 소프트웨어를 설치한 후이 폴더를 제거할 수 있습니다.

## AWS IoT Greengrass 코어 소프트웨어 설치
<a name="run-greengrass-core-v2-installer-manual"></a>

다음 작업을 지정하는 인수를 사용하여 설치 관리자를 실행합니다.
+ 이전에 생성한 AWS 리소스와 인증서를 사용하도록 지정하는 부분 구성 파일에서를 설치합니다. AWS IoT Greengrass 코어 소프트웨어는 디바이스의 모든 Greengrass 구성 요소의 구성을 지정하는 구성 파일을 사용합니다. 설치 관리자는 제공된 부분 구성 파일에서 전체 구성 파일을 생성합니다.
+ <a name="install-argument-component-default-user"></a>코어 디바이스에서 소프트웨어 구성 요소를 실행하는 데 `ggc_user` 시스템 사용자가 사용되도록 지정합니다. Linux 디바이스에서 이 명령은 `ggc_group` 시스템 그룹을 사용하도록 지정하고 설치 관리자가 시스템 사용자와 그룹을 생성합니다.
+ <a name="install-argument-system-service"></a> AWS IoT Greengrass 코어 소프트웨어를 부팅 시 실행되는 시스템 서비스로 설정합니다. Linux 디바이스에서는 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 시스템이 필요합니다.
**중요**  <a name="windows-system-service-requirement-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.

지정할 수 있는 인수에 대한 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 섹션을 참조하세요.

**참고**  
<a name="jvm-tuning-note"></a>메모리가 제한된 디바이스 AWS IoT Greengrass 에서를 실행하는 경우 AWS IoT Greengrass 코어 소프트웨어에서 사용하는 메모리 양을 제어할 수 있습니다. 메모리 할당을 제어하기 위해 nucleus 구성 요소의 `jvmOptions` 구성 파라미터에서 JVM 힙 크기 옵션을 설정할 수 있습니다. 자세한 내용은 [JVM 옵션으로 메모리 할당 제어](configure-greengrass-core-v2.md#jvm-tuning) 단원을 참조하십시오.
+ 이전에 AWS IoT 서비스에서 사물 인증서와 프라이빗 키를 생성한 경우 단계에 따라 프라이빗 키와 인증서 파일이 있는 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.
+ 이전에 하드웨어 보안 모듈(HSM)의 프라이빗 키에서 사물 인증서를 생성한 경우 단계에 따라 프라이빗 키와 인증서가 있는 AWS IoT Greengrass 코어 소프트웨어를 HSM에 설치합니다.

### 프라이빗 키 및 인증서 파일을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치
<a name="manual-installation-without-hardware-security"></a>

**AWS IoT Greengrass 코어 소프트웨어를 설치하려면**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.
   + *GreengrassInstaller*를 소프트웨어가 포함된 폴더의 경로로 바꿉니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 텍스트 편집기를 사용하여 `config.yaml` 구성 파일을 생성하고 설치 관리자에 제공합니다.

   <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

   ```
   nano GreengrassInstaller/config.yaml
   ```

   다음 YAML 내용을 파일에 복사합니다. 이 부분 구성 파일은 시스템 파라미터와 Greengrass nucleus 파라미터를 지정합니다.

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   ```

   뒤이어 다음과 같이 하세요.
   + `/greengrass/v2`의 각 인스턴스를 Greengrass 루트 폴더로 바꿉니다.
   + *MyGreengrassCore*를 AWS IoT 사물의 이름으로 바꿉니다.
   + *2.17.0*을 AWS IoT Greengrass 코어 소프트웨어 버전으로 바꿉니다.
   + *us-west-2*를 리소스를 생성한 AWS 리전 로 바꿉니다.
   + *GreengrassCoreTokenExchangeRoleAlias*를 토큰 교환 역할 별칭의 이름으로 바꿉니다.
   + 를 AWS IoT 데이터 엔드포인트`iotDataEndpoint`로 바꿉니다.
   + 를 AWS IoT 자격 증명 엔드포인트`iotCredEndpoint`로 바꿉니다.
**참고**  
이 구성 파일에서는 다음 예제와 같이 사용할 포트 및 네트워크 프록시와 같은 다른 nucleus 구성 옵션을 사용자 지정할 수 있습니다. 자세한 내용은 [Greengrass nucleus 구성](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)을 참조하세요.  

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "https://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
   ```

1. 설치 관리자를 실행하고, `--init-config`를 지정하여 구성 파일을 제공합니다.
   + `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 Greengrass 루트 폴더로 바꿉니다.
   + *GreengrassInstaller*의 각 인스턴스를 설치 관리자를 압축 해제한 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**중요**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정`--setup-system-service true`하도록를 지정해야 합니다.

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true`를 지정하면 설치 관리자는 소프트웨어를 시스템 서비스로 설정하고 실행한 경우 `Successfully set up Nucleus as a system service`를 출력합니다. 그렇지 않은 경우 소프트웨어가 성공적으로 설치되면 설치 관리자에서 메시지가 출력되지 않습니다.
**참고**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 인수 없이 설치 관리자를 실행할 때는 `deploy-dev-tools` 인수를 사용하여 로컬 개발 도구를 배포할 수 없습니다. Greengrass CLI를 디바이스에 직접 배포하는 방법에 대한 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 섹션을 참조하세요.

1. <a name="installer-verify-installation"></a>루트 폴더의 파일을 확인하여 설치를 확인합니다.

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   설치에 성공하면 루트 폴더에 `config`, `packages` 및 `logs`와 같은 여러 폴더가 포함됩니다.

### HSM에서 프라이빗 키와 인증서를 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치
<a name="manual-installation-with-hardware-security"></a>

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

**AWS IoT Greengrass 코어 소프트웨어를 설치하려면**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.
   + *GreengrassInstaller*를 소프트웨어가 포함된 폴더의 경로로 바꿉니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1.  AWS IoT Greengrass 코어 소프트웨어가 HSM에서 프라이빗 키와 인증서를 사용하도록 하려면 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 [PKCS\$111 공급자 구성 요소를](pkcs11-provider-component.md) 설치합니다. PKCS\$111 공급자 구성 요소는 설치 도중 구성할 수 있는 플러그인입니다. 다음 위치에서 PKCS\$111 공급자 구성 요소의 최신 버전을 다운로드할 수 있습니다.
   + [https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar)

   PKCS\$111 공급자 플러그인을 `aws.greengrass.crypto.Pkcs11Provider.jar`이라는 파일에 다운로드합니다. *GreengrassInstaller*를 사용하려는 폴더로 바꿉니다.

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar > GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar
   ```

   <a name="core-software-license"></a>이 소프트웨어를 다운로드하면 [ Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 동의하는 것입니다.

1. 텍스트 편집기를 사용하여 `config.yaml` 구성 파일을 생성하고 설치 관리자에 제공합니다.

   <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

   ```
   nano GreengrassInstaller/config.yaml
   ```

   다음 YAML 내용을 파일에 복사합니다. 이 부분 구성 파일은 시스템 파라미터, Greengrass nucleus 파라미터 및 PKCS\$111 공급자 파라미터를 지정합니다.

   ```
   ---
   system:
     certificateFilePath: "pkcs11:object=iotdevicekey;type=cert"
     privateKeyPath: "pkcs11:object=iotdevicekey;type=private"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
     aws.greengrass.crypto.Pkcs11Provider:
       configuration:
         name: "softhsm_pkcs11"
         library: "/usr/local/Cellar/softhsm/2.6.1/lib/softhsm/libsofthsm2.so"
         slot: 1
         userPin: "1234"
   ```

   뒤이어 다음과 같이 하세요.
   + PKCS\$111 URI의 각 *iotdevicekey* 인스턴스를 프라이빗 키를 생성하고 인증서를 가져온 객체 레이블로 바꿉니다.
   + `/greengrass/v2`의 각 인스턴스를 Greengrass 루트 폴더로 바꿉니다.
   + *MyGreengrassCore*를 AWS IoT 사물의 이름으로 바꿉니다.
   + *2.17.0*을 AWS IoT Greengrass 코어 소프트웨어 버전으로 바꿉니다.
   + *us-west-2*를 리소스를 생성한 AWS 리전 로 바꿉니다.
   + *GreengrassCoreTokenExchangeRoleAlias*를 토큰 교환 역할 별칭의 이름으로 바꿉니다.
   + 를 AWS IoT 데이터 엔드포인트`iotDataEndpoint`로 바꿉니다.
   + 를 AWS IoT 자격 증명 엔드포인트`iotCredEndpoint`로 바꿉니다.
   + `aws.greengrass.crypto.Pkcs11Provider` 구성 요소의 구성 파라미터를 코어 디바이스의 HSM 구성 값으로 바꿉니다.
**참고**  
이 구성 파일에서는 다음 예제와 같이 사용할 포트 및 네트워크 프록시와 같은 다른 nucleus 구성 옵션을 사용자 지정할 수 있습니다. 자세한 내용은 [Greengrass nucleus 구성](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)을 참조하세요.  

   ```
   ---
   system:
     certificateFilePath: "pkcs11:object=iotdevicekey;type=cert"
     privateKeyPath: "pkcs11:object=iotdevicekey;type=private"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "https://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
     aws.greengrass.crypto.Pkcs11Provider:
       configuration:
         name: "softhsm_pkcs11"
         library: "/usr/local/Cellar/softhsm/2.6.1/lib/softhsm/libsofthsm2.so"
         slot: 1
         userPin: "1234"
   ```

1. 설치 관리자를 실행하고, `--init-config`를 지정하여 구성 파일을 제공합니다.
   + `/greengrass/v2`를 Greengrass 루트 폴더로 바꿉니다.
   + *GreengrassInstaller*의 각 인스턴스를 설치 관리자를 압축 해제한 폴더로 바꿉니다.

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```
**중요**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정`--setup-system-service true`하도록를 지정해야 합니다.

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true`를 지정하면 설치 관리자는 소프트웨어를 시스템 서비스로 설정하고 실행한 경우 `Successfully set up Nucleus as a system service`를 출력합니다. 그렇지 않은 경우 소프트웨어가 성공적으로 설치되면 설치 관리자에서 메시지가 출력되지 않습니다.
**참고**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 인수 없이 설치 관리자를 실행할 때는 `deploy-dev-tools` 인수를 사용하여 로컬 개발 도구를 배포할 수 없습니다. Greengrass CLI를 디바이스에 직접 배포하는 방법에 대한 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 섹션을 참조하세요.

1. <a name="installer-verify-installation"></a>루트 폴더의 파일을 확인하여 설치를 확인합니다.

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   설치에 성공하면 루트 폴더에 `config`, `packages` 및 `logs`와 같은 여러 폴더가 포함됩니다.

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설치한 경우 설치 관리자가 소프트웨어를 실행합니다. 그렇지 않으면 소프트웨어를 수동으로 실행해야 합니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 실행](run-greengrass-core-v2.md) 단원을 참조하십시오.

**참고**  <a name="install-greengrass-core-recognized-note"></a>
<a name="install-greengrass-core-recognized-para"></a> AWS IoT Greengrass 코어 소프트웨어가 클라우드에 연결되면 디바이스가 코어 디바이스로 인식됩니다.

<a name="install-greengrass-core-next-steps-intro"></a>소프트웨어를 구성하고 사용하는 방법에 대한 자세한 내용은 다음을 AWS IoT Greengrass참조하세요.<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass 구성 요소 개발](develop-greengrass-components.md)
+ [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md)
+ [Greengrass 명령줄 인터페이스](gg-cli.md)

# AWS IoT 플릿 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치
<a name="fleet-provisioning"></a>

이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) v2.4.0 이상에서 사용할 수 있습니다.

 AWS IoT 플릿 프로비저닝을 사용하면에 처음 연결할 때 X.509 디바이스 인증서와 프라이빗 키를 생성하고 디바이스 AWS IoT 에 안전하게 전송 AWS IoT 하도록를 구성할 수 있습니다.는 Amazon Root 인증 기관(CA)에서 서명한 클라이언트 인증서를 AWS IoT 제공합니다. 플릿 프로비저닝으로 프로비저닝하는 Greengrass 코어 디바이스에 대한 사물 그룹, 사물 유형 및 권한을 지정 AWS IoT 하도록를 구성할 수도 있습니다. *프로비저닝 템플릿을 정의*하여가 각 디바이스를 AWS IoT 프로비저닝하는 방법을 정의합니다. 프로비저닝 템플릿은 프로비저닝 시 디바이스에 대해 생성할 사물, 정책 및 인증서 리소스를 지정합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [프로비저닝 템플릿](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)을 참조하세요.

AWS IoT Greengrass 는 AWS IoT 플릿 프로비저닝으로 생성된 AWS 리소스를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 설치하는 데 사용할 수 있는 AWS IoT 플릿 프로비저닝 플러그인을 제공합니다. 플릿 프로비저닝 플러그인은 *클레임에 의한 프로비저닝*을 사용합니다. 디바이스는 프로비저닝 클레임 인증서와 프라이빗 키를 사용하여 일반 작업에 사용할 수 있는 고유한 X.509 디바이스 인증서와 프라이빗 키를 획득합니다. 제조 중에 클레임 인증서와 프라이빗 키를 각 디바이스에 내장할 수 있으므로 고객은 나중에 온라인 상태가 되면 각 디바이스를 활성화할 수 있습니다. 여러 디바이스에 동일한 클레임 인증서와 프라이빗 키를 사용할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [클레임에 의한 프로비저닝](https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#claim-based)을 참조하세요.

**참고**  
[Greengrass nucleus](greengrass-nucleus-component.md)용 플릿 프로비저닝 플러그인은 현재 프라이빗 키 및 인증서 파일을 하드웨어 보안 모듈(HSM)에 저장하는 기능을 지원하지 않습니다. [Greengrass nucleus](greengrass-nucleus-component.md)에서 HSM을 사용하려면 [수동 프로비저닝으로 AWS IoT Greengrass 코어 소프트웨어를 설치합니다](manual-installation.md). [Greengrass nucleus lite](greengrass-nucleus-lite-component.md) v2.5.0 이상은 기본적으로 플릿 프로비저닝이 있는 TPM을 지원합니다.

 AWS IoT 플릿 프로비저닝과 함께 AWS IoT Greengrass 코어 소프트웨어를 설치하려면가 Greengrass 코어 디바이스를 프로비저닝 AWS 계정 하는 데 AWS IoT 사용하는 리소스를에 설정해야 합니다. 이러한 리소스에는 프로비저닝 템플릿, 클레임 인증서 및 [토큰 교환 IAM 역할](device-service-role.md)이 포함됩니다. 이러한 리소스를 생성한 후 재사용하여 플릿에 여러 코어 디바이스를 프로비저닝할 수 있습니다. 자세한 내용은 [Greengrass 코어 디바이스에 대한 AWS IoT 플릿 프로비저닝 설정](fleet-provisioning-setup.md) 단원을 참조하십시오.

**중요**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass 코어 소프트웨어를 다운로드하기 전에 코어 디바이스가 AWS IoT Greengrass 코어 소프트웨어 v2.0 설치 및 실행 [요구 사항을](greengrass-nucleus-component.md#greengrass-v2-requirements) 충족하는지 확인합니다.

**Topics**
+ [사전 조건](#fleet-provisioning-prerequisites)
+ [AWS IoT 엔드포인트 검색](#retrieve-iot-endpoints)
+ [디바이스에 인증서 다운로드](#download-claim-certificates)
+ [디바이스 환경 설정](#set-up-device-environment)
+ [AWS IoT Greengrass 코어 소프트웨어 다운로드](#download-greengrass-core-v2)
+ [AWS IoT 플릿 프로비저닝 플러그인 다운로드](#download-fleet-provisioning-plugin)
+ [AWS IoT Greengrass 코어 소프트웨어 설치](#run-greengrass-core-v2-installer-fleet)
+ [Greengrass 코어 디바이스에 대한 AWS IoT 플릿 프로비저닝 설정](fleet-provisioning-setup.md)
+ [AWS IoT 플릿 프로비저닝 플러그인 구성](fleet-provisioning-configuration.md)
+ [AWS IoT 플릿 프로비저닝 플러그인 변경 로그](fleet-provisioning-changelog.md)

## 사전 조건
<a name="fleet-provisioning-prerequisites"></a>

 AWS IoT 플릿 프로비저닝과 함께 AWS IoT Greengrass 코어 소프트웨어를 설치하려면 먼저 [Greengrass 코어 디바이스에 대한 AWS IoT 플릿 프로비저닝을 설정해야](fleet-provisioning-setup.md) 합니다. 이 단계를 한 번 완료한 후 플릿 프로비저닝을 사용하여 원하는 수의 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 수 있습니다.

## AWS IoT 엔드포인트 검색
<a name="retrieve-iot-endpoints"></a>

의 AWS IoT 엔드포인트를 가져 AWS 계정와 나중에 사용할 수 있도록 저장합니다. 디바이스에서는 이러한 엔드포인트를 사용하여 AWS IoT에 연결합니다. 해결 방법:

1. 의 AWS IoT 데이터 엔드포인트를 가져옵니다 AWS 계정.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 의 AWS IoT 자격 증명 엔드포인트를 가져옵니다 AWS 계정.

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## 디바이스에 인증서 다운로드
<a name="download-claim-certificates"></a>

디바이스는 클레임 인증서와 프라이빗 키를 사용하여 AWS 리소스를 프로비저닝하고 X.509 디바이스 인증서를 획득하기 위한 요청을 인증합니다. 제조 중에 클레임 인증서와 프라이빗 키를 디바이스에 내장하거나 설치 중에 인증서와 키를 디바이스에 복사할 수 있습니다. 이 섹션에서는 클레임 인증서와 프라이빗 키를 디바이스에 복사합니다. 또한 Amazon 루트 CA(인증 기관) 인증서를 디바이스에 다운로드할 수도 있습니다.

**중요**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
프로비저닝 클레임 프라이빗 키는 Greengrass 코어 디바이스 등 어디에서든 항상 보안 유지되어야 합니다. Amazon CloudWatch 지표 및 로그를 사용하여 디바이스 프로비저닝을 위한 클레임 인증서의 무단 사용과 같은 오용 징후를 모니터링하는 것이 좋습니다. 오용이 감지되면 프로비저닝 클레임 인증서를 디바이스 프로비저닝에 사용할 수 없도록 비활성화합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS IoT모니터링](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)를 참조하세요.  
디바이스 수와에 자신을 등록하는 디바이스를 더 잘 관리할 수 있도록 AWS 계정플릿 프로비저닝 템플릿을 생성할 때 사전 프로비저닝 후크를 지정할 수 있습니다. 사전 프로비저닝 후크는 디바이스가 등록 중에 제공하는 템플릿 파라미터를 검증하는 AWS Lambda 함수입니다. 예를 들어 디바이스 ID를 데이터베이스와 비교하여 디바이스에 프로비저닝 권한이 있는지 확인하는 사전 프로비저닝 후크를 생성할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [사전 프로비저닝 후크](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)를 참조하세요.

**디바이스에 클레임 인증서 다운로드**

1. 클레임 인증서와 프라이빗 키를 디바이스에 복사합니다. 개발 컴퓨터와 디바이스에서 SSH 및 SCP가 활성화된 경우 개발 컴퓨터에서 `scp` 명령을 사용하여 클레임 인증서와 프라이빗 키를 전송할 수 있습니다. 다음 예제 명령은 개발 컴퓨터의 `claim-certs` 폴더에서 이러한 파일을 디바이스로 전송합니다. *device-ip-address*를 디바이스의 IP 주소로 바꿉니다.

   ```
   scp -r claim-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>디바이스에 Greengrass 루트 폴더를 생성합니다. 나중에이 폴더에 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.
**참고**  
Windows의 경우 260자의 경로 길이 제한이 있습니다. Windows를 사용하는 경우 루트 폴더(예: `C:\greengrass\v2` 또는 `D:\greengrass\v2`)를 사용하여 Greengrass 구성 요소 경로를 260자 제한 미만으로 유지합니다.

------
#### [ Linux or Unix ]
   + `/greengrass/v2`를 사용할 폴더로 바꿉니다.

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + *C:\$1greengrass\$1v2*를 사용할 폴더로 바꿉니다.

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>(Linux만 해당) Greengrass 루트 폴더의 상위 권한을 설정합니다.
   + */greengrass*를 루트 폴더의 상위로 바꿉니다.

   ```
   sudo chmod 755 /greengrass
   ```

1. 클레임 인증서를 Greengrass 루트 폴더로 옮깁니다.
   + `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 Greengrass 루트 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   sudo mv ~/claim-certs /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   move %USERPROFILE%\claim-certs C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   mv -Path ~\claim-certs -Destination C:\greengrass\v2
   ```

------

1. <a name="installation-download-root-ca-certificate"></a>Amazon 루트 인증 기관(CA) 인증서를 다운로드합니다. AWS IoT 인증서는 기본적으로 Amazon의 루트 CA 인증서와 연결됩니다.

------
#### [ Linux or Unix ]

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

## 디바이스 환경 설정
<a name="set-up-device-environment"></a>

이 섹션의 단계에 따라 AWS IoT Greengrass 코어 디바이스로 사용할 Linux 또는 Windows 디바이스를 설정합니다.

### Linux 디바이스 설정
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**용 Linux 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다. 다음 명령은 디바이스에 OpenJDK를 설치하는 방법을 보여줍니다.
   + Debian 기반 또는 Ubuntu 기반 배포판의 경우:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat 기반 배포판의 경우:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 대상 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + Amazon Linux 2023의 경우:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   설치가 완료되면 다음 명령을 실행하여 Linux 디바이스에서 Java가 실행되는지 확인합니다.

   ```
   java -version
   ```

   디바이스에서 실행되는 Java 버전이 명령을 통해 인쇄됩니다. 예를 들어 Debian 기반 배포의 경우 출력이 다음 샘플과 유사할 수 있습니다.

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (선택 사항) 디바이스에서 구성 요소를 실행하는 기본 시스템 사용자와 그룹을 생성합니다. 설치 관리자 인수를 사용하여 설치하는 동안 AWS IoT Greengrass 코어 소프트웨어 `--component-default-user` 설치 관리자가이 사용자와 그룹을 생성하도록 선택할 수도 있습니다. 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 단원을 참조하십시오.

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass 코어 소프트웨어(일반적으로 `root`)를 실행하는 사용자에게 모든 사용자 및 모든 그룹에서를 실행할 수 `sudo` 있는 권한이 있는지 확인합니다.

   1. 다음 명령을 실행하여 `/etc/sudoers` 파일을 엽니다.

      ```
      sudo visudo
      ```

   1. 사용자에 대한 권한이 다음 예제와 같은지 확인합니다.

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (선택 사항) [컨테이너화된 Lambda 함수를 실행](run-lambda-functions.md)하려면 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1을 활성화하고 *memory* 및 *devices* cgroups를 활성화하고 탑재해야 합니다. 컨테이너화된 Lambda 함수를 실행할 계획이 없는 경우 이 단계를 건너뛸 수 있습니다.

   이러한 cgroups 옵션을 활성화하려면 다음 Linux 커널 파라미터로 디바이스를 부팅합니다.

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   디바이스의 커널 파라미터를 보고 설정하는 방법에 대한 자세한 내용은 운영 체제 및 부트 로더 설명서를 참조하세요. 지침에 따라 커널 파라미터를 영구적으로 설정합니다.

1. [디바이스 요구 사항](greengrass-nucleus-component.md#greengrass-v2-requirements)의 요구 사항 목록에 따라 디바이스에 기타 모든 필수 종속성을 설치합니다.

### Windows 디바이스 설정
<a name="set-up-windows-device-environment"></a>

**참고**  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.5.0 이상에서 사용할 수 있습니다.<a name="set-up-windows-device-environment-procedure"></a>

**용 Windows 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다.

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 시스템 변수에서 Java를 사용할 수 있는지 확인하고 사용할 수 없는 경우 추가합니다. LocalSystem 계정은 AWS IoT Greengrass 코어 소프트웨어를 실행하므로 사용자의 PATH 사용자 변수 대신 PATH 시스템 변수에 Java를 추가해야 합니다. 해결 방법:

   1. Windows 키를 눌러 시작 메뉴를 엽니다.

   1. 시작 메뉴에서 **environment variables**를 입력하여 시스템 옵션을 검색합니다.

   1. 시작 메뉴 검색 결과에서 **시스템 환경 변수 편집**을 선택하여 **시스템 속성** 창을 엽니다.

   1. **환경 변수...**를 선택하여 **환경 변수** 창을 엽니다.

   1. **시스템 변수**에서 **경로**를 선택하고 **편집**을 선택합니다. **환경 변수 편집** 창에서 각 경로를 별도의 줄로 볼 수 있습니다.

   1. Java 설치 `bin` 폴더의 경로가 있는지 확인합니다. 경로는 다음 예제와 유사할 수 있습니다.

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **경로**에서 Java 설치 `bin` 폴더가 누락된 경우 **새로 만들기**를 선택하여 추가한 다음 **확인**을 선택합니다.

1. <a name="set-up-windows-device-environment-open-cmd"></a>관리자 권한으로 Windows 명령 프롬프트(`cmd.exe`)를 엽니다.

1. <a name="set-up-windows-device-environment-create"></a>Windows 디바이스의 LocalSystem 계정에 기본 사용자를 생성합니다. *암호*를 안전한 암호로 바꿉니다.

   ```
   net user /add ggc_user password
   ```
**작은 정보**  <a name="windows-password-expiration-tip"></a>
Windows 구성에 따라 사용자의 암호가 미래의 날짜에 만료되도록 설정할 수 있습니다. Greengrass 애플리케이션이 계속 작동하도록 하려면 암호가 만료되는 시기를 추적하고 만료되기 전에 이를 업데이트합니다. 사용자의 암호가 만료되지 않도록 설정할 수도 있습니다.  
사용자와 암호가 만료되는 시기를 확인하려면 다음 명령을 실행합니다.  

     ```
     net user ggc_user | findstr /C:expires
     ```
사용자의 암호가 만료되지 않도록 설정하려면 다음 명령을 실행합니다.  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` 명령이 더는 사용되지 않는](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 이상을 사용하는 경우 다음 PowerShell 명령을 실행합니다.  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>Microsoft에서 [PsExec 유틸리티](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)를 다운로드하여 디바이스에 설치합니다.

1. <a name="set-up-windows-device-credentials"></a>PsExec 유틸리티를 사용하여 기본 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장합니다. 이전에 설정한 사용자의 암호로 *암호*를 바꿉니다.

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement**가 열리면 **Accept**를 선택하여 라이선스에 동의하고 명령을 실행합니다.
**참고**  
Windows 디바이스에서 LocalSystem 계정은 Greengrass nucleus를 실행하고 PsExec 유틸리티를 사용하여 기본 사용자 정보를 LocalSystem 계정에 저장해야 합니다. Credential Manager 애플리케이션을 사용하면 이 정보가 LocalSystem 계정 대신 현재 로그인한 사용자의 Windows 계정에 저장됩니다.

## AWS IoT Greengrass 코어 소프트웨어 다운로드
<a name="download-greengrass-core-v2"></a>

다음 위치에서 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다.
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**참고**  
다음 위치에서 특정 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다. 다운로드할 버전으로 *version*을 바꿉니다.  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass 코어 소프트웨어를 다운로드하려면**

1. <a name="installation-download-ggc-software-step"></a>코어 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 라는 파일에 다운로드합니다`greengrass-nucleus-latest.zip`.

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>이 소프트웨어를 다운로드하면 [ Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 동의하는 것입니다.

1. <a name="verify-gg-nucleus-signature"></a>(선택 사항) Greengrass nucleus 소프트웨어 서명을 확인하려면
**참고**  
이 기능은 Greengrass nucleus 버전 2.9.5 이상에서 사용할 수 있습니다.

   1. 다음 명령을 사용하여 Greengrass nucleus 아티팩트의 서명을 확인합니다.

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 간접 호출 시 확인 결과를 나타내는 출력이 생성됩니다.

      1. Greengrass nucleus zip 파일이 서명되면 출력에 다음 문이 포함됩니다.

         ```
         jar verified.
         ```

      1. Greengrass nucleus zip 파일이 서명되지 않으면 출력에 다음 문이 포함됩니다.

         ```
         jar is unsigned.
         ```

   1. `-verify` 및 `-certs` 옵션과 함께 Jarsigner `-verbose` 옵션을 제공한 경우 출력에는 자세한 서명자 인증서 정보도 포함됩니다.

1. <a name="installation-unzip-ggc-software-step"></a> AWS IoT Greengrass 코어 소프트웨어의 압축을 디바이스의 폴더에 풉니다. *GreengrassInstaller*를 사용하려는 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (선택 사항) 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**중요**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 이전 버전의 Greengrass nucleus를 설치하는 경우 AWS IoT Greengrass 코어 소프트웨어를 설치한 후에는이 폴더를 제거하지 마십시오. AWS IoT Greengrass 코어 소프트웨어는이 폴더의 파일을 사용하여 실행합니다.  
최신 버전의 소프트웨어를 다운로드한 경우 v2.4.0 이상을 설치하고 AWS IoT Greengrass 코어 소프트웨어를 설치한 후이 폴더를 제거할 수 있습니다.

## AWS IoT 플릿 프로비저닝 플러그인 다운로드
<a name="download-fleet-provisioning-plugin"></a>

다음 위치에서 최신 버전의 AWS IoT 플릿 프로비저닝 플러그인을 다운로드할 수 있습니다.
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar)

**참고**  
다음 위치에서 특정 버전의 AWS IoT 플릿 프로비저닝 플러그인을 다운로드할 수 있습니다. *version*을 다운로드할 버전으로 바꿉니다. 플릿 프로비저닝 플러그인의 각 버전에 대한 자세한 내용은 [AWS IoT 플릿 프로비저닝 플러그인 변경 로그](fleet-provisioning-changelog.md) 섹션을 참조하세요.  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-version.jar
```

플릿 프로비저닝 플러그인은 오픈 소스입니다. 소스 코드를 보려면 GitHub의 [AWS IoT 플릿 프로비저닝 플러그인](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim)을 참조하세요.

**AWS IoT 플릿 프로비저닝 플러그인을 다운로드하려면**
+ 디바이스에서 AWS IoT 플릿 프로비저닝 플러그인을 라는 파일에 다운로드합니다`aws.greengrass.FleetProvisioningByClaim.jar`. *GreengrassInstaller*를 사용하려는 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------
#### [ PowerShell ]

  ```
  iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar -OutFile GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------

  <a name="core-software-license"></a>이 소프트웨어를 다운로드하면 [ Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 동의하는 것입니다.

## AWS IoT Greengrass 코어 소프트웨어 설치
<a name="run-greengrass-core-v2-installer-fleet"></a>

다음 작업을 지정하는 인수를 사용하여 설치 관리자를 실행합니다.
+ 플릿 프로비저닝 플러그인을 사용하여 AWS 리소스를 프로비저닝하도록 지정하는 부분 구성 파일에서를 설치합니다. AWS IoT Greengrass 코어 소프트웨어는 디바이스의 모든 Greengrass 구성 요소의 구성을 지정하는 구성 파일을 사용합니다. 설치 관리자는 제공된 부분 구성 파일에서 전체 구성 파일과 플릿 프로비저닝 플러그인이 생성하는 AWS 리소스를 생성합니다.
+ <a name="install-argument-component-default-user"></a>`ggc_user` 시스템 사용자를 사용하도록 지정하여 코어 디바이스에서 소프트웨어 구성 요소를 실행합니다. Linux 디바이스에서 이 명령은 `ggc_group` 시스템 그룹을 사용하도록 지정하고 설치 관리자가 시스템 사용자와 그룹을 생성합니다.
+ <a name="install-argument-system-service"></a> AWS IoT Greengrass 코어 소프트웨어를 부팅 시 실행되는 시스템 서비스로 설정합니다. Linux 디바이스에서는 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 시스템이 필요합니다.
**중요**  <a name="windows-system-service-requirement-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.

지정할 수 있는 인수에 대한 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 섹션을 참조하세요.

**참고**  
<a name="jvm-tuning-note"></a>메모리가 제한된 디바이스 AWS IoT Greengrass 에서를 실행하는 경우 AWS IoT Greengrass 코어 소프트웨어에서 사용하는 메모리 양을 제어할 수 있습니다. 메모리 할당을 제어하기 위해 nucleus 구성 요소의 `jvmOptions` 구성 파라미터에서 JVM 힙 크기 옵션을 설정할 수 있습니다. 자세한 내용은 [JVM 옵션으로 메모리 할당 제어](configure-greengrass-core-v2.md#jvm-tuning) 단원을 참조하십시오.

**AWS IoT Greengrass 코어 소프트웨어를 설치하려면**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.
   + *GreengrassInstaller*를 소프트웨어가 포함된 폴더의 경로로 바꿉니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 텍스트 편집기를 사용하여 `config.yaml` 구성 파일을 생성하고 설치 관리자에 제공합니다.

   <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

   ```
   nano GreengrassInstaller/config.yaml
   ```

   다음 YAML 콘텐츠를 파일에 복사합니다. 이 부분 구성 파일은 플릿 프로비저닝 플러그인의 파라미터를 지정합니다. 지정할 수 있는 옵션에 대한 자세한 내용은 [AWS IoT 플릿 프로비저닝 플러그인 구성](fleet-provisioning-configuration.md) 섹션을 참조하세요.

------
#### [ Linux or Unix ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.17.0"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "/greengrass/v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
         claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
         rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------
#### [ Windows ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.17.0"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "C:\\greengrass\\v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "C:\\greengrass\\v2\\claim-certs\\claim.pem.crt"
         claimCertificatePrivateKeyPath: "C:\\greengrass\\v2\\claim-certs\\claim.private.pem.key"
         rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------

   뒤이어 다음과 같이 하세요.
   + *2.17.0*을 AWS IoT Greengrass 코어 소프트웨어 버전으로 바꿉니다.
   + `/greengrass/v2`의 각 인스턴스 또는 *C:\$1greengrass\$1v2*를 Greengrass 루트 폴더로 바꿉니다.
**참고**  
Windows 디바이스에서는 경로 구분자를 이중 백슬래시(`\\`)로 지정해야 합니다(예: `C:\\greengrass\\v2`).
   + *us-west-2*를 프로비저닝 템플릿 및 기타 리소스를 생성한 AWS 리전으로 바꿉니다.
   + 를 AWS IoT 데이터 엔드포인트`iotDataEndpoint`로 바꿉니다.
   + 를 AWS IoT 자격 증명 엔드포인트`iotCredentialEndpoint`로 바꿉니다.
   + *GreengrassCoreTokenExchangeRoleAlias*를 토큰 교환 역할 별칭의 이름으로 바꿉니다.
   + *GreengrassFleetProvisioningTemplate*을 플릿 프로비저닝 템플릿의 이름으로 바꿉니다.
   + `claimCertificatePath`를 디바이스의 클레임 인증서 경로로 바꿉니다.
   + `claimCertificatePrivateKeyPath`를 디바이스의 클레임 인증서 프라이빗 키 경로로 바꿉니다.
   + 템플릿 파라미터(`templateParameters`)를 디바이스 프로비저닝에 사용하는 값으로 바꿉니다. 이 예제는 `ThingName` 및 `ThingGroupName` 파라미터를 정의하는 [예제 템플릿](fleet-provisioning-setup.md#example-fleet-provisioning-template)을 참조합니다.
**참고**  
이 구성 파일에서는 다음 예제와 같이 사용할 포트 및 네트워크 프록시 등 다른 구성 옵션을 사용자 지정할 수 있습니다. 자세한 내용은 [Greengrass nucleus 구성](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)을 참조하세요.  

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.17.0"
       configuration:
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "http://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "/greengrass/v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
         claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
         rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
         mqttPort: 443
         proxyUrl: "http://my-proxy-server:1100"
         proxyUserName: "Mary_Major"
         proxyPassword: "pass@word1357"
   ```

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.17.0"
       configuration:
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "http://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "C:\\greengrass\\v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "C:\\greengrass\\v2\\claim-certs\\claim.pem.crt"
         claimCertificatePrivateKeyPath: "C:\\greengrass\\v2\\claim-certs\\claim.private.pem.key"
         rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
         mqttPort: 443
         proxyUrl: "http://my-proxy-server:1100"
         proxyUserName: "Mary_Major"
         proxyPassword: "pass@word1357"
   ```
HTTPS 프록시를 사용하려면 플릿 프로비저닝 플러그인 버전 1.1.0 이상을 사용해야 합니다. 다음 예제와 같이 `system` 아래에서 `rootCaPath`를 추가로 지정해야 합니다.  

   ```
   ---
   system:
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
   services:
     ...
   ```

   ```
   ---
   system:
     rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
   services:
     ...
   ```

1. 설치 관리자를 실행합니다. `--trusted-plugin`을 지정하여 플릿 프로비저닝 플러그인을 제공하고, `--init-config`를 지정하여 구성 파일을 제공합니다.
   + `/greengrass/v2`를 Greengrass 루트 폴더로 바꿉니다.
   + *GreengrassInstaller*의 각 인스턴스를 설치 관리자를 압축 해제한 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**중요**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정`--setup-system-service true`하도록를 지정해야 합니다.

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true`를 지정하면 설치 관리자는 소프트웨어를 시스템 서비스로 설정하고 실행한 경우 `Successfully set up Nucleus as a system service`를 출력합니다. 그렇지 않은 경우 소프트웨어가 성공적으로 설치되면 설치 관리자에서 메시지가 출력되지 않습니다.
**참고**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 인수 없이 설치 관리자를 실행할 때는 `deploy-dev-tools` 인수를 사용하여 로컬 개발 도구를 배포할 수 없습니다. Greengrass CLI를 디바이스에 직접 배포하는 방법에 대한 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 섹션을 참조하세요.

1. <a name="installer-verify-installation"></a>루트 폴더의 파일을 확인하여 설치를 확인합니다.

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   설치에 성공하면 루트 폴더에 `config`, `packages` 및 `logs`와 같은 여러 폴더가 포함됩니다.

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설치한 경우 설치 관리자가 소프트웨어를 실행합니다. 그렇지 않으면 소프트웨어를 수동으로 실행해야 합니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 실행](run-greengrass-core-v2.md) 단원을 참조하십시오.

<a name="install-greengrass-core-next-steps-intro"></a>소프트웨어를 구성하고 사용하는 방법에 대한 자세한 내용은 다음을 AWS IoT Greengrass참조하세요.<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass 구성 요소 개발](develop-greengrass-components.md)
+ [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md)
+ [Greengrass 명령줄 인터페이스](gg-cli.md)

# Greengrass 코어 디바이스에 대한 AWS IoT 플릿 프로비저닝 설정
<a name="fleet-provisioning-setup"></a>

[플릿 프로비저닝과 함께 AWS IoT Greengrass 코어 소프트웨어를 설치](fleet-provisioning.md)하려면 먼저에서 다음 리소스를 설정해야 합니다 AWS 계정. 이러한 리소스를 통해 디바이스는에 등록 AWS IoT 하고 Greengrass 코어 디바이스로 작동할 수 있습니다. 이 섹션의 단계를 한 번 수행하여 AWS 계정에서 이러한 리소스를 생성 및 구성합니다.
+ 코어 디바이스가 AWS 서비스에 대한 직접 호출의 승인에 사용하는 토큰 교환 IAM 역할입니다.
+ 토큰 교환 AWS IoT 역할을 가리키는 역할 별칭입니다.
+ (선택 사항) 코어 디바이스가 AWS IoT 및 AWS IoT Greengrass 서비스에 대한 호출을 승인하는 데 사용하는 AWS IoT 정책입니다. 이 AWS IoT 정책은 토큰 교환 AWS IoT 역할을 가리키는 역할 별칭에 대한 `iot:AssumeRoleWithCertificate` 권한을 허용해야 합니다.

  플릿의 모든 코어 디바이스에 단일 AWS IoT 정책을 사용하거나 각 코어 디바이스에 대한 AWS IoT 정책을 생성하도록 플릿 프로비저닝 템플릿을 구성할 수 있습니다.
+  AWS IoT 플릿 프로비저닝 템플릿입니다. 이 템플릿은 다음을 지정해야 합니다.<a name="installation-fleet-provisioning-template-requirements"></a>
  +  AWS IoT 사물 리소스입니다. 기존 사물 그룹 목록을 지정하여 온라인 상태일 때 각 디바이스에 구성 요소를 배포할 수 있습니다.
  +  AWS IoT 정책 리소스입니다. 이 리소스는 다음 속성 중 하나를 정의할 수 있습니다.
    + 기존 AWS IoT 정책의 이름입니다. 이 옵션을 선택하면이 템플릿에서 생성한 코어 디바이스가 동일한 AWS IoT 정책을 사용하며 해당 권한을 플릿으로 관리할 수 있습니다.
    +  AWS IoT 정책 문서. 이 옵션을 선택하면이 템플릿에서 생성하는 각 코어 디바이스는 고유한 AWS IoT 정책을 사용하며 각 개별 코어 디바이스에 대한 권한을 관리할 수 있습니다.
  +  AWS IoT 인증서 리소스입니다. 이 인증서 리소스는 `AWS::IoT::Certificate::Id` 파라미터를 사용하여 코어 디바이스에 인증서를 연결해야 합니다. 자세한 내용은 *AWS IoT 개발자 안내서*의 [JIT(Just-in-Time) 프로비저닝](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)을 참조하세요.
+ 플릿 AWS IoT 프로비저닝 템플릿에 대한 프로비저닝 클레임 인증서 및 프라이빗 키입니다. 제조 중에 디바이스에 이 인증서와 프라이빗 키를 내장할 수 있으므로 디바이스가 온라인 상태가 되면 등록하고 프로비저닝할 수 있습니다.
**중요**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
프로비저닝 클레임 프라이빗 키는 Greengrass 코어 디바이스 등 어디에서든 항상 보안 유지되어야 합니다. Amazon CloudWatch 지표 및 로그를 사용하여 디바이스 프로비저닝을 위한 클레임 인증서의 무단 사용과 같은 오용 징후를 모니터링하는 것이 좋습니다. 오용이 감지되면 프로비저닝 클레임 인증서를 디바이스 프로비저닝에 사용할 수 없도록 비활성화합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS IoT모니터링](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)를 참조하세요.  
디바이스 수와에 자신을 등록하는 디바이스를 더 잘 관리할 수 있도록 AWS 계정플릿 프로비저닝 템플릿을 생성할 때 사전 프로비저닝 후크를 지정할 수 있습니다. 사전 프로비저닝 후크는 디바이스가 등록 중에 제공하는 템플릿 파라미터를 검증하는 AWS Lambda 함수입니다. 예를 들어 디바이스 ID를 데이터베이스와 비교하여 디바이스에 프로비저닝 권한이 있는지 확인하는 사전 프로비저닝 후크를 생성할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [사전 프로비저닝 후크](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)를 참조하세요.
+ 디바이스가 플릿 프로비저닝 템플릿을 등록하고 사용할 수 있도록 프로비저닝 클레임 인증서에 연결하는 AWS IoT 정책입니다.

**Topics**
+ [토큰 교환 역할 생성](#create-token-exchange-role)
+ [AWS IoT 정책 생성](#create-iot-policy)
+ [플릿 프로비저닝 템플릿 생성](#create-provisioning-template)
+ [프로비저닝 클레임 인증서 및 프라이빗 키 생성](#create-claim-certificates)

## 토큰 교환 역할 생성
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass 코어 디바이스는 *토큰 교환* 역할이라는 IAM 서비스 역할을 사용하여 AWS 서비스에 대한 호출을 승인합니다. 디바이스는 자격 AWS IoT 증명 공급자를 사용하여이 역할에 대한 임시 AWS 자격 증명을 가져오므로 디바이스가 상호 작용하고 AWS IoT, Amazon CloudWatch Logs로 로그를 전송하고, Amazon S3에서 사용자 지정 구성 요소 아티팩트를 다운로드할 수 있습니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.

<a name="installation-create-token-exchange-role-alias-intro"></a> AWS IoT *Anrole 별칭을* 사용하여 Greengrass 코어 디바이스에 대한 토큰 교환 역할을 구성합니다. 역할 별칭을 사용하면 디바이스의 토큰 교환 역할을 변경할 수 있지만 디바이스 구성은 동일하게 유지할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS 서비스 직접 호출에 대한 권한 부여](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)를 참조하세요.

이 섹션에서는 토큰 교환 IAM 역할과 AWS IoT 역할을 가리키는 역할 별칭을 생성합니다. 이미 Greengrass 코어 디바이스를 설정한 경우 새 디바이스를 생성하는 대신 토큰 교환 역할 및 역할 별칭을 사용할 수 있습니다.

**토큰 교환 IAM 역할을 생성하려면**

1. <a name="create-token-exchange-role-create-iam-role"></a>디바이스가 토큰 교환 역할로 사용할 수 있는 IAM 역할을 생성합니다. 해결 방법:

   1. 토큰 교환 역할에 필요한 신뢰 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano device-role-trust-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 신뢰 정책 문서를 사용하여 토큰 교환 역할을 생성합니다.
      + *GreengrassV2TokenExchangeRole*을 생성할 IAM 역할의 이름으로 바꿉니다.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. 토큰 교환 역할에 필요한 액세스 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano device-role-access-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**참고**  
이 액세스 정책은 S3 버킷의 구성 요소 아티팩트에 대한 액세스를 허용하지 않습니다. Amazon S3에서 아티팩트를 정의하는 사용자 지정 구성 요소를 배포하려면 코어 디바이스가 구성 요소 아티팩트를 검색할 수 있도록 역할에 권한을 추가해야 합니다. 자세한 내용은 [구성 요소 아티팩트에 대한 S3 버킷 액세스 허용](device-service-role.md#device-service-role-access-s3-bucket) 단원을 참조하십시오.  
구성 요소 아티팩트에 대한 S3 버킷이 아직 없는 경우 버킷을 생성한 후 권한을 추가할 수 있습니다.

   1. 정책 문서에서 IAM 정책을 생성합니다.
      + *GreengrassV2TokenExchangeRoleAccess*를 생성할 IAM 정책의 이름으로 바꿉니다.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. IAM 정책을 토큰 교환 역할에 연결합니다.
      + *GreengrassV2TokenExchangeRole*을 IAM 역할의 이름으로 바꿉니다.
      + 정책 ARN을 이전 단계에서 생성한 IAM 정책의 ARN으로 변경합니다.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

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

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>토큰 교환 AWS IoT 역할을 가리키는 역할 별칭을 생성합니다.
   + *GreengrassCoreTokenExchangeRoleAlias*를 생성할 역할 별칭의 이름으로 바꿉니다.
   + 역할 ARN을 이전 단계에서 생성한 IAM 역할의 ARN으로 변경합니다.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**참고**  
역할 별칭을 생성하려면 토큰 교환 IAM 역할을 AWS IoT에 전달할 권한이 있어야 합니다. 역할 별칭을 생성하려고 할 때 오류 메시지가 표시되면 AWS 사용자에게이 권한이 있는지 확인합니다. 자세한 내용은 사용 *AWS Identity and Access Management 설명서*의 [AWS 서비스에 역할을 전달할 수 있는 사용자 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

## AWS IoT 정책 생성
<a name="create-iot-policy"></a>

디바이스를 AWS IoT 사물로 등록한 후 해당 디바이스는 디지털 인증서를 사용하여 인증할 수 있습니다 AWS. 이 인증서에는 디바이스가 인증서와 함께 사용할 수 있는 권한을 정의하는 AWS IoT 정책이 하나 이상 포함되어 있습니다. 이러한 정책은 디바이스가 AWS IoT 및와 통신할 수 있도록 허용합니다 AWS IoT Greengrass.

 AWS IoT 플릿 프로비저닝을 통해 디바이스는 AWS IoT 에 연결하여 디바이스 인증서를 생성하고 다운로드합니다. 다음 섹션에서 생성하는 플릿 프로비저닝 템플릿에서가 모든 디바이스의 인증서에 동일한 AWS IoT 정책을 AWS IoT 연결할지 아니면 각 디바이스에 대해 새 정책을 생성할지 지정할 수 있습니다.

이 섹션에서는가 모든 디바이스의 인증서에 AWS IoT 연결하는 AWS IoT 정책을 생성합니다. 이 접근 방식을 사용하면 모든 디바이스의 권한을 플릿으로 관리할 수 있습니다. 각 디바이스에 대해 새 AWS IoT 정책을 생성하려는 경우이 섹션을 건너뛰고 플릿 템플릿을 정의할 때 정책을 참조할 수 있습니다.

**AWS IoT 정책을 생성하려면**
+ Greengrass 코어 디바이스 플릿에 대한 AWS IoT 권한을 정의하는 AWS IoT 정책을 생성합니다. 다음 정책은 모든 MQTT 주제 및 Greengrass 작업에 대한 액세스를 허용하므로 디바이스에서 사용자 지정 애플리케이션 및 새로운 Greengrass 작업이 필요한 향후 변경 사항과 호환됩니다. 또한 이 정책은 디바이스가 이전 섹션에서 생성한 토큰 교환 역할을 사용하도록 허용하는 `iot:AssumeRoleWithCertificate` 권한을 허용합니다. 사용 사례를 기반으로 이 정책을 제한할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass V2 코어 디바이스에 대한 최소 AWS IoT 정책](device-auth.md#greengrass-core-minimal-iot-policy) 단원을 참조하십시오.

  해결 방법:

  1. Greengrass 코어 디바이스에 필요한 AWS IoT 정책 문서가 포함된 파일을 생성합니다.

     <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

     ```
     nano greengrass-v2-iot-policy.json
     ```

     다음 JSON을 파일로 복사합니다.
     + `iot:AssumeRoleWithCertificate` 리소스를 이전 섹션에서 생성한 AWS IoT 역할 별칭의 ARN으로 바꿉니다.

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

****  

     ```
     {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "iot:Publish",
             "iot:Subscribe",
             "iot:Receive",
             "iot:Connect",
             "greengrass:*"
           ],
           "Resource": [
             "*"
           ]
         },
         {
           "Effect": "Allow",
           "Action": "iot:AssumeRoleWithCertificate",
           "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
         }
       ]
     }
     ```

------

  1.  AWS IoT 정책 문서에서 정책을 생성합니다.
     + *GreengrassV2IoTThingPolicy*를 생성할 정책의 이름으로 바꿉니다.

     ```
     aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json
     ```

     요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

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

****  

     ```
     {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{
         \"Version\": \"2012-10-17\",
         \"Statement\": [
           {
             \"Effect\": \"Allow\",
             \"Action\": [
               \"iot:Publish\",
               \"iot:Subscribe\",
               \"iot:Receive\",
               \"iot:Connect\",
               \"greengrass:*\"
             ],
             \"Resource\": [
               \"*\"
             ]
           },
           {
             \"Effect\": \"Allow\",
             \"Action\": \"iot:AssumeRoleWithCertificate\",
             \"Resource\": \"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\"
           }
         ]
       }",
       "policyVersionId": "1"
     }
     ```

------

## 플릿 프로비저닝 템플릿 생성
<a name="create-provisioning-template"></a>

AWS IoT 플릿 프로비저닝 템플릿은 AWS IoT 사물, 정책 및 인증서를 프로비저닝하는 방법을 정의합니다. 플릿 프로비저닝 플러그인으로 Greengrass 코어 디바이스를 프로비저닝하려면 다음을 지정하는 템플릿을 생성해야 합니다.<a name="installation-fleet-provisioning-template-requirements"></a>
+  AWS IoT 사물 리소스입니다. 기존 사물 그룹 목록을 지정하여 온라인 상태일 때 각 디바이스에 구성 요소를 배포할 수 있습니다.
+  AWS IoT 정책 리소스입니다. 이 리소스는 다음 속성 중 하나를 정의할 수 있습니다.
  + 기존 AWS IoT 정책의 이름입니다. 이 옵션을 선택하면이 템플릿에서 생성한 코어 디바이스가 동일한 AWS IoT 정책을 사용하며 해당 권한을 플릿으로 관리할 수 있습니다.
  +  AWS IoT 정책 문서. 이 옵션을 선택하면이 템플릿에서 생성하는 각 코어 디바이스는 고유한 AWS IoT 정책을 사용하며 각 개별 코어 디바이스에 대한 권한을 관리할 수 있습니다.
+  AWS IoT 인증서 리소스입니다. 이 인증서 리소스는 `AWS::IoT::Certificate::Id` 파라미터를 사용하여 코어 디바이스에 인증서를 연결해야 합니다. 자세한 내용은 *AWS IoT 개발자 안내서*의 [JIT(Just-in-Time) 프로비저닝](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)을 참조하세요.

템플릿에서를 지정하여 기존 AWS IoT 사물 그룹 목록에 사물을 추가할 수 있습니다. 코어 디바이스가 AWS IoT Greengrass 에 처음 연결되면 코어 디바이스가 멤버인 각 사물 그룹에 대해 Greengrass 배포를 수신합니다. 사물 그룹을 사용하여 온라인 상태가 되는 즉시 각 디바이스에 최신 소프트웨어를 배포할 수 있습니다. 자세한 내용은 [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md) 단원을 참조하십시오.

이 AWS IoT 서비스에는 디바이스를 프로비저닝할 AWS 계정 때에서 AWS IoT 리소스를 생성하고 업데이트할 수 있는 권한이 필요합니다. AWS IoT 서비스에 액세스 권한을 부여하려면 템플릿을 생성할 때 IAM 역할을 생성하고 제공합니다.는 디바이스를 프로비저닝할 때에서 사용할 AWS IoT 수 있는 모든 권한에 대한 액세스를 허용하는 관리형 정책인 [AWSIoTThingsRegistration](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration)을 AWS IoT 제공합니다. 이 관리형 정책을 사용하거나 사용 사례에 대한 관리형 정책의 권한을 범위로 좁히는 사용자 지정 정책을 생성할 수 있습니다.

이 섹션에서는가 디바이스에 대한 리소스를 AWS IoT 프로비저닝하도록 허용하는 IAM 역할을 생성하고 해당 IAM 역할을 사용하는 플릿 프로비저닝 템플릿을 생성합니다.

**플릿 프로비저닝 템플릿 생성**

1. 에서 리소스를 프로비저닝하기 위해가 맡 AWS IoT 을 수 있는 IAM 역할을 생성합니다 AWS 계정. 해결 방법:

   1. 가 역할을 수임 AWS IoT 하도록 허용하는 신뢰 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano aws-iot-trust-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

------

   1. 신뢰 정책 문서를 사용하여 IAM 역할을 생성합니다.
      + *GreengrassFleetProvisioningRole*을 생성할 IAM 역할의 이름으로 바꿉니다.

      ```
      aws iam create-role --role-name GreengrassFleetProvisioningRole --assume-role-policy-document file://aws-iot-trust-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "iot:Connect",
              "iot:Publish",
              "iot:Subscribe",
              "iot:Receive"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 디바이스를 프로비저닝할 때에서 사용할 AWS IoT 수 있는 모든 권한에 대한 액세스를 허용하는 [AWSIoTThingsRegistration](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration) 정책을 검토합니다. 이 관리형 정책을 사용하거나 사용 사례에 대해 범위가 축소된 권한을 정의하는 사용자 지정 정책을 생성할 수 있습니다. 사용자 지정 정책을 생성하려는 경우 지금 생성합니다.

   1. 플릿 프로비저닝 역할에 IAM 정책을 연결합니다.
      + *GreengrassFleetProvisioningRole*을 IAM 역할의 이름으로 바꿉니다.
      + 이전 단계에서 사용자 지정 정책을 생성한 경우 정책 ARN을 사용할 IAM 정책의 ARN으로 바꿉니다.

      ```
      aws iam attach-role-policy --role-name GreengrassFleetProvisioningRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration
      ```

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

1. (선택 사항) 디바이스가 등록 중에 제공하는 템플릿 파라미터를 검증하는 AWS Lambda 함수인 *사전 프로비저닝 후크*를 생성합니다. 사전 프로비저닝 후크를 사용하여 AWS 계정에 온보딩된 디바이스와 그 수를 더 효과적으로 제어할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [사전 프로비저닝 후크](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)를 참조하세요.

1. 플릿 프로비저닝 템플릿을 생성합니다. 해결 방법:

   1. 프로비저닝 템플릿 문서를 포함하는 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano greengrass-fleet-provisioning-template.json
      ```

      프로비저닝 템플릿 문서를 작성합니다. 다음 속성으로 AWS IoT 사물을 생성하도록 지정하는 다음 예제 프로비저닝 템플릿부터 시작할 수 있습니다.
      + 사물의 이름은 `ThingName` 템플릿 파라미터에서 지정한 값입니다.
      + 사물은 `ThingGroupName` 템플릿 파라미터에서 지정한 사물 그룹의 멤버입니다. 사물 그룹은에 있어야 합니다 AWS 계정.
      + 사물의 인증서에는 라는 AWS IoT 정책이 `GreengrassV2IoTThingPolicy` 연결되어 있습니다.

      자세한 내용은 *AWS IoT Core 개발자 안내서*의 [프로비저닝 템플릿](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)을 참조하세요.

      ```
      {
        "Parameters": {
          "ThingName": {
            "Type": "String"
          },
          "ThingGroupName": {
            "Type": "String"
          },
          "AWS::IoT::Certificate::Id": {
            "Type": "String"
          }
        },
        "Resources": {
          "MyThing": {
            "OverrideSettings": {
              "AttributePayload": "REPLACE",
              "ThingGroups": "REPLACE",
              "ThingTypeName": "REPLACE"
            },
            "Properties": {
              "AttributePayload": {},
              "ThingGroups": [
                {
                  "Ref": "ThingGroupName"
                }
              ],
              "ThingName": {
                "Ref": "ThingName"
              }
            },
            "Type": "AWS::IoT::Thing"
          },
          "MyPolicy": {
            "Properties": {
              "PolicyName": "GreengrassV2IoTThingPolicy"
            },
            "Type": "AWS::IoT::Policy"
          },
          "MyCertificate": {
            "Properties": {
              "CertificateId": {
                "Ref": "AWS::IoT::Certificate::Id"
              },
              "Status": "Active"
            },
            "Type": "AWS::IoT::Certificate"
          }
        }
      }
      ```
**참고**  
*MyThing*, *MyPolicy* 및 *MyCertificate*는 플릿 프로비저닝 템플릿의 각 리소스 사양을 식별하는 임의의 이름입니다. 템플릿에서 생성하는 리소스에는 이러한 이름을 사용하지 AWS IoT 않습니다. 이러한 이름을 그대로 사용하거나 템플릿의 각 리소스를 식별하는 데 도움이 되는 값으로 바꿀 수 있습니다.

   1. 프로비저닝 템플릿 문서에서 플릿 프로비저닝 템플릿을 생성합니다.
      + *GreengrassFleetProvisioningTemplate*을 생성할 템플릿의 이름으로 바꿉니다.
      + 템플릿 설명을 템플릿에 대한 설명으로 바꿉니다.
      + 프로비저닝 역할 ARN을 이전에 생성한 역할의 ARN으로 바꿉니다.

------
#### [ Linux or Unix ]

      ```
      aws iot create-provisioning-template \
        --template-name GreengrassFleetProvisioningTemplate \
        --description "A provisioning template for Greengrass core devices." \
        --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" \
        --template-body file://greengrass-fleet-provisioning-template.json \
        --enabled
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iot create-provisioning-template ^
        --template-name GreengrassFleetProvisioningTemplate ^
        --description "A provisioning template for Greengrass core devices." ^
        --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" ^
        --template-body file://greengrass-fleet-provisioning-template.json ^
        --enabled
      ```

------
#### [ PowerShell ]

      ```
      aws iot create-provisioning-template `
        --template-name GreengrassFleetProvisioningTemplate `
        --description "A provisioning template for Greengrass core devices." `
        --provisioning-role-arn "arn:aws:iam::123456789012:role/GreengrassFleetProvisioningRole" `
        --template-body file://greengrass-fleet-provisioning-template.json `
        --enabled
      ```

------
**참고**  
사전 프로비저닝 후크를 생성한 경우 `--pre-provisioning-hook` 인수로 사전 프로비저닝 후크의 Lambda 함수의 ARN을 지정합니다.  

      ```
      --pre-provisioning-hook targetArn=arn:aws:lambda:us-west-2:123456789012:function:GreengrassPreProvisioningHook
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
          "templateArn": "arn:aws:iot:us-west-2:123456789012:provisioningtemplate/GreengrassFleetProvisioningTemplate",
          "templateName": "GreengrassFleetProvisioningTemplate",
          "defaultVersionId": 1
      }
      ```

## 프로비저닝 클레임 인증서 및 프라이빗 키 생성
<a name="create-claim-certificates"></a>

클레임 인증서는 디바이스가 AWS IoT 사물로 등록하고 일반 작업에 사용할 고유한 X.509 디바이스 인증서를 검색할 수 있도록 허용하는 X.509 인증서입니다. 클레임 인증서를 생성한 후 디바이스가 이를 사용하여 고유한 디바이스 인증서를 생성하고 플릿 프로비저닝 템플릿으로 프로비저닝할 수 있도록 허용하는 AWS IoT 정책을 연결합니다. 클레임 인증서가 있는 디바이스는 AWS IoT 정책에서 허용하는 프로비저닝 템플릿만 사용하여 프로비저닝할 수 있습니다.

이 섹션에서는 클레임 인증서를 생성하고 디바이스가 이전 섹션에서 생성한 플릿 프로비저닝 템플릿을 사용하도록 구성합니다.

**중요**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
프로비저닝 클레임 프라이빗 키는 Greengrass 코어 디바이스 등 어디에서든 항상 보안 유지되어야 합니다. Amazon CloudWatch 지표 및 로그를 사용하여 디바이스 프로비저닝을 위한 클레임 인증서의 무단 사용과 같은 오용 징후를 모니터링하는 것이 좋습니다. 오용이 감지되면 프로비저닝 클레임 인증서를 디바이스 프로비저닝에 사용할 수 없도록 비활성화합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS IoT모니터링](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)를 참조하세요.  
디바이스 수와에 자신을 등록하는 디바이스를 더 잘 관리할 수 있도록 AWS 계정플릿 프로비저닝 템플릿을 생성할 때 사전 프로비저닝 후크를 지정할 수 있습니다. 사전 프로비저닝 후크는 디바이스가 등록 중에 제공하는 템플릿 파라미터를 검증하는 AWS Lambda 함수입니다. 예를 들어 디바이스 ID를 데이터베이스와 비교하여 디바이스에 프로비저닝 권한이 있는지 확인하는 사전 프로비저닝 후크를 생성할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [사전 프로비저닝 후크](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)를 참조하세요.

**프로비저닝 클레임 인증서 및 프라이빗 키 생성**

1. 클레임 인증서와 프라이빗 키를 다운로드할 폴더를 생성합니다.

   ```
   mkdir claim-certs
   ```

1. 프로비저닝에 사용할 인증서와 프라이빗 키를 생성하고 저장합니다.는 Amazon Root 인증 기관(CA)에서 서명한 클라이언트 인증서를 AWS IoT 제공합니다.

------
#### [ Linux or Unix ]

   ```
   aws iot create-keys-and-certificate \
     --certificate-pem-outfile "claim-certs/claim.pem.crt" \
     --public-key-outfile "claim-certs/claim.public.pem.key" \
     --private-key-outfile "claim-certs/claim.private.pem.key" \
     --set-as-active
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iot create-keys-and-certificate ^
     --certificate-pem-outfile "claim-certs/claim.pem.crt" ^
     --public-key-outfile "claim-certs/claim.public.pem.key" ^
     --private-key-outfile "claim-certs/claim.private.pem.key" ^
     --set-as-active
   ```

------
#### [ PowerShell ]

   ```
   aws iot create-keys-and-certificate `
     --certificate-pem-outfile "claim-certs/claim.pem.crt" `
     --public-key-outfile "claim-certs/claim.public.pem.key" `
     --private-key-outfile "claim-certs/claim.private.pem.key" `
     --set-as-active
   ```

------

   요청에 성공하는 경우 응답에 인증서에 대한 정보가 포함됩니다. 나중에 사용하도록 인증서의 ARN을 저장합니다.

1. 디바이스가 인증서를 사용하여 고유한 디바이스 인증서를 생성하고 플릿 프로비저닝 템플릿으로 프로비저닝할 수 있도록 허용하는 AWS IoT 정책을 생성하고 연결합니다. 다음 정책은 디바이스 프로비저닝 MQTT API에 대한 액세스를 허용합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [디바이스 프로비저닝 MQTT API](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html)를 참조하세요.

   해결 방법:

   1. Greengrass 코어 디바이스에 필요한 AWS IoT 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano greengrass-provisioning-claim-iot-policy.json
      ```

      다음 JSON을 파일로 복사합니다.
      + *리전*의 각 인스턴스를 플릿 프로비저닝을 설정한 AWS 리전 로 바꿉니다.
      + *account-id*를 각각 AWS 계정 ID로 바꿉니다.
      + *GreengrassFleetProvisioningTemplate*를 각각 이전 섹션에서 생성한 플릿 프로비저닝 템플릿의 이름으로 바꿉니다.

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:Connect",
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "iot:Publish",
              "iot:Receive"
            ],
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*",
        "arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*"
            ]
          },
          {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": [
            "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*",
        "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*"
            ]
          }
        ]
      }
      ```

------

   1.  AWS IoT 정책 문서에서 정책을 생성합니다.
      + *GreengrassProvisioningClaimPolicy*를 생성할 정책의 이름으로 바꿉니다.

      ```
      aws iot create-policy --policy-name GreengrassProvisioningClaimPolicy --policy-document file://greengrass-provisioning-claim-iot-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

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

****  

      ```
      {
        "policyName": "GreengrassProvisioningClaimPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassProvisioningClaimPolicy",
        "policyDocument": "{
          \"Version\": \"2012-10-17\",
          \"Statement\": [
            {
              \"Effect\": \"Allow\",
              \"Action\": \"iot:Connect\",
              \"Resource\": \"*\"
            },
            {
              \"Effect\": \"Allow\",
              \"Action\": [
                \"iot:Publish\",
                \"iot:Receive\"
              ],
              \"Resource\": [
              \"arn:aws:iot:us-east-1:123456789012:topic/$aws/certificates/create/*\",
        \"arn:aws:iot:us-east-1:123456789012:topic/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*\"
              ]
            },
            {
              \"Effect\": \"Allow\",
              \"Action\": \"iot:Subscribe\",
              \"Resource\": [
              \"arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/certificates/create/*\",
        \"arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/provisioning-templates/GreengrassFleetProvisioningTemplate/provision/*\"
              ]
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

------

1.  AWS IoT 정책을 프로비저닝 클레임 인증서에 연결합니다.
   + *GreengrassProvisioningClaimPolicy*를 연결할 정책의 이름으로 바꿉니다.
   + 대상 ARN을 프로비저닝 클레임 인증서의 ARN으로 바꿉니다.

   ```
   aws iot attach-policy --policy-name GreengrassProvisioningClaimPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
   ```

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

이제 디바이스가에 등록하고 Greengrass 코어 디바이스로 자신을 프로비저닝하는 데 사용할 수 있는 프로비저닝 클레임 인증서 AWS IoT 와 프라이빗 키가 생겼습니다. 제조 중에 디바이스에 클레임 인증서와 프라이빗 키를 임베드하거나 AWS IoT Greengrass 코어 소프트웨어를 설치하기 전에 인증서와 키를 디바이스에 복사할 수 있습니다. 자세한 내용은 [AWS IoT 플릿 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](fleet-provisioning.md) 단원을 참조하십시오.

# AWS IoT 플릿 프로비저닝 플러그인 구성
<a name="fleet-provisioning-configuration"></a>

 AWS IoT 플릿 프로비저닝 플러그인은 [플릿 프로비저닝과 함께 AWS IoT Greengrass 코어 소프트웨어를 설치할](fleet-provisioning.md) 때 사용자 지정할 수 있는 다음과 같은 구성 파라미터를 제공합니다.

`rootPath`  
 AWS IoT Greengrass 코어 소프트웨어의 루트로 사용할 폴더의 경로입니다.

`awsRegion`  
플릿 프로비저닝 플러그인 AWS 리전 이 리소스를 프로비저닝 AWS 하는 데 사용하는 입니다.

`iotDataEndpoint`  
<a name="nucleus-component-configuration-iot-data-endpoint"></a>의 AWS IoT 데이터 엔드포인트입니다 AWS 계정.

`iotCredentialEndpoint`  
<a name="nucleus-component-configuration-iot-cred-endpoint"></a>의 AWS IoT 자격 증명 엔드포인트입니다 AWS 계정.

`iotRoleAlias`  
<a name="nucleus-component-configuration-iot-role-alias"></a>토큰 교환 IAM AWS IoT 역할을 가리키는 역할 별칭입니다. 자격 AWS IoT 증명 공급자는 Greengrass 코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록이 역할을 맡습니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.

`provisioningTemplate`  
 AWS 리소스를 프로비저닝하는 데 사용할 AWS IoT 플릿 프로비저닝 템플릿입니다. 이 템플릿은 다음을 지정해야 합니다.  <a name="installation-fleet-provisioning-template-requirements"></a>
+  AWS IoT 사물 리소스입니다. 기존 사물 그룹 목록을 지정하여 온라인 상태일 때 각 디바이스에 구성 요소를 배포할 수 있습니다.
+  AWS IoT 정책 리소스입니다. 이 리소스는 다음 속성 중 하나를 정의할 수 있습니다.
  + 기존 AWS IoT 정책의 이름입니다. 이 옵션을 선택하면이 템플릿에서 생성한 코어 디바이스가 동일한 AWS IoT 정책을 사용하며 해당 권한을 플릿으로 관리할 수 있습니다.
  +  AWS IoT 정책 문서. 이 옵션을 선택하면이 템플릿에서 생성하는 각 코어 디바이스는 고유한 AWS IoT 정책을 사용하며 각 개별 코어 디바이스에 대한 권한을 관리할 수 있습니다.
+  AWS IoT 인증서 리소스입니다. 이 인증서 리소스는 `AWS::IoT::Certificate::Id` 파라미터를 사용하여 코어 디바이스에 인증서를 연결해야 합니다. 자세한 내용은 *AWS IoT 개발자 안내서*의 [JIT(Just-in-Time) 프로비저닝](https://docs.aws.amazon.com/iot/latest/developerguide/jit-provisioning.html)을 참조하세요.
자세한 내용은 *AWS IoT Core 개발자 안내서*의 [프로비저닝 템플릿](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)을 참조하세요.

`claimCertificatePath`  
`provisioningTemplate`에서 지정한 프로비저닝 템플릿에 대한 프로비저닝 클레임 인증서의 경로입니다. 자세한 정보는 *AWS IoT Core API 참조*의 [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)을 참조하세요.

`claimCertificatePrivateKeyPath`  
`provisioningTemplate`에서 지정한 프로비저닝 템플릿에 대한 프로비저닝 클레임 인증서 프라이빗 키의 경로입니다. 자세한 정보는 *AWS IoT Core API 참조*의 [CreateProvisioningClaim](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningClaim.html)을 참조하세요.  
프로비저닝 클레임 프라이빗 키는 Greengrass 코어 디바이스 등 어디에서든 항상 보안 유지되어야 합니다. Amazon CloudWatch 지표 및 로그를 사용하여 디바이스 프로비저닝을 위한 클레임 인증서의 무단 사용과 같은 오용 징후를 모니터링하는 것이 좋습니다. 오용이 감지되면 프로비저닝 클레임 인증서를 디바이스 프로비저닝에 사용할 수 없도록 비활성화합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS IoT모니터링](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)를 참조하세요.  
디바이스 수와에 자신을 등록하는 디바이스를 더 잘 관리할 수 있도록 AWS 계정플릿 프로비저닝 템플릿을 생성할 때 사전 프로비저닝 후크를 지정할 수 있습니다. 사전 프로비저닝 후크는 디바이스가 등록 중에 제공하는 템플릿 파라미터를 검증하는 AWS Lambda 함수입니다. 예를 들어 디바이스 ID를 데이터베이스와 비교하여 디바이스에 프로비저닝 권한이 있는지 확인하는 사전 프로비저닝 후크를 생성할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [사전 프로비저닝 후크](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)를 참조하세요.

`rootCaPath`  
Amazon 루트 CA(인증 기관) 인증서의 경로입니다.

`templateParameters`  
(선택 사항) 플릿 프로비저닝 템플릿에 제공할 파라미터의 맵입니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [프로비저닝 템플릿 파라미터 섹션](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#parameters-section)을 참조하세요.

`deviceId`  
(선택 사항) 플릿 프로비저닝 플러그인이 AWS IoT에 대한 MQTT 연결을 생성할 때 클라이언트 ID로 사용할 디바이스 식별자입니다.  
기본값: 무작위 UUID.

`mqttPort`  
(선택 사항) MQTT 연결에 사용할 포트입니다.  
기본값: `8883`

`proxyUrl`  
(선택 사항) `scheme://userinfo@host:port` 형식으로 표시되는 프록시 서버의 URL입니다. HTTPS 프록시를 사용하려면 플릿 프로비저닝 플러그인 버전 1.1.0 이상을 사용해야 합니다.  <a name="nucleus-component-configuration-proxy-url-segments"></a>
+ `scheme` - 체계로, `http` 또는 `https`여야 합니다.
**중요**  
<a name="https-proxy-greengrass-nucleus-requirement"></a>Greengrass 코어 디바이스에서 HTTPS 프록시가 사용되려면 [Greengrass nucleus ](greengrass-nucleus-component.md) v2.5.0 이상을 실행해야 합니다.  
HTTPS 프록시를 구성하는 경우 코어 디바이스의 Amazon 루트 CA 인증서에 프록시 서버 CA 인증서를 추가해야 합니다. 자세한 내용은 [HTTPS 프록시가 신뢰될 수 있도록 코어 디바이스 설정](configure-greengrass-core-v2.md#https-proxy-certificate-trust) 단원을 참조하십시오.
+ `userinfo` - (선택 사항) 사용자 이름 및 암호 정보입니다. `url`에서 이 정보를 지정하면 Greengrass 코어 디바이스에서는 `username` 및 `password` 필드를 무시합니다.
+ `host` - 프록시 서버의 호스트 이름 또는 IP 주소입니다.
+ `port` – (선택 사항) 포트 번호입니다. 포트를 지정하지 않으면 Greengrass 코어 디바이스에서는 다음 기본값이 사용됩니다.
  + `http` – 80
  + `https` – 443

`proxyUserName`  
(선택 사항) 프록시 서버를 인증하는 사용자 이름입니다.

`proxyPassword`  
(선택 사항) 프록시 서버를 인증하는 사용자 이름입니다.

csrPath  
(선택 사항) CSR(인증서 서명 요청)에서 디바이스 인증서를 생성하는 데 사용할 CSR 파일의 경로입니다. 자세한 내용은 * AWS IoT Core 개발자 안내서*의 [클레임에 의한 프로비저닝](https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#claim-based)을 참조하세요.

csrPrivateKeyPath  
(선택 사항, `csrPath`가 선언된 경우 필수 사항) CSR을 생성하는 데 사용되는 프라이빗 키의 경로입니다. 프라이빗 키를 사용하여 CSR을 생성한 상태여야 합니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [클레임에 의한 프로비저닝](https://docs.aws.amazon.com/iot/latest/developerguide/provision-wo-cert.html#claim-based)을 참조하세요.

certificatePath  
(선택 사항) 다운로드한 디바이스 인증서를 저장할 경로입니다.

privateKeyPath  
(선택 사항) 다운로드한 디바이스 프라이빗 키를 저장할 경로입니다.

# AWS IoT 플릿 프로비저닝 플러그인 변경 로그
<a name="fleet-provisioning-changelog"></a>

다음 표에서는 클레임 플러그인(`aws.greengrass.FleetProvisioningByClaim`)을 기준으로 AWS IoT 플릿 프로비저닝의 각 버전에 대한 변경 사항을 설명합니다.


|  버전  |  변경 사항  | 
| --- | --- | 
|  1.2.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.2.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.2.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/fleet-provisioning-changelog.html)  | 
|  1.0.0  |  초기 버전입니다.  | 

# 사용자 지정 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치
<a name="custom-provisioning"></a>

이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) v2.4.0 이상에서 사용할 수 있습니다.

 AWS IoT Greengrass 코어 소프트웨어 설치 관리자는 필요한 AWS 리소스를 프로비저닝하는 사용자 지정 플러그인에서 구현할 수 있는 Java 인터페이스를 제공합니다. 사용자 지정 X.509 클라이언트 인증서가 사용되거나 다른 설치 프로세스에서 지원되지 않는 복잡한 프로비저닝 단계가 실행되는 프로비저닝 플러그인을 개발할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [자체 클라이언트 인증서 생성](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)을 참조하세요.

 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 사용자 지정 프로비저닝 플러그인을 실행하려면 설치 프로그램에 제공하는 JAR 파일을 생성합니다. 설치 관리자가 플러그인을 실행하고 플러그인은 Greengrass 코어 디바이스의 AWS 리소스를 정의하는 프로비저닝 구성을 반환합니다. 설치 관리자는이 정보를 사용하여 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 구성합니다. 자세한 내용은 [사용자 지정 프로비저닝 플러그인 개발](develop-custom-provisioning-plugins.md) 단원을 참조하십시오.

**중요**  <a name="install-greengrass-core-requirements-note"></a>
 AWS IoT Greengrass 코어 소프트웨어를 다운로드하기 전에 코어 디바이스가 AWS IoT Greengrass 코어 소프트웨어 v2.0 설치 및 실행 [요구 사항을](greengrass-nucleus-component.md#greengrass-v2-requirements) 충족하는지 확인합니다.

**Topics**
+ [사전 조건](#custom-provisioning-prerequisites)
+ [디바이스 환경 설정](#set-up-device-environment)
+ [AWS IoT Greengrass 코어 소프트웨어 다운로드](#download-greengrass-core-v2)
+ [AWS IoT Greengrass 코어 소프트웨어 설치](#run-greengrass-core-v2-installer-custom)
+ [사용자 지정 프로비저닝 플러그인 개발](develop-custom-provisioning-plugins.md)

## 사전 조건
<a name="custom-provisioning-prerequisites"></a>

사용자 지정 프로비저닝으로 AWS IoT Greengrass 코어 소프트웨어를 설치하려면 다음이 있어야 합니다.
+ `DeviceIdentityInterface`가 구현되는 사용자 지정 프로비저닝 플러그인용 JAR 파일. 사용자 지정 프로비저닝 플러그인에서는 각 시스템 및 nucleus 구성 파라미터에 대한 값이 반환되어야 합니다. 그렇지 않으면 설치 중 구성 파일에서 해당 값을 제공해야 합니다. 자세한 내용은 [사용자 지정 프로비저닝 플러그인 개발](develop-custom-provisioning-plugins.md) 단원을 참조하십시오.

## 디바이스 환경 설정
<a name="set-up-device-environment"></a>

이 섹션의 단계에 따라 AWS IoT Greengrass 코어 디바이스로 사용할 Linux 또는 Windows 디바이스를 설정합니다.

### Linux 디바이스 설정
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**용 Linux 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다. 다음 명령은 디바이스에 OpenJDK를 설치하는 방법을 보여줍니다.
   + Debian 기반 또는 Ubuntu 기반 배포판의 경우:

     ```
     sudo apt install default-jdk
     ```
   + Red Hat 기반 배포판의 경우:

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 대상 Amazon Linux 2:

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + Amazon Linux 2023의 경우:

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   설치가 완료되면 다음 명령을 실행하여 Linux 디바이스에서 Java가 실행되는지 확인합니다.

   ```
   java -version
   ```

   디바이스에서 실행되는 Java 버전이 명령을 통해 인쇄됩니다. 예를 들어 Debian 기반 배포의 경우 출력이 다음 샘플과 유사할 수 있습니다.

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. (선택 사항) 디바이스에서 구성 요소를 실행하는 기본 시스템 사용자와 그룹을 생성합니다. 설치 관리자 인수를 사용하여 설치하는 동안 AWS IoT Greengrass 코어 소프트웨어 `--component-default-user` 설치 관리자가이 사용자와 그룹을 생성하도록 선택할 수도 있습니다. 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 단원을 참조하십시오.

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1.  AWS IoT Greengrass 코어 소프트웨어(일반적으로 `root`)를 실행하는 사용자에게 모든 사용자 및 모든 그룹에서를 실행할 수 `sudo` 있는 권한이 있는지 확인합니다.

   1. 다음 명령을 실행하여 `/etc/sudoers` 파일을 엽니다.

      ```
      sudo visudo
      ```

   1. 사용자에 대한 권한이 다음 예제와 같은지 확인합니다.

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. (선택 사항) [컨테이너화된 Lambda 함수를 실행](run-lambda-functions.md)하려면 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1을 활성화하고 *memory* 및 *devices* cgroups를 활성화하고 탑재해야 합니다. 컨테이너화된 Lambda 함수를 실행할 계획이 없는 경우 이 단계를 건너뛸 수 있습니다.

   이러한 cgroups 옵션을 활성화하려면 다음 Linux 커널 파라미터로 디바이스를 부팅합니다.

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   디바이스의 커널 파라미터를 보고 설정하는 방법에 대한 자세한 내용은 운영 체제 및 부트 로더 설명서를 참조하세요. 지침에 따라 커널 파라미터를 영구적으로 설정합니다.

1. [디바이스 요구 사항](greengrass-nucleus-component.md#greengrass-v2-requirements)의 요구 사항 목록에 따라 디바이스에 기타 모든 필수 종속성을 설치합니다.

### Windows 디바이스 설정
<a name="set-up-windows-device-environment"></a>

**참고**  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.5.0 이상에서 사용할 수 있습니다.<a name="set-up-windows-device-environment-procedure"></a>

**용 Windows 디바이스를 설정하려면 AWS IoT Greengrass V2**

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다.

1. [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 시스템 변수에서 Java를 사용할 수 있는지 확인하고 사용할 수 없는 경우 추가합니다. LocalSystem 계정은 AWS IoT Greengrass 코어 소프트웨어를 실행하므로 사용자의 PATH 사용자 변수 대신 PATH 시스템 변수에 Java를 추가해야 합니다. 해결 방법:

   1. Windows 키를 눌러 시작 메뉴를 엽니다.

   1. 시작 메뉴에서 **environment variables**를 입력하여 시스템 옵션을 검색합니다.

   1. 시작 메뉴 검색 결과에서 **시스템 환경 변수 편집**을 선택하여 **시스템 속성** 창을 엽니다.

   1. **환경 변수...**를 선택하여 **환경 변수** 창을 엽니다.

   1. **시스템 변수**에서 **경로**를 선택하고 **편집**을 선택합니다. **환경 변수 편집** 창에서 각 경로를 별도의 줄로 볼 수 있습니다.

   1. Java 설치 `bin` 폴더의 경로가 있는지 확인합니다. 경로는 다음 예제와 유사할 수 있습니다.

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. **경로**에서 Java 설치 `bin` 폴더가 누락된 경우 **새로 만들기**를 선택하여 추가한 다음 **확인**을 선택합니다.

1. <a name="set-up-windows-device-environment-open-cmd"></a>관리자 권한으로 Windows 명령 프롬프트(`cmd.exe`)를 엽니다.

1. <a name="set-up-windows-device-environment-create"></a>Windows 디바이스의 LocalSystem 계정에 기본 사용자를 생성합니다. *암호*를 안전한 암호로 바꿉니다.

   ```
   net user /add ggc_user password
   ```
**작은 정보**  <a name="windows-password-expiration-tip"></a>
Windows 구성에 따라 사용자의 암호가 미래의 날짜에 만료되도록 설정할 수 있습니다. Greengrass 애플리케이션이 계속 작동하도록 하려면 암호가 만료되는 시기를 추적하고 만료되기 전에 이를 업데이트합니다. 사용자의 암호가 만료되지 않도록 설정할 수도 있습니다.  
사용자와 암호가 만료되는 시기를 확인하려면 다음 명령을 실행합니다.  

     ```
     net user ggc_user | findstr /C:expires
     ```
사용자의 암호가 만료되지 않도록 설정하려면 다음 명령을 실행합니다.  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
[`wmic` 명령이 더는 사용되지 않는](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 이상을 사용하는 경우 다음 PowerShell 명령을 실행합니다.  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>Microsoft에서 [PsExec 유틸리티](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)를 다운로드하여 디바이스에 설치합니다.

1. <a name="set-up-windows-device-credentials"></a>PsExec 유틸리티를 사용하여 기본 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장합니다. 이전에 설정한 사용자의 암호로 *암호*를 바꿉니다.

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   **PsExec License Agreement**가 열리면 **Accept**를 선택하여 라이선스에 동의하고 명령을 실행합니다.
**참고**  
Windows 디바이스에서 LocalSystem 계정은 Greengrass nucleus를 실행하고 PsExec 유틸리티를 사용하여 기본 사용자 정보를 LocalSystem 계정에 저장해야 합니다. Credential Manager 애플리케이션을 사용하면 이 정보가 LocalSystem 계정 대신 현재 로그인한 사용자의 Windows 계정에 저장됩니다.

## AWS IoT Greengrass 코어 소프트웨어 다운로드
<a name="download-greengrass-core-v2"></a>

다음 위치에서 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다.
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**참고**  
다음 위치에서 특정 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다. 다운로드할 버전으로 *version*을 바꿉니다.  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**AWS IoT Greengrass 코어 소프트웨어를 다운로드하려면**

1. <a name="installation-download-ggc-software-step"></a>코어 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 라는 파일에 다운로드합니다`greengrass-nucleus-latest.zip`.

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>이 소프트웨어를 다운로드하면 [ Greengrass 코어 소프트웨어 라이선스 계약](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)에 동의하는 것입니다.

1. <a name="verify-gg-nucleus-signature"></a>(선택 사항) Greengrass nucleus 소프트웨어 서명을 확인하려면
**참고**  
이 기능은 Greengrass nucleus 버전 2.9.5 이상에서 사용할 수 있습니다.

   1. 다음 명령을 사용하여 Greengrass nucleus 아티팩트의 서명을 확인합니다.

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      파일 이름은 설치하는 JDK 버전에 따라 다르게 보일 수 있습니다. *`jdk17.0.6_10`*을 설치한 JDK 버전으로 바꿉니다.

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 간접 호출 시 확인 결과를 나타내는 출력이 생성됩니다.

      1. Greengrass nucleus zip 파일이 서명되면 출력에 다음 문이 포함됩니다.

         ```
         jar verified.
         ```

      1. Greengrass nucleus zip 파일이 서명되지 않으면 출력에 다음 문이 포함됩니다.

         ```
         jar is unsigned.
         ```

   1. `-verify` 및 `-certs` 옵션과 함께 Jarsigner `-verbose` 옵션을 제공한 경우 출력에는 자세한 서명자 인증서 정보도 포함됩니다.

1. <a name="installation-unzip-ggc-software-step"></a> AWS IoT Greengrass 코어 소프트웨어의 압축을 디바이스의 폴더에 풉니다. *GreengrassInstaller*를 사용하려는 폴더로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. (선택 사항) 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**중요**  <a name="installer-folder-2.4.0-warning"></a>
v2.4.0 이전 버전의 Greengrass nucleus를 설치하는 경우 AWS IoT Greengrass 코어 소프트웨어를 설치한 후에는이 폴더를 제거하지 마십시오. AWS IoT Greengrass 코어 소프트웨어는이 폴더의 파일을 사용하여 실행합니다.  
최신 버전의 소프트웨어를 다운로드한 경우 v2.4.0 이상을 설치하고 AWS IoT Greengrass 코어 소프트웨어를 설치한 후이 폴더를 제거할 수 있습니다.

## AWS IoT Greengrass 코어 소프트웨어 설치
<a name="run-greengrass-core-v2-installer-custom"></a>

다음 작업을 지정하는 인수를 사용하여 설치 관리자를 실행합니다.
+ 사용자 지정 프로비저닝 플러그인을 사용하여 AWS 리소스를 프로비저닝하도록 지정하는 부분 구성 파일에서를 설치합니다. AWS IoT Greengrass 코어 소프트웨어는 디바이스의 모든 Greengrass 구성 요소의 구성을 지정하는 구성 파일을 사용합니다. 설치 관리자는 사용자가 제공하는 부분 구성 파일과 사용자 지정 프로비저닝 플러그인이 생성하는 AWS 리소스에서 전체 구성 파일을 생성합니다.
+ <a name="install-argument-component-default-user"></a>`ggc_user` 시스템 사용자를 사용하도록 지정하여 코어 디바이스에서 소프트웨어 구성 요소를 실행합니다. Linux 디바이스에서 이 명령은 `ggc_group` 시스템 그룹을 사용하도록 지정하고 설치 관리자가 시스템 사용자와 그룹을 생성합니다.
+ <a name="install-argument-system-service"></a> AWS IoT Greengrass 코어 소프트웨어를 부팅 시 실행되는 시스템 서비스로 설정합니다. Linux 디바이스에서는 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 시스템이 필요합니다.
**중요**  <a name="windows-system-service-requirement-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.

지정할 수 있는 인수에 대한 자세한 내용은 [설치 프로그램 인수](configure-installer.md) 섹션을 참조하세요.

**참고**  
<a name="jvm-tuning-note"></a>메모리가 제한된 디바이스 AWS IoT Greengrass 에서를 실행하는 경우 AWS IoT Greengrass 코어 소프트웨어에서 사용하는 메모리 양을 제어할 수 있습니다. 메모리 할당을 제어하기 위해 nucleus 구성 요소의 `jvmOptions` 구성 파라미터에서 JVM 힙 크기 옵션을 설정할 수 있습니다. 자세한 내용은 [JVM 옵션으로 메모리 할당 제어](configure-greengrass-core-v2.md#jvm-tuning) 단원을 참조하십시오.

**AWS IoT Greengrass 코어 소프트웨어를 설치하려면(Linux)**

1. <a name="installer-check-greengrass-core-software-version"></a> AWS IoT Greengrass 코어 소프트웨어의 버전을 확인합니다.
   + *GreengrassInstaller*를 소프트웨어가 포함된 폴더의 경로로 바꿉니다.

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 텍스트 편집기를 사용하여 `config.yaml` 구성 파일을 생성하고 설치 관리자에 제공합니다.

   <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

   ```
   nano GreengrassInstaller/config.yaml
   ```

   다음 YAML 내용을 파일에 복사합니다.

   ```
   ---
   system:
     rootpath: "/greengrass/v2"
     # The following values are optional. Return them from the provisioning plugin or set them here.
     # certificateFilePath: ""
     # privateKeyPath: ""
     # rootCaPath: ""
     # thingName: ""
   services:
     aws.greengrass.Nucleus:
       version: "2.17.0"
       configuration:
         # The following values are optional. Return them from the provisioning plugin or set them here.
         # awsRegion: ""
         # iotRoleAlias: ""
         # iotDataEndpoint: ""
         # iotCredEndpoint: ""
     com.example.CustomProvisioning:
       configuration:
         # You can specify configuration parameters to provide to your plugin.
         # pluginParameter: ""
   ```

   뒤이어 다음과 같이 하세요.
   + *2.17.0*을 AWS IoT Greengrass 코어 소프트웨어 버전으로 바꿉니다.
   + `/greengrass/v2`의 각 인스턴스를 Greengrass 루트 폴더로 바꿉니다.
   + (선택 사항) 시스템 및 nucleus 구성 값을 지정합니다. 이러한 값은 프로비저닝 플러그인에서 제공되지 않으면 설정해야 합니다.
   + (선택 사항) 프로비저닝 플러그인에 제공되는 구성 파라미터를 지정합니다.
**참고**  
이 구성 파일에서는 사용되는 포트 및 네트워크 프록시와 같은 기타 구성 옵션을 다음 예제와 같이 사용자 지정할 수 있습니다. 자세한 내용은 [Greengrass nucleus 구성](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)을 참조하세요.  

   ```
   ---
   system:
     rootpath: "/greengrass/v2"
     # The following values are optional. Return them from the provisioning plugin or set them here.
     # certificateFilePath: ""
     # privateKeyPath: ""
     # rootCaPath: ""
     # thingName: ""
   services:
     aws.greengrass.Nucleus:
       version: "2.17.0"
       configuration:
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "http://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
         # The following values are optional. Return them from the provisioning plugin or set them here.
         # awsRegion: ""
         # iotRoleAlias: ""
         # iotDataEndpoint: ""
         # iotCredEndpoint: ""
     com.example.CustomProvisioning:
       configuration:
         # You can specify configuration parameters to provide to your plugin.
         # pluginParameter: ""
   ```

1. 설치 관리자를 실행합니다. 사용자 지정 프로비저닝 플러그인이 제공되는 `--trusted-plugin`을 지정하고, 구성 파일이 제공되는 `--init-config`를 지정합니다.
**참고**  
Windows의 경우 260자의 경로 길이 제한이 있습니다. Windows를 사용하는 경우 루트 폴더(예: `C:\greengrass\v2` 또는 `D:\greengrass\v2`)를 사용하여 Greengrass 구성 요소 경로를 260자 제한 미만으로 유지합니다.
   + `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 Greengrass 루트 폴더로 바꿉니다.
   + 설치 프로그램을 압축 해제한 폴더로 *GreengrassInstaller*의 각 인스턴스를 바꿉니다.
   + 플러그인의 JAR 파일 경로로 사용자 지정 프로비저닝 플러그인 JAR 파일의 경로를 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin /path/to/com.example.CustomProvisioning.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --trusted-plugin /path/to/com.example.CustomProvisioning.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --trusted-plugin /path/to/com.example.CustomProvisioning.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**중요**  <a name="windows-system-service-installer-argument-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정`--setup-system-service true`하도록를 지정해야 합니다.

   <a name="installer-setup-system-service-output-message"></a>`--setup-system-service true`를 지정하면 설치 관리자는 소프트웨어를 시스템 서비스로 설정하고 실행한 경우 `Successfully set up Nucleus as a system service`를 출력합니다. 그렇지 않은 경우 소프트웨어가 성공적으로 설치되면 설치 관리자에서 메시지가 출력되지 않습니다.
**참고**  <a name="installer-deploy-dev-tools-without-provision"></a>
`--provision true` 인수 없이 설치 관리자를 실행할 때는 `deploy-dev-tools` 인수를 사용하여 로컬 개발 도구를 배포할 수 없습니다. Greengrass CLI를 디바이스에 직접 배포하는 방법에 대한 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 섹션을 참조하세요.

1. <a name="installer-verify-installation"></a>루트 폴더의 파일을 확인하여 설치를 확인합니다.

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   설치에 성공하면 루트 폴더에 `config`, `packages` 및 `logs`와 같은 여러 폴더가 포함됩니다.

<a name="install-greengrass-core-run-software"></a> AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설치한 경우 설치 관리자가 소프트웨어를 실행합니다. 그렇지 않으면 소프트웨어를 수동으로 실행해야 합니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 실행](run-greengrass-core-v2.md) 단원을 참조하십시오.

<a name="install-greengrass-core-next-steps-intro"></a>소프트웨어를 구성하고 사용하는 방법에 대한 자세한 내용은 다음을 AWS IoT Greengrass참조하세요.<a name="install-greengrass-core-next-steps-links"></a>
+ [AWS IoT Greengrass 코어 소프트웨어 구성](configure-greengrass-core-v2.md)
+ [AWS IoT Greengrass 구성 요소 개발](develop-greengrass-components.md)
+ [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md)
+ [Greengrass 명령줄 인터페이스](gg-cli.md)

# 사용자 지정 프로비저닝 플러그인 개발
<a name="develop-custom-provisioning-plugins"></a>

사용자 지정 프로비저닝 플러그인을 개발하려면 `com.aws.greengrass.provisioning.DeviceIdentityInterface` 인터페이스가 구현되는 Java 클래스를 생성합니다. 프로젝트에 Greengrass nucleus JAR 파일을 포함하여 이 인터페이스와 해당 클래스에 액세스할 수 있습니다. 이 인터페이스에서는 플러그인 구성이 입력되고 프로비저닝 구성이 출력되는 방법이 정의됩니다. 프로비저닝 구성에서는 시스템 및 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)에 대한 구성 정의됩니다. AWS IoT Greengrass 코어 소프트웨어 설치 관리자는이 프로비저닝 구성을 사용하여 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 구성합니다.

사용자 지정 프로비저닝 플러그인을 개발한 후 설치 중에 플러그인을 실행하기 위해 AWS IoT Greengrass 코어 소프트웨어 설치 프로그램에 제공할 수 있는 JAR 파일로 빌드합니다. 설치 프로그램에서는 설치 프로그램에서 사용되는 동일한 JVM에서 사용자 지정 프로비저닝 플러그인이 실행되므로 플러그인 코드만 있는 JAR를 생성할 수 있습니다.

**참고**  
[AWS IoT 플릿 프로비저닝 플러그인](fleet-provisioning.md)에서는 설치 중 플릿 프로비저닝이 사용되도록 `DeviceIdentityInterface`가 구현됩니다. 플릿 프로비저닝 플러그인은 오픈 소스이므로 소스 코드를 탐색하여 프로비저닝 플러그인 인터페이스를 사용하는 방법의 예제를 참조할 수 있습니다. 자세한 내용은 GitHub의 [AWS IoT 플릿 프로비저닝 플러그인](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim)을 참조하세요.

**Topics**
+ [요구 사항](#custom-provisioning-plugin-requirements)
+ [DeviceIdentityInterface 인터페이스 구현](#implement-device-identity-interface)

## 요구 사항
<a name="custom-provisioning-plugin-requirements"></a>

사용자 지정 프로비저닝 플러그인을 개발하려면 다음과 같은 요구 사항이 충족되는 Java 클래스를 생성해야 합니다.
+ `com.aws.greengrass` 패키지 또는 패키지 내 `com.aws.greengrass` 패키지를 사용합니다.
+ 인수가 없는 생성자가 있습니다.
+ `DeviceIdentityInterface` 인터페이스를 구현합니다. 자세한 내용은 [DeviceIdentityInterface 인터페이스 구현](#implement-device-identity-interface) 단원을 참조하십시오.

## DeviceIdentityInterface 인터페이스 구현
<a name="implement-device-identity-interface"></a>

사용자 지정 플러그인에서 `com.aws.greengrass.provisioning.DeviceIdentityInterface` 인터페이스를 사용하려면 프로젝트에 Greengrass nucleus를 종속성으로 추가합니다.

**사용자 지정 프로비저닝 플러그인 프로젝트에서 DeviceIdentityInterface를 사용하려면**
+ Greengrass nucleus JAR 파일을 라이브러리로 추가하거나 Greengrass nucleus를 Maven 종속성으로 추가할 수 있습니다. 다음 중 하나를 수행하세요.
  + Greengrass nucleus JAR 파일을 라이브러리로 추가하려면 Greengrass nucleus JAR이 포함된 AWS IoT Greengrass 코어 소프트웨어를 다운로드합니다. 다음 위치에서 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드할 수 있습니다.
    + [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

    ZIP 파일의 `lib` 폴더에서 Greengrass nucleus JAR 파일(`Greengrass.jar`)을 찾을 수 있습니다. 프로젝트에 이 JAR 파일을 추가합니다.
  + Maven 프로젝트에서 Greengrass nucleus를 사용하려면 `com.aws.greengrass` 그룹의 `nucleus` 아티팩트에서 종속성을 추가합니다. Greengrass nucleus는 Maven Central Repository에서 사용될 수 없으므로 `greengrass-common` 리포지토리도 추가해야 합니다.

    ```
    <project ...>
        ...
        <repositories>
            <repository>
                <id>greengrass-common</id>
                <name>greengrass common</name>
                <url>https://d2jrmugq4soldf.cloudfront.net/snapshots</url>
            </repository>
        </repositories>
        ...
        <dependencies>
            <dependency>
                <groupId>com.aws.greengrass</groupId>
                <artifactId>nucleus</artifactId>
                <version>2.5.0-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </project>
    ```

### DeviceIdentityInterface 인터페이스
<a name="device-identity-interface-shape"></a>

`com.aws.greengrass.provisioning.DeviceIdentityInterface` 인터페이스의 모양은 다음과 같습니다.

**참고**  
GitHub에서 [Greengrass nucleus 소스 코드](https://github.com/aws-greengrass/aws-greengrass-nucleus)의 [com.aws.greengrass.provisioning package](https://github.com/aws-greengrass/aws-greengrass-nucleus/tree/main/src/main/java/com/aws/greengrass/provisioning)에서도 이러한 클래스를 탐색할 수 있습니다.

```
public interface com.aws.greengrass.provisioning.DeviceIdentityInterface {
    ProvisionConfiguration updateIdentityConfiguration(ProvisionContext context)
            throws RetryableProvisioningException, InterruptedException;

    // Return the name of the plugin.
    String name(); 
}

com.aws.greengrass.provisioning.ProvisionConfiguration {
    SystemConfiguration systemConfiguration;
    NucleusConfiguration nucleusConfiguration    
}

com.aws.greengrass.provisioning.ProvisionConfiguration.SystemConfiguration {
    String certificateFilePath;
    String privateKeyPath;
    String rootCAPath;
    String thingName;
}

com.aws.greengrass.provisioning.ProvisionConfiguration.NucleusConfiguration {
    String awsRegion;
    String iotCredentialsEndpoint;
    String iotDataEndpoint;
    String iotRoleAlias;
}

com.aws.greengrass.provisioning.ProvisioningContext {
    Map<String, Object> parameterMap;
    String provisioningPolicy;  // The policy is always "PROVISION_IF_NOT_PROVISIONED".
}
   
com.aws.greengrass.provisioning.exceptions.RetryableProvisioningException {}
```

`SystemConfiguration` 및의 각 구성 값은 AWS IoT Greengrass 코어 소프트웨어를 설치하는 데 `NucleusConfiguration` 필요하지만를 반환할 수 있습니다`null`. 사용자 지정 프로비저닝 플러그인이 구성 값에 `null` 대해를 반환하는 경우 AWS IoT Greengrass 코어 소프트웨어 설치 프로그램에 제공할 `config.yaml` 파일을 생성할 때 시스템 또는 nucleus 구성에 해당 값을 제공해야 합니다. `config.yaml`에서도 정의한 옵션에 대해 null이 아닌 값이 사용자 지정 프로비저닝 플러그인이 반환되면 설치 프로그램에서는 플러그인에서 반환된 값으로 `config.yaml`의 값이 바뀝니다.

# 설치 프로그램 인수
<a name="configure-installer"></a>

AWS IoT Greengrass 코어 소프트웨어에는 소프트웨어가 설정되고 Greengrass 코어 디바이스에서 실행될 필수 AWS 리소스가 프로비저닝되는 설치 프로그램이 포함되어 있습니다. 설치 프로그램에는 지정하여 설치를 구성할 수 있는 다음 인수가 포함되어 있습니다.

`-h`, `--help`  
(선택 사항) 설치 프로그램의 도움말 정보를 표시합니다.

`--version`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어의 버전을 표시합니다.

`-Droot`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어의 루트로 사용할 폴더의 경로입니다.  
이 인수를 통해 JVM 속성이 설정되므로 설치 프로그램을 실행할 때 `-jar` 앞에 지정해야 합니다. 예를 들어, `java -Droot="/greengrass/v2" -jar /path/to/Greengrass.jar`를 지정합니다.
기본값:  
+ Linux: `~/.greengrass`
+ Windows: `%USERPROFILE%/.greengrass`

`-ar`, `--aws-region`  
AWS IoT Greengrass 코어 소프트웨어에서 필수 AWS 리소스를 검색하거나 생성하는 데 사용되는 AWS 리전입니다.

`-p`, `--provision`  
(선택 사항) 이 디바이스를 AWS IoT 사물로 등록하고 코어 디바이스에 필요한 AWS 리소스를 프로비저닝할 수 있습니다. `true`를 지정하면 AWS IoT Greengrass 코어 소프트웨어에서는 AWS IoT 사물, AWS IoT 사물 그룹(선택 사항), IAM 역할 및 AWS IoT 역할 별칭이 프로비저닝됩니다.  
기본값: `false`

`-tn`, `--thing-name`  
(선택 사항) 이 코어 디바이스로 등록하는 AWS IoT 사물의 이름입니다. 이름 있는 정책이 AWS 계정에 없으면 AWS IoT Greengrass 코어 소프트웨어에서 생성됩니다.  
사물 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.
이 인수를 적용하려면 `--provision true`를 지정해야 합니다.  
기본값: `GreengrassV2IotThing_` 및 무작위 UUID.

`-tgn`, `--thing-group-name`  
(선택 사항) 이 코어 디바이스의 AWS IoT 사물을 추가하는 AWS IoT 사물 그룹의 이름입니다. 배포의 대상이 이 사물 그룹이라면 이 코어 디바이스에서는 AWS IoT Greengrass에 연결될 때 해당 배포가 수신됩니다. 이 이름의 사물 그룹이 AWS 계정에 없으면 AWS IoT Greengrass 코어 소프트웨어에서 생성됩니다.  
사물 그룹 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.
이 인수를 적용하려면 `--provision true`를 지정해야 합니다.

`-tpn`, `--thing-policy-name`  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) v2.4.0 이상에서 사용할 수 있습니다.  
(선택 사항) 이 코어 디바이스의 AWS IoT 사물 인증서에 연결할 AWS IoT 정책의 이름입니다. 이 이름의 AWS IoT 정책이 AWS 계정에 없으면 AWS IoT Greengrass 코어 소프트웨어에서 생성됩니다.  
AWS IoT Greengrass 코어 소프트웨어에서는 기본적으로 허용적 AWS IoT 정책이 생성됩니다. 이 정책의 범위를 좁히거나 사용 사례에 대한 권한을 제한하는 사용자 지정 정책을 생성할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass V2 코어 디바이스에 대한 최소 AWS IoT 정책](device-auth.md#greengrass-core-minimal-iot-policy) 섹션을 참조하세요.  
이 인수를 적용하려면 `--provision true`를 지정해야 합니다.  
기본값: `GreengrassV2IoTThingPolicy`

`-trn`, `--tes-role-name`  
(선택 사항) 코어 디바이스에서 AWS 서비스와 상호 작용할 수 있도록 AWS 자격 증명을 획득하는 데 사용할 IAM 역할의 이름입니다. 이 이름의 역할이 AWS 계정에 없으면 AWS IoT Greengrass 코어 소프트웨어에서 `GreengrassV2TokenExchangeRoleAccess` 정책을 통해 생성됩니다. 이 역할에는 구성 요소 아티팩트를 호스팅하는 S3 버킷에 액세스할 권한이 없습니다. 따라서 구성 요소를 생성할 때 아티팩트의 S3 버킷과 객체에 권한을 추가해야 합니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 섹션을 참조하세요.  
이 인수를 적용하려면 `--provision true`를 지정해야 합니다.  
기본값: `GreengrassV2TokenExchangeRole`

`-tra`, `--tes-role-alias-name`  
(선택 사항) 이 코어 디바이스에 대한 AWS 자격 증명을 제공하는 IAM 역할을 지목하는 AWS IoT 역할 별칭의 이름입니다. 이 이름의 역할 별칭이 AWS 계정에 없으면 AWS IoT Greengrass 코어 소프트웨어에서 생성되며, 지정하는 IAM 역할이 지목됩니다.  
이 인수를 적용하려면 `--provision true`를 지정해야 합니다.  
기본값: `GreengrassV2TokenExchangeRoleAlias`

`-ss`, `--setup-system-service`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어를 이 디바이스가 부팅될 때 실행되는 시스템 서비스로 설정할 수 있습니다. 시스템 서비스 이름은 `greengrass`입니다. 자세한 내용은 [Greengrass nucleus를 시스템 서비스로 구성](configure-greengrass-core-v2.md#configure-system-service) 섹션을 참조하세요.  
Linux 운영 체제에서 이 인수를 사용하려면 디바이스에서 systemd init 시스템을 사용할 수 있어야 합니다.  
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.
기본값: `false`

`-u`, `--component-default-user`  
AWS IoT Greengrass 코어 소프트웨어에서 구성 요소 실행에 사용되는 사용자의 이름 또는 ID입니다. 예를 들어, **ggc\$1user**를 지정할 수 있습니다. Windows 운영 체제에서 설치 프로그램을 실행할 때 이 값이 필요합니다.  
Linux 운영 체제에서는 선택적으로 그룹을 지정할 수도 있습니다. 콜론으로 구분되는 사용자 및 그룹을 지정합니다. 예를 들어 **ggc\$1user:ggc\$1group**입니다.  

Linux 운영 체제에는 다음 추가 고려 사항이 적용됩니다.
+ 루트로 실행하는 경우 기본 구성 요소 사용자는 구성 파일에 정의되어 있는 사용자입니다. 구성 파일에서 사용자가 정의되지 않으면 이 기본값은 `ggc_user:ggc_group`으로 설정됩니다. `ggc_user` 또는 `ggc_group`이 없으면 소프트웨어에서 생성합니다.
+ 루트 사용자가 아닌 사용자로 실행하면 AWS IoT Greengrass 코어 소프트웨어에서는 해당 사용자가 구성 요소 실행에 사용됩니다.
+ 그룹을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어에서는 시스템 사용자의 기본 그룹이 사용됩니다.
자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 섹션을 참조하세요.

`-d`, `--deploy-dev-tools`  
(선택 사항) [Greengrass CLI](greengrass-cli-component.md) 구성 요소를 다운로드하여 이 코어 디바이스에 배포할 수 있습니다. 이 도구를 사용하여 이 코어 디바이스에서 구성 요소를 개발하고 디버깅할 수 있습니다.  
 <a name="local-dev-tools-production-environment-warning"></a>이 구성 요소는 프로덕션 환경이 아닌 개발 환경에서만 사용하는 것이 좋습니다. 이 구성 요소는 일반적으로 프로덕션 환경에서는 필요하지 않은 정보와 작업에 대한 액세스를 제공합니다. 필요한 코어 디바이스에만 이 구성 요소를 배포하여 최소 권한 원칙을 따릅니다.
이 인수를 적용하려면 `--provision true`를 지정해야 합니다.  
기본값: `false`

`-init`, `--init-config`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어를 설치하는 데 사용할 구성 파일의 경로입니다. 예를 들어 이 옵션을 사용하여 특정 nucleus 구성으로 새 코어 디바이스를 설정할 수 있습니다.  
지정하는 구성 파일은 코어 디바이스의 기존 구성 파일과 병합됩니다. 여기에는 코어 디바이스의 구성 요소 및 구성 요소 구성이 포함됩니다. 구성 파일에는 변경하려는 구성만 나열되는 것이 좋습니다.

`-tp`, `--trusted-plugin`  
(선택 사항) 신뢰할 수 있는 플러그인으로 로드할 JAR 파일의 경로입니다. 이 옵션을 사용하여 예컨대 [플릿 프로비저닝](fleet-provisioning.md) 또는 [사용자 지정 프로비저닝](custom-provisioning.md)으로 설치하거나 프라이빗 키 및 인증서로 [하드웨어 보안 모듈](hardware-security.md)에 설치할 프로비저닝 플러그인 JAR 파일을 제공합니다.

`-s`, `--start`  
(선택 사항) 설치하고 선택적으로 리소스를 프로비저닝한 후 AWS IoT Greengrass 코어 소프트웨어를 시작할 수 있습니다.  
기본값: `true`

# AWS IoT Greengrass 코어 소프트웨어 실행
<a name="run-greengrass-core-v2"></a>

[AWS IoT Greengrass 코어 소프트웨어를 설치한](install-greengrass-core-v2.md) 후 실행하여 디바이스를 연결합니다 AWS IoT Greengrass.

 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 [systemd](https://en.wikipedia.org/wiki/Systemd)를 사용하여 시스템 서비스로 설치할지 여부를 지정할 수 있습니다. 이 옵션을 선택하면 설치 관리자가 소프트웨어를 실행하고 디바이스 부팅 시 이를 실행하도록 구성합니다.

**중요**  <a name="windows-system-service-requirement-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.

**Topics**
+ [AWS IoT Greengrass 코어 소프트웨어가 시스템 서비스로 실행되는지 확인](#check-system-service)
+ [AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 실행](#run-greengrass-core-system-service)
+ [시스템 서비스 없이 AWS IoT Greengrass 코어 소프트웨어 실행](#run-greengrass-core-no-system-service)

## AWS IoT Greengrass 코어 소프트웨어가 시스템 서비스로 실행되는지 확인
<a name="check-system-service"></a>

 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 `--setup-system-service true` 인수를 지정하여 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설치할 수 있습니다. Linux 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정하려면 [systemd](https://en.wikipedia.org/wiki/Systemd) init 시스템이 필요합니다. 이 옵션을 사용하면 설치 관리자가 소프트웨어를 실행하고 디바이스 부팅 시 이를 실행하도록 구성합니다. AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 성공적으로 설치하면 설치 관리자가 다음 메시지를 출력합니다.

```
Successfully set up Nucleus as a system service
```

이전에 AWS IoT Greengrass 코어 소프트웨어를 설치했지만 설치 관리자 출력이 없는 경우 소프트웨어가 시스템 서비스로 설치되었는지 확인할 수 있습니다.

**AWS IoT Greengrass 코어 소프트웨어가 시스템 서비스로 설치되어 있는지 확인하려면**
+ 다음 명령을 실행하여 Greengrass 시스템 서비스의 상태를 확인합니다.

------
#### [ Linux or Unix (systemd) ]

  ```
  sudo systemctl status greengrass.service
  ```

   AWS IoT Greengrass 코어 소프트웨어가 시스템 서비스로 설치되고 활성 상태인 경우 응답은 다음 예제와 유사합니다.

  ```
  ● greengrass.service - Greengrass Core
     Loaded: loaded (/etc/systemd/system/greengrass.service; enabled; vendor preset: disabled)
     Active: active (running) since Thu 2021-02-11 01:33:44 UTC; 4 days ago
   Main PID: 16107 (sh)
     CGroup: /system.slice/greengrass.service
             ├─16107 /bin/sh /greengrass/v2/alts/current/distro/bin/loader
             └─16111 java -Dlog.store=FILE -Droot=/greengrass/v2 -jar /greengrass/v2/alts/current/distro/lib/Greengrass...
  ```

  `systemctl` 또는 `greengrass.service`를 찾을 수 없는 경우 AWS IoT Greengrass 코어 소프트웨어는 시스템 서비스로 설치되지 않습니다. 소프트웨어를 실행하려면 [시스템 서비스 없이 AWS IoT Greengrass 코어 소프트웨어 실행](#run-greengrass-core-no-system-service) 섹션을 참조하세요.

------
#### [ Windows Command Prompt (CMD) ]

  ```
  sc query greengrass
  ```

   AWS IoT Greengrass 코어 소프트웨어가 Windows 서비스로 설치되고 활성 상태인 경우 응답은 다음 예제와 유사합니다.

  ```
  SERVICE_NAME: greengrass
          TYPE               : 10  WIN32_OWN_PROCESS
          STATE              : 4  RUNNING
                                  (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
          WIN32_EXIT_CODE    : 0  (0x0)
          SERVICE_EXIT_CODE  : 0  (0x0)
          CHECKPOINT         : 0x0
          WAIT_HINT          : 0x0
  ```

------
#### [ PowerShell ]

  ```
  Get-Service greengrass
  ```

   AWS IoT Greengrass 코어 소프트웨어가 Windows 서비스로 설치되고 활성 상태인 경우 응답은 다음 예제와 유사합니다.

  ```
  Status   Name               DisplayName
  ------   ----               -----------
  Running  greengrass         greengrass
  ```

------

## AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 실행
<a name="run-greengrass-core-system-service"></a>

 AWS IoT Greengrass 코어 소프트웨어가 시스템 서비스로 설치된 경우 시스템 서비스 관리자를 사용하여 소프트웨어를 시작, 중지 및 관리할 수 있습니다. 자세한 내용은 [Greengrass nucleus를 시스템 서비스로 구성](configure-greengrass-core-v2.md#configure-system-service) 단원을 참조하십시오.

**AWS IoT Greengrass 코어 소프트웨어를 실행하려면**
+ 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어를 시작합니다.

------
#### [ Linux or Unix (systemd) ]

  ```
  sudo systemctl start greengrass.service
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  sc start greengrass
  ```

------
#### [ PowerShell ]

  ```
  Start-Service greengrass
  ```

------

## 시스템 서비스 없이 AWS IoT Greengrass 코어 소프트웨어 실행
<a name="run-greengrass-core-no-system-service"></a>

Linux 코어 디바이스에서 AWS IoT Greengrass 코어 소프트웨어가 시스템 서비스로 설치되지 않은 경우 소프트웨어의 로더 스크립트를 실행하여 소프트웨어를 실행할 수 있습니다.

**시스템 서비스 없이 AWS IoT Greengrass 코어 소프트웨어를 실행하려면**
+ 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어를 시작합니다. 터미널에서이 명령을 실행하는 경우 AWS IoT Greengrass 코어 소프트웨어를 계속 실행하려면 터미널 세션을 열어 두어야 합니다.
  + `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 사용하는 Greengrass 루트 폴더로 바꿉니다.

  ```
  sudo /greengrass/v2/alts/current/distro/bin/loader
  ```

  소프트웨어가 성공적으로 시작되면 다음 메시지를 인쇄합니다.

  ```
  Launched Nucleus successfully.
  ```

# Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 실행
<a name="run-greengrass-docker"></a>

AWS IoT Greengrass 는 Docker 컨테이너에서 실행되도록 구성할 수 있습니다. Docker는 Linux 컨테이너를 기반으로 하는 애플리케이션을 빌드, 실행, 테스트, 배포할 수 있는 도구를 제공하는 플랫폼입니다. AWS IoT Greengrass Docker 이미지를 실행할 때 자격 AWS 증명을 Docker 컨테이너에 제공할지 여부를 선택하고 AWS IoT Greengrass 코어 소프트웨어 설치 관리자가 Greengrass 코어 디바이스가 작동하는 데 필요한 리소스를 자동으로 프로비저닝 AWS 하도록 허용할 수 있습니다. 자격 증명을 제공하지 AWS 않으려면 AWS 리소스를 수동으로 프로비저닝하고 Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어를 실행할 수 있습니다.

**Topics**
+ [지원되는 플랫폼 및 요구 사항](#greengrass-docker-supported-platforms)
+ [소프트웨어 다운로드](#greengrass-docker-downloads)
+ [AWS 리소스를 프로비저닝하는 방법 선택](#greengrass-docker-resource-provisioning)
+ [Dockerfile에서 AWS IoT Greengrass 이미지 빌드](build-greengrass-dockerfile.md)
+ [자동 프로비저닝을 사용하여 Docker AWS IoT Greengrass 에서 실행](run-greengrass-docker-automatic-provisioning.md)
+ [수동 프로비저닝을 사용하여 Docker AWS IoT Greengrass 에서 실행](run-greengrass-docker-manual-provisioning.md)
+ [Docker 컨테이너 AWS IoT Greengrass 의 문제 해결](docker-troubleshooting.md)

## 지원되는 플랫폼 및 요구 사항
<a name="greengrass-docker-supported-platforms"></a>

Docker 컨테이너에 AWS IoT Greengrass 코어 소프트웨어를 설치하고 실행하려면 호스트 컴퓨터가 다음과 같은 최소 요구 사항을 충족해야 합니다.
+ <a name="docker-host-reqs"></a>인터넷에 연결된 Linux 기반 운영 체제.
+ <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) 버전 18.09 이상.
+ <a name="docker-compose-reqs"></a>(선택 사항) [Docker Compose](https://docs.docker.com/compose/install/) 버전 1.22 이상. Docker Compose는 Docker Compose CLI를 사용하여 Docker 이미지를 실행하려는 경우에만 필요합니다.

Docker 컨테이너 내에서 Lambda 함수 구성 요소를 실행하려면 추가 요구 사항을 충족하도록 컨테이너를 구성해야 합니다. 자세한 내용은 [Lambda 함수 요구 사항](setting-up.md#greengrass-v2-lambda-requirements) 단원을 참조하십시오.

### 프로세스 모드에서 구성 요소 실행
<a name="docker-container-mode-limitation"></a>

AWS IoT Greengrass 는 AWS IoT Greengrass Docker 컨테이너 내의 격리된 런타임 환경에서 Lambda 함수 또는 AWS제공 구성 요소의 실행을 지원하지 않습니다. 이러한 구성 요소는 격리 없이 프로세스 모드에서 실행해야 합니다.

Lambda 함수 구성 요소를 구성하는 경우 격리 모드를 **컨테이너 없음**으로 설정합니다. 자세한 내용은 [AWS Lambda 함수 실행](run-lambda-functions.md) 단원을 참조하십시오.

다음 AWS제공 구성 요소를 배포할 때 `containerMode` 파라미터를 로 설정하도록 각 구성 요소의 구성을 업데이트합니다`NoContainer`. 구성 업데이트에 대한 자세한 내용은 [구성 요소 구성 업데이트](update-component-configurations.md) 섹션을 참조하세요.
+ [CloudWatch 지표](cloudwatch-metrics-component.md)
+ [Device Defender](device-defender-component.md)
+ [Firehose](kinesis-firehose-component.md)
+ [Modbus-RTU 프로토콜 어댑터](modbus-rtu-protocol-adapter-component.md)
+ [Amazon SNS](sns-component.md)

## AWS IoT Greengrass Docker 소프트웨어 다운로드
<a name="greengrass-docker-downloads"></a>

AWS IoT Greengrass 는 Amazon Linux 2(x86\$164) 기본 이미지에 AWS IoT Greengrass 코어 소프트웨어 및 종속성이 설치된 컨테이너 이미지를 빌드하기 위한 Dockerfile을 제공합니다. 다른 플랫폼 아키텍처에서 실행되도록 Dockerfile의 기본 이미지를 수정할 수 AWS IoT Greengrass 있습니다.

[GitHub](https://github.com/aws-greengrass/aws-greengrass-docker)에서 Dockerfile 패키지를 다운로드합니다.

Dockerfile은 Greengrass의 이전 버전을 사용합니다. 원하는 Greengrass 버전을 사용하도록 파일을 업데이트해야 합니다. Dockerfile에서 AWS IoT Greengrass 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 섹션을 참조하세요[Dockerfile에서 AWS IoT Greengrass 컨테이너 이미지 빌드](build-greengrass-dockerfile.md).

## AWS 리소스를 프로비저닝하는 방법 선택
<a name="greengrass-docker-resource-provisioning"></a>

Docker 컨테이너에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 Greengrass 코어 디바이스가 작동하는 데 필요한 AWS 리소스를 자동으로 프로비저닝할지 아니면 수동으로 프로비저닝하는 리소스를 사용할지 선택할 수 있습니다.
+ **자동 리소스 프로비저닝** - AWS IoT Greengrass 컨테이너 이미지를 처음 실행할 때 설치 관리자가 AWS IoT 사물, AWS IoT 사물 그룹, IAM 역할 및 AWS IoT 역할 별칭을 프로비저닝합니다. 설치 관리자는 또한 로컬 개발 도구를 코어 디바이스에 배포할 수 있으므로 디바이스를 사용하여 사용자 지정 소프트웨어 구성 요소를 개발하고 테스트할 수 있습니다. 이러한 리소스를 자동으로 프로비저닝하려면 Docker 이미지에 환경 변수로 AWS 자격 증명을 제공해야 합니다.

  자동 프로비저닝을 사용하려면 Docker 환경 변수(`PROVISION=true`)를 설정하고 자격 증명 파일을 탑재하여 컨테이너에 AWS 자격 증명을 제공해야 합니다.
+ **수동 리소스 프로비저닝** - 컨테이너에 AWS 자격 증명을 제공하지 않으려면 AWS IoT Greengrass 컨테이너 이미지를 실행하기 전에 리소스를 수동으로 프로비저닝 AWS 할 수 있습니다. 이러한 리소스에 대한 정보를 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 프로그램에 제공하려면 구성 파일을 생성해야 합니다.

  수동 프로비저닝을 사용하려면 Docker 환경 변수(`PROVISION=false`)를 설정해야 합니다. 수동 프로비저닝이 기본 옵션입니다.

자세한 내용은 [Dockerfile에서 AWS IoT Greengrass 컨테이너 이미지 빌드](build-greengrass-dockerfile.md) 단원을 참조하십시오.

# Dockerfile에서 AWS IoT Greengrass 컨테이너 이미지 빌드
<a name="build-greengrass-dockerfile"></a>

AWS 는 Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어를 실행하기 위해 다운로드하고 사용할 수 있는 Dockerfile을 제공합니다. Dockerfiles에는 AWS IoT Greengrass 컨테이너 이미지를 빌드하기 위한 소스 코드가 포함되어 있습니다.

 AWS IoT Greengrass 컨테이너 이미지를 빌드하기 전에 설치할 AWS IoT Greengrass 코어 소프트웨어 버전을 선택하도록 Dockerfile을 구성해야 합니다. 환경 변수를 구성하여 설치 중 리소스를 프로비저닝하는 방법을 선택하고 다른 설치 옵션을 사용자 지정할 수도 있습니다. 이 섹션에서는 AWS IoT Greengrass Dockerfile에서 Docker 이미지를 구성하고 빌드하는 방법을 설명합니다.



## Dockerfile 패키지 다운로드
<a name="download-dockerfile-package"></a>

GitHub에서 AWS IoT Greengrass Dockerfile 패키지를 다운로드할 수 있습니다.

[AWS Greengrass Docker 리포지토리](https://github.com/aws-greengrass/aws-greengrass-docker)

패키지를 다운로드한 후 컴퓨터의 `download-directory/aws-greengrass-docker-nucleus-version` 폴더에 내용을 추출합니다. Dockerfile은 Greengrass의 이전 버전을 사용합니다. 원하는 Greengrass 버전을 사용하도록 파일을 업데이트해야 합니다.

## AWS IoT Greengrass 코어 소프트웨어 버전 지정
<a name="set-dockerfile-build-argument"></a>

Dockerfile에서 다음 빌드 인수를 사용하여 AWS IoT Greengrass Docker 이미지에 사용할 AWS IoT Greengrass 코어 소프트웨어의 버전을 지정합니다. 기본적으로 Dockerfile은 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 사용합니다.

`GREENGRASS_RELEASE_VERSION`  
 AWS IoT Greengrass 코어 소프트웨어의 버전입니다. 기본적으로 Dockerfile에서는 Greengrass nucleus의 사용 가능한 최신 버전이 다운로드됩니다. 다운로드하려는 nucleus의 버전으로 값을 설정합니다.

## 환경 변수 설정
<a name="set-dockerfile-environment-variables"></a>

환경 변수를 사용하면 AWS IoT Greengrass 코어 소프트웨어가 Docker 컨테이너에 설치되는 방식을 사용자 지정할 수 있습니다. 다양한 방법으로 AWS IoT Greengrass 도커 이미지의 환경 변수를 설정할 수 있습니다.
+ 동일한 환경 변수를 사용하여 여러 이미지를 생성하려면 Dockerfile에서 곧바로 환경 변수를 설정합니다.
+ `docker run`을 사용하여 컨테이너를 시작하는 경우 환경 변수를 명령의 인수로 전달하거나 환경 변수 파일에서 환경 변수를 설정한 다음에 파일을 인수로 전달합니다. Docker에서 환경 변수를 설정하는 방법에 대한 자세한 내용은 Docker 설명서의 [환경 변수](https://docs.docker.com/engine/reference/commandline/run/#env)를 참조하세요.
+ `docker-compose up`을 사용하여 컨테이너를 시작하는 경우 환경 변수 파일에서 환경 변수를 설정한 다음에 파일을 인수로 전달합니다. Compose에서 환경 변수를 설정하는 방법에 대한 자세한 내용은 [Docker 설명서](https://docs.docker.com/compose/environment-variables/)를 참조하세요.

 AWS IoT Greengrass Docker 이미지에 대해 다음 환경 변수를 구성할 수 있습니다.

**참고**  
Dockerfile에서 `TINI_KILL_PROCESS_GROUP` 변수는 수정하지 마세요. 이 변수를 사용하면 PIDs 그룹의 모든 PID`SIGTERM`로 전달할 수 있으므로 Docker 컨테이너가 중지될 때 AWS IoT Greengrass 코어 소프트웨어가 올바르게 종료될 수 있습니다.

`GGC_ROOT_PATH`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어의 루트로 사용할 컨테이너 내 폴더의 경로입니다.  
기본값: `/greengrass/v2`

`PROVISION`  
(선택 사항) AWS IoT Greengrass 코어가 AWS 리소스를 프로비저닝할지 여부를 결정합니다.  
+ 를 지정하면 `true` AWS IoT Greengrass 코어 소프트웨어는 컨테이너 이미지를 AWS IoT 사물로 등록하고 Greengrass 코어 디바이스에 필요한 AWS 리소스를 프로비저닝합니다. AWS IoT Greengrass 코어 소프트웨어는 AWS IoT 사물, AWS IoT 사물 그룹(선택 사항), IAM 역할 및 AWS IoT 역할 별칭을 프로비저닝합니다. 자세한 내용은 [자동 리소스 프로비저닝을 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행](run-greengrass-docker-automatic-provisioning.md) 단원을 참조하십시오.
+ 를 지정하는 경우 수동으로 생성한 AWS 리소스와 인증서를 사용하도록 지정하는 구성 파일을 생성하여 AWS IoT Greengrass 코어 설치 프로그램에 제공해야 `false`합니다. 자세한 내용은 [수동 리소스 프로비저닝을 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행](run-greengrass-docker-manual-provisioning.md) 단원을 참조하십시오.
기본값: `false`

`AWS_REGION`  
(선택 사항) AWS 리전 AWS IoT Greengrass 코어 소프트웨어가 필요한 AWS 리소스를 검색하거나 생성하는 데 사용하는 입니다.  
기본값: `us-east-1`.

`THING_NAME`  
(선택 사항)이 코어 디바이스로 등록하는 AWS IoT 사물의 이름입니다. 이 이름의 사물이에 없으면 AWS 계정 AWS IoT Greengrass 코어 소프트웨어가 생성합니다.  
이 인수를 적용하려면 `PROVISION=true`를 지정해야 합니다.  
기본값: `GreengrassV2IotThing_` 및 무작위 UUID.

`THING_GROUP_NAME`  
(선택 사항)이 코어 디바이스 AWS IoT 의를 추가하는 AWS IoT 사물 그룹의 이름 배포가이 사물 그룹을 대상으로 하는 경우 해당 그룹의이 및 기타 코어 디바이스는 연결될 때 해당 배포를 수신합니다 AWS IoT Greengrass. 이 이름의 사물 그룹이에 없는 경우 AWS 계정 AWS IoT Greengrass 코어 소프트웨어가 이를 생성합니다.  
이 인수를 적용하려면 `PROVISION=true`를 지정해야 합니다.

`TES_ROLE_NAME`  
(선택 사항) Greengrass 코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 자격 AWS 증명을 획득하는 데 사용할 IAM 역할의 이름입니다. 이 이름의 역할이에 없는 경우 AWS 계정 AWS IoT Greengrass 코어 소프트웨어가 `GreengrassV2TokenExchangeRoleAccess` 정책을 사용하여 생성합니다. 이 역할에는 구성 요소 아티팩트를 호스팅하는 S3 버킷에 액세스할 권한이 없습니다. 따라서 구성 요소를 생성할 때 아티팩트의 S3 버킷과 객체에 권한을 추가해야 합니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.  
기본값: `GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
(선택 사항) Greengrass 코어 디바이스에 대한 AWS 자격 증명을 제공하는 IAM 역할을 가리키는 역할 AWS IoT 별칭의 이름입니다. 이 이름의 역할 별칭이에 없는 경우 AWS 계정 AWS IoT Greengrass 코어 소프트웨어가 이를 생성하고 지정한 IAM 역할을 가리킵니다.  
기본값: `GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 실행하는 데 사용하는 시스템 사용자 및 그룹의 이름 또는 ID입니다. 콜론으로 구분되는 사용자 및 그룹을 지정합니다. 그룹은 선택 사항입니다. 예를 들어 **ggc\$1user:ggc\$1group** 또는 **ggc\$1user**를 지정할 수 있습니다.  
+ 루트로 실행하면 구성 파일에서 정의되는 사용자 및 그룹으로 이 기본값이 설정됩니다. 구성 파일에서 사용자 및 그룹이 정의되지 않으면 이 기본값은 `ggc_user:ggc_group`으로 설정됩니다. `ggc_user` 또는 `ggc_group`이 없으면 소프트웨어에서 생성합니다.
+ 루트가 아닌 사용자로를 실행하는 경우 AWS IoT Greengrass 코어 소프트웨어는 해당 사용자를 사용하여 구성 요소를 실행합니다.
+ 그룹을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 시스템 사용자의 기본 그룹을 사용합니다.
자세한 내용은 [구성 요소를 실행하는 사용자 구성](configure-greengrass-core-v2.md#configure-component-user) 단원을 참조하십시오.

`DEPLOY_DEV_TOOLS`  
컨테이너 이미지에서 [Greengrass CLI 구성 요소](greengrass-cli-component.md)를 다운로드하고 배포할지 여부를 정의합니다. Greengrass CLI를 사용하여 로컬에서 구성 요소를 개발하고 디버깅할 수 있습니다.  
 <a name="local-dev-tools-production-environment-warning"></a>이 구성 요소는 프로덕션 환경이 아닌 개발 환경에서만 사용하는 것이 좋습니다. 이 구성 요소는 일반적으로 프로덕션 환경에서는 필요하지 않은 정보와 작업에 대한 액세스를 제공합니다. 필요한 코어 디바이스에만 이 구성 요소를 배포하여 최소 권한 원칙을 따릅니다.
기본값: `false`

`INIT_CONFIG`  
(선택 사항) AWS IoT Greengrass 코어 소프트웨어를 설치하는 데 사용할 구성 파일의 경로입니다. 예를 들어 이 옵션을 사용하여 특정 nucleus 구성으로 새 Greengrass 코어 디바이스를 설정하거나 수동으로 프로비저닝한 리소스를 지정할 수 있습니다. 이 인수에서 지정하는 경로에 구성 파일을 탑재해야 합니다.

`TRUSTED_PLUGIN`  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) v2.4.0 이상에서 사용할 수 있습니다.  
(선택 사항) 신뢰할 수 있는 플러그인으로 로드할 JAR 파일의 경로입니다. [플릿 프로비저닝](fleet-provisioning.md) 또는 [사용자 지정](custom-provisioning.md) 프로비저닝과 함께 설치할 정도로 프로비저닝 플러그인 JAR 파일을 제공하려면 이 옵션을 사용합니다.

`THING_POLICY_NAME`  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) v2.4.0 이상에서 사용할 수 있습니다.  
(선택 사항)이 코어 디바이스의 AWS IoT 사물 인증서에 연결할 AWS IoT 정책의 이름입니다. AWS IoT Greengrass 코어 소프트웨어에이 이름 AWS 계정 의 AWS IoT 정책이 없는 경우 정책이 생성됩니다.  
이 인수를 적용하려면 `PROVISION=true`를 지정해야 합니다.  
 AWS IoT Greengrass 코어 소프트웨어는 기본적으로 허용 AWS IoT 정책을 생성합니다. 이 정책의 범위를 좁히거나 사용 사례에 대한 권한을 제한하는 사용자 지정 정책을 생성할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass V2 코어 디바이스에 대한 최소 AWS IoT 정책](device-auth.md#greengrass-core-minimal-iot-policy) 단원을 참조하십시오.

## 설치할 종속성 지정
<a name="dockerfile-run-instruction"></a>

 AWS IoT Greengrass Dockerfile의 RUN 명령은 AWS IoT Greengrass 코어 소프트웨어 설치 관리자를 실행하기 위해 컨테이너 환경을 준비합니다. AWS IoT Greengrass 코어 소프트웨어 설치 프로그램이 Docker 컨테이너에서 실행되기 전에 설치되는 종속성을 사용자 지정할 수 있습니다.

## AWS IoT Greengrass 이미지 빌드
<a name="build-greengrass-docker-image"></a>

 AWS IoT Greengrass Dockerfile을 사용하여 AWS IoT Greengrass 컨테이너 이미지를 빌드합니다. Docker CLI 또는 Docker Compose CLI를 사용하여 이미지를 빌드하고 컨테이너를 시작할 수 있습니다. Docker CLI를 사용하여 이미지를 빌드한 다음에 Docker Compose를 사용하여 해당 이미지로부터 컨테이너를 시작할 수도 있습니다.

------
#### [ Docker ]

1. 호스트 머신에서 다음 명령을 실행하여 구성된 Dockerfile이 있는 디렉터리로 전환합니다.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. 다음 명령을 실행하여 Dockerfile에서 AWS IoT Greengrass 컨테이너 이미지를 빌드합니다.

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. 호스트 머신에서 다음 명령을 실행하여 Dockerfile과 Compose 파일이 있는 디렉터리로 전환합니다.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. 다음 명령을 실행하여 Compose 파일을 사용하여 AWS IoT Greengrass 컨테이너 이미지를 빌드합니다.

   ```
   docker-compose -f docker-compose.yml build
   ```

------

 AWS IoT Greengrass 컨테이너 이미지를 성공적으로 생성했습니다. Docker 이미지에는 AWS IoT Greengrass 코어 소프트웨어가 설치되어 있습니다. 이제 Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어를 실행할 수 있습니다.

# 자동 리소스 프로비저닝을 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행
<a name="run-greengrass-docker-automatic-provisioning"></a>

이 자습서에서는 자동으로 프로비저닝된 AWS 리소스 및 로컬 개발 도구를 사용하여 Docker 컨테이너에 AWS IoT Greengrass 코어 소프트웨어를 설치하고 실행하는 방법을 보여줍니다. 이 개발 환경을 사용하여 Docker 컨테이너의 AWS IoT Greengrass 기능을 탐색할 수 있습니다. 소프트웨어가 이러한 리소스를 프로비저닝하고 로컬 개발 도구를 배포하려면 AWS 자격 증명이 필요합니다.

컨테이너에 AWS 자격 증명을 제공할 수 없는 경우 코어 디바이스가 AWS 작동하는 데 필요한 리소스를 프로비저닝할 수 있습니다. 개발 도구를 코어 디바이스에 배포하여 개발 디바이스로 사용할 수도 있습니다. 이렇게 하면 컨테이너 실행 시 디바이스에 더 적은 권한을 제공할 수 있습니다. 자세한 내용은 [수동 리소스 프로비저닝을 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행](run-greengrass-docker-manual-provisioning.md) 단원을 참조하십시오.



## 사전 조건
<a name="docker-automatic-provisioning-prereqs"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+  AWS 계정. 없으면 [설정 AWS 계정](setting-up.md#set-up-aws-account) 섹션을 참조하세요.
+ Greengrass 코어 디바이스에 대한 AWS IoT 및 AWS IAM 리소스를 프로비저닝할 권한이 있는 IAM 사용자입니다. AWS IoT Greengrass 코어 소프트웨어 설치 관리자는 자격 AWS 증명을 사용하여 이러한 리소스를 자동으로 프로비저닝합니다. 리소스를 자동으로 프로비저닝하기 위한 최소 IAM 정책에 대한 자세한 내용은 [설치 관리자가 리소스를 프로비저닝하기 위한 최소 IAM 정책](provision-minimal-iam-policy.md) 섹션을 참조하세요.
+  AWS IoT Greengrass Docker 이미지. [AWS IoT Greengrass Dockerfile에서 이미지를 빌드할](build-greengrass-dockerfile.md) 수 있습니다.
+ Docker 컨테이너를 실행하는 호스트 컴퓨터는 다음과 같은 요구 사항을 충족해야 합니다.
  + <a name="docker-host-reqs"></a>인터넷에 연결된 Linux 기반 운영 체제.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) 버전 18.09 이상.
  + <a name="docker-compose-reqs"></a>(선택 사항) [Docker Compose](https://docs.docker.com/compose/install/) 버전 1.22 이상. Docker Compose는 Docker Compose CLI를 사용하여 Docker 이미지를 실행하려는 경우에만 필요합니다.

## 자격 AWS 증명 구성
<a name="configure-aws-credentials-for-docker"></a>

이 단계에서는 호스트 컴퓨터에 AWS 보안 자격 증명이 포함된 자격 증명 파일을 생성합니다. AWS IoT Greengrass Docker 이미지를 실행할 때이 자격 증명 파일이 포함된 폴더를 Docker 컨테이너의 `/root/.aws/`에 탑재해야 합니다. AWS IoT Greengrass 설치 관리자는 이러한 자격 증명을 사용하여에서 리소스를 프로비저닝합니다 AWS 계정. 설치 관리자가 리소스를 자동으로 프로비저닝하는 데 필요한 최소 IAM 정책에 대한 자세한 내용은 [설치 관리자가 리소스를 프로비저닝하기 위한 최소 IAM 정책](provision-minimal-iam-policy.md) 섹션을 참조하세요.

1. 다음 중 하나를 검색합니다.
   + IAM 사용자에 대한 장기 자격 증명. 장기 자격 증명을 검색하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자의 액세스 키 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)를 참조하세요.
   + (권장) IAM 역할에 대한 임시 자격 증명. 임시 자격 증명을 검색하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS CLI에서 임시 보안 인증 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli)을 참조하세요.

1. 자격 증명 파일을 배치할 폴더를 생성합니다.

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. 텍스트 편집기를 사용하여 `./greengrass-v2-credentials` 폴더에 `credentials`라는 이름의 구성 파일을 생성합니다.

   예를 들어 다음 명령을 실행하면 GNU nano를 사용하여 `credentials` 파일을 생성할 수 있습니다.

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. 다음 형식으로 자격 AWS 증명을 `credentials` 파일에 추가합니다.

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   임시 자격 증명에만 `aws_session_token`을 포함합니다.

**중요**  
 AWS IoT Greengrass 컨테이너를 시작한 후 호스트 컴퓨터에서 자격 증명 파일을 제거합니다. 자격 증명 파일을 제거하지 않으면 AWS 자격 증명이 컨테이너 내에 탑재된 상태로 유지됩니다. 자세한 내용은 [컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 실행](#run-greengrass-image-automatic-provisioning) 단원을 참조하십시오.

## 환경 파일 생성
<a name="create-env-file-automatic-provisioning"></a>

이 자습서에서는 환경 파일을 사용하여 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 관리자로 전달될 환경 변수를 설정합니다. `docker run` 명령의 [`-e` 또는 `--env` 인수](https://docs.docker.com/engine/reference/commandline/run/#env)를 사용하여 Docker 컨테이너에서 환경 변수를 설정하거나 `docker-compose.yml` 파일의 [`environment` 블록](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment)에서 변수를 설정할 수 있습니다.

1. 텍스트 편집기를 사용하여 `.env`라는 이름의 환경 파일을 생성합니다.

   예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 현재 디렉터리에 `.env`를 생성할 수 있습니다.

   ```
   nano .env
   ```

1. 다음 콘텐츠를 파일에 복사합니다.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   그런 다음, 다음 값을 바꿉니다.
   + `/greengrass/v2`. 설치에 사용하려는 Greengrass 루트 폴더입니다. `GGC_ROOT` 환경 변수를 사용하여 이 값을 지정할 수 있습니다.
   + *region*. 리소스를 생성한 AWS 리전 입니다.
   + *MyGreengrassCore*. AWS IoT 사물의 이름입니다. 사물이 존재하지 않는 경우 설치 관리자가 이를 생성합니다. 설치 관리자는 인증서를 다운로드하여 AWS IoT 사물로 인증합니다.
   + *MyGreengrassCoreGroup*. AWS IoT 사물 그룹의 이름입니다. 사물 그룹이 존재하지 않는 경우 설치 관리자가 이를 생성하고 사물을 추가합니다. 사물 그룹이 존재하고 활성 배포가 있는 경우 코어 디바이스는 배포에서 지정한 소프트웨어를 다운로드하고 실행합니다.
   +  *GreengrassV2TokenExchangeRole*. Greengrass 코어 디바이스에서 임시 AWS 자격 증명을 가져올 수 있도록 허용하는 IAM 토큰 교환 역할의 이름으로 바꿉니다. 역할이 없는 경우 설치 관리자는 이를 생성하고 *GreengrassV2TokenExchangeRole*Access라는 정책을 생성 및 연결합니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.
   + *GreengrassCoreTokenExchangeRoleAlias*. 토큰 교환 역할 별칭입니다. 역할 별칭이 없는 경우 설치 관리자가 이를 생성하고 지정한 IAM 토큰 교환 역할을 가리킵니다. 자세한 내용은 다음 섹션을 참조하세요.
**참고**  <a name="docker-local-dev-tools-production-environment-warning"></a>
`DEPLOY_DEV_TOOLS` 환경 변수를 `true`로 설정하여 Docker 컨테이너 내에서 사용자 지정 구성 요소를 개발할 수 있도록 하는 [Greengrass CLI 구성 요소](greengrass-cli-component.md)를 배포할 수 있습니다. <a name="local-dev-tools-production-environment-warning"></a>이 구성 요소는 프로덕션 환경이 아닌 개발 환경에서만 사용하는 것이 좋습니다. 이 구성 요소는 일반적으로 프로덕션 환경에서는 필요하지 않은 정보와 작업에 대한 액세스를 제공합니다. 필요한 코어 디바이스에만 이 구성 요소를 배포하여 최소 권한 원칙을 따르세요.

## 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 실행
<a name="run-greengrass-image-automatic-provisioning"></a>

이 자습서에서는 Docker 컨테이너에 빌드한 Docker 이미지를 시작하는 방법을 설명합니다. Docker CLI 또는 Docker Compose CLI를 사용하여 Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 이미지를 실행할 수 있습니다.

------
#### [ Docker ]

1. Docker 컨테이너를 시작하려면 다음 명령을 실행합니다.

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   이 예제 명령은 [Docker 실행](https://docs.docker.com/engine/reference/commandline/run/)을 위해 다음 인수를 사용합니다.
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). 컨테이너가 종료될 때 컨테이너를 정리합니다.
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). 컨테이너에서 init 프로세스를 사용합니다.
**참고**  
`--init` 인수는 Docker 컨테이너를 중지할 때 AWS IoT Greengrass 코어 소프트웨어를 종료하는 데 필요합니다.
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (선택 사항) 전경의 Docker 컨테이너를 대화형 프로세스로 실행합니다. 이를 대신 Docker 컨테이너를 분리 모드로 실행하기 위한 `-d` 인수로 바꿀 수 있습니다. 자세한 내용은 Docker 설명서의 [Detached vs foreground](https://docs.docker.com/engine/reference/run/#detached-vs-foreground)를 참조하세요.
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). `aws-iot-greengrass`라는 이름의 컨테이너를 실행합니다.
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). 볼륨을 Docker 컨테이너에 탑재하여 구성 파일과 인증서 파일을 컨테이너 내에서 AWS IoT Greengrass 실행할 수 있도록 합니다.
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (선택 사항) 환경 파일을 지정하여 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 관리자로 전달될 환경 변수를 설정합니다. 이 인수는 환경 변수를 설정하기 위해 [환경 파일](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning)을 생성한 경우에만 필요합니다. 환경 파일을 생성하지 않은 경우 `--env` 인수를 사용하여 Docker 실행 명령에서 환경 변수를 직접 설정할 수 있습니다.
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (선택 사항) 8883 컨테이너 포트를 호스트 시스템에 게시합니다. AWS IoT Greengrass 는 MQTT 트래픽에 포트 8883을 사용하므로 이 인수는 MQTT를 통해 연결하고 통신하려는 경우에 필요합니다. 다른 포트를 열려면 추가 `-p` 인수를 사용합니다.
**참고**  <a name="docker-run-cap-drop"></a>
Docker 컨테이너를 강화된 보안으로 실행하려면 `--cap-drop` 및 `--cap-add` 인수를 사용하여 컨테이너에 대한 Linux 기능을 선택적으로 활성화할 수 있습니다. 자세한 내용은 Docker 설명서의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하세요.

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>호스트 디바이스의 `./greengrass-v2-credentials`에서 자격 증명을 제거합니다.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**중요**  
이러한 자격 증명은 설정 중에만 코어 디바이스에 필요한 광범위한 권한을 제공하므로 이를 제거합니다. 자격 증명을 제거하지 않으면 컨테이너에서 실행되는 Greengrass 구성 요소와 기타 프로세스가 해당 자격 증명에 액세스할 수 있습니다. Greengrass 구성 요소에 AWS 자격 증명을 제공해야 하는 경우 토큰 교환 서비스를 사용합니다. 자세한 내용은 [AWS 서비스와 상호 작용](interact-with-aws-services.md) 단원을 참조하십시오.

------
#### [ Docker Compose ]

1. 텍스트 편집기를 사용하여 `docker-compose.yml`이라는 이름의 Docker Compose 파일을 생성합니다.

   예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 현재 디렉터리에 `docker-compose.yml`를 생성할 수 있습니다.

   ```
   nano docker-compose.yml
   ```
**참고**  
[GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)에서 AWS제공 Compose 파일의 최신 버전을 다운로드하여 사용할 수도 있습니다.

1. Compose 파일에 다음 콘텐츠를 추가합니다. 파일은 다음 예제와 비슷할 것입니다. *docker-image*를 Docker 이미지의 이름으로 바꿉니다.

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   이 예제 Compose 파일의 다음 파라미터는 선택 사항입니다.
   + `ports` - 8883 컨테이너 포트를 호스트 시스템에 게시합니다. 이 파라미터는가 MQTT 트래픽에 포트 8883을 AWS IoT Greengrass 사용하기 때문에 MQTT를 통해 연결하고 통신하려는 경우에 필요합니다.
   + `env_file`- 환경 파일을 지정하여 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 관리자로 전달될 환경 변수를 설정합니다. 이 파라미터는 환경 변수를 설정하기 위해 [환경 파일](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning)을 생성한 경우에만 필요합니다. 환경 파일을 생성하지 않은 경우 [환경](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) 파라미터를 사용하여 Compose 파일에서 변수를 직접 설정할 수 있습니다.
**참고**  <a name="docker-compose-cap-drop"></a>
Docker 컨테이너를 강화된 보안으로 실행하려면 Compose 파일의 `cap_drop` 및 `cap_add`를 사용하여 컨테이너에 대한 Linux 기능을 선택적으로 활성화할 수 있습니다. 자세한 내용은 Docker 설명서의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하세요.

1. Docker 컨테이너를 시작하려면 다음 명령을 실행합니다.

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>호스트 디바이스의 `./greengrass-v2-credentials`에서 자격 증명을 제거합니다.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**중요**  
이러한 자격 증명은 설정 중에만 코어 디바이스에 필요한 광범위한 권한을 제공하므로 이를 제거합니다. 자격 증명을 제거하지 않으면 컨테이너에서 실행되는 Greengrass 구성 요소와 기타 프로세스가 해당 자격 증명에 액세스할 수 있습니다. Greengrass 구성 요소에 AWS 자격 증명을 제공해야 하는 경우 토큰 교환 서비스를 사용합니다. 자세한 내용은 [AWS 서비스와 상호 작용](interact-with-aws-services.md) 단원을 참조하십시오.

------

## 다음 단계
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass 코어 소프트웨어가 이제 Docker 컨테이너에서 실행 중입니다. 다음 명령을 실행하여 현재 실행 중인 컨테이너의 컨테이너 ID를 검색합니다.

```
docker ps
```

그런 다음 다음 명령을 실행하여 컨테이너에 액세스하고 컨테이너 내에서 실행되는 AWS IoT Greengrass 코어 소프트웨어를 탐색할 수 있습니다.

```
docker exec -it container-id /bin/bash
```

간단한 구성 요소 생성에 대한 자세한 내용은 [자습서: AWS IoT Greengrass V2 시작하기](getting-started.md)의 [4단계: 디바이스에서 구성 요소 개발 및 테스트](create-first-component.md) 섹션을 참조하세요.

**참고**  <a name="run-greengrass-commands-in-docker-note"></a>
`docker exec`를 사용하여 Docker 컨테이너 내에서 명령을 실행하면 이 명령이 Docker 로그에 기록되지 않습니다. Docker 로그에 명령을 기록하려면 Docker 컨테이너에 대화형 쉘을 연결합니다. 자세한 내용은 [대화형 쉘을 Docker 컨테이너에 연결](docker-troubleshooting.md#debugging-docker-attach-shell) 단원을 참조하십시오.

 AWS IoT Greengrass 코어 로그 파일은 라고 `greengrass.log` 하며에 있습니다`/greengrass/v2/logs`. 구성 요소 로그 파일도 동일한 디렉터리에 있습니다. Greengrass 로그를 호스트의 임시 디렉터리에 복사하려면 다음 명령을 실행합니다.

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

컨테이너가 종료되거나 제거된 후 로그를 유지하려면 호스트의 임시 로그 디렉터리에 전체 Greengrass 디렉터리를 탑재하는 대신 `/greengrass/v2/logs` 디렉터리만 바인딩 탑재하는 것이 좋습니다. 자세한 내용은 [Docker 컨테이너 외부에서 Greengrass 로그 유지](docker-troubleshooting.md#debugging-docker-persist-logs) 단원을 참조하십시오.

<a name="greengrass-docker-stop"></a>실행 중인 AWS IoT Greengrass Docker 컨테이너를 중지하려면 `docker stop` 또는를 실행합니다`docker-compose -f docker-compose.yml stop`. 이 작업은 `SIGTERM`을 Greengrass 프로세스로 전송하고 컨테이너에서 시작된 모든 관련 프로세스를 종료합니다. Docker 컨테이너는 `docker-init` 실행 파일을 사용하여 프로세스 PID 1로 초기화되며, 이는 남아 있는 좀비 프로세스를 제거하는 데 도움이 됩니다. 자세한 내용은 Docker 설명서의 [Specify an init process](https://docs.docker.com/engine/reference/run/#specify-an-init-process)를 참조하세요.

<a name="see-docker-troubleshooting"></a>Docker 컨테이너에서 AWS IoT Greengrass 를 실행하는 데 발생하는 문제 해결에 대한 자세한 내용은 [Docker 컨테이너 AWS IoT Greengrass 의 문제 해결](docker-troubleshooting.md) 섹션을 참조하세요.

# 수동 리소스 프로비저닝을 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행
<a name="run-greengrass-docker-manual-provisioning"></a>

이 자습서에서는 수동으로 프로비저닝된 AWS 리소스를 사용하여 Docker 컨테이너에 AWS IoT Greengrass 코어 소프트웨어를 설치하고 실행하는 방법을 보여줍니다.

**Topics**
+ [사전 조건](#docker-manual-provisioning-prereqs)
+ [AWS IoT 엔드포인트 검색](#retrieve-iot-endpoints)
+ [AWS IoT 사물 생성](#create-iot-thing)
+ [사물 인증서 생성](#create-thing-certificate-mp)
+ [토큰 교환 역할 생성](#create-token-exchange-role)
+ [디바이스에 인증서 다운로드](#download-thing-certificates)
+ [구성 파일 생성](#create-docker-install-configuration-file)
+ [환경 파일 생성](#create-env-file-manual-provisioning)
+ [컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 실행](#run-greengrass-image-manual-provisioning)
+ [다음 단계](#run-greengrass-docker-next-steps)

## 사전 조건
<a name="docker-manual-provisioning-prereqs"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+  AWS 계정. 없으면 [설정 AWS 계정](setting-up.md#set-up-aws-account) 섹션을 참조하세요.
+  AWS IoT Greengrass Docker 이미지. [AWS IoT Greengrass Dockerfile에서 이미지를 빌드할](build-greengrass-dockerfile.md) 수 있습니다.
+ Docker 컨테이너를 실행하는 호스트 컴퓨터는 다음과 같은 요구 사항을 충족해야 합니다.
  + <a name="docker-host-reqs"></a>인터넷에 연결된 Linux 기반 운영 체제.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) 버전 18.09 이상.
  + <a name="docker-compose-reqs"></a>(선택 사항) [Docker Compose](https://docs.docker.com/compose/install/) 버전 1.22 이상. Docker Compose는 Docker Compose CLI를 사용하여 Docker 이미지를 실행하려는 경우에만 필요합니다.

## AWS IoT 엔드포인트 검색
<a name="retrieve-iot-endpoints"></a>

의 AWS IoT 엔드포인트를 가져 AWS 계정와 나중에 사용할 수 있도록 저장합니다. 디바이스에서는 이러한 엔드포인트를 사용하여 AWS IoT에 연결합니다. 해결 방법:

1. 의 AWS IoT 데이터 엔드포인트를 가져옵니다 AWS 계정.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 의 AWS IoT 자격 증명 엔드포인트를 가져옵니다 AWS 계정.

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## AWS IoT 사물 생성
<a name="create-iot-thing"></a>

AWS IoT *사물*은에 연결하는 디바이스 및 논리적 엔터티를 나타냅니다 AWS IoT. Greengrass 코어 디바이스는 AWS IoT 사물입니다. 디바이스를 AWS IoT 사물로 등록하면 해당 디바이스는 디지털 인증서를 사용하여 인증할 수 있습니다 AWS.

이 섹션에서는 디바이스를 나타내는 AWS IoT 사물을 생성합니다.

**AWS IoT 사물을 생성하려면**

1. 디바이스에 대한 AWS IoT 사물을 생성합니다. 개발 컴퓨터에서 다음 명령을 실행합니다.
   + *MyGreengrassCore*를 사용할 사물 이름으로 바꿉니다. 이 이름은 Greengrass 코어 디바이스의 이름이기도 합니다.
**참고**  <a name="install-argument-thing-name-constraint"></a>
사물 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (선택 사항) 새 AWS IoT 사물 또는 기존 사물 그룹에 사물을 추가합니다. 사물 그룹을 사용하여 Greengrass 코어 디바이스 플릿을 관리합니다. 소프트웨어 구성 요소를 디바이스에 배포할 때 개별 디바이스 또는 디바이스 그룹을 대상으로 지정할 수 있습니다. 활성 Greengrass 배포가 있는 사물 그룹에 디바이스를 추가하여 사물 그룹의 소프트웨어 구성 요소를 디바이스에 배포할 수 있습니다. 해결 방법:

   1. (선택 사항) AWS IoT 사물 그룹을 생성합니다.
      + *MyGreengrassCoreGroup*을 생성할 사물 그룹의 이름으로 바꿉니다.
**참고**  <a name="install-argument-thing-group-name-constraint"></a>
사물 그룹 이름에는 콜론(`:`) 문자를 포함할 수 없습니다.

      ```
      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.  AWS IoT 사물을 사물 그룹에 추가합니다.
      + *MyGreengrassCore*를 AWS IoT 사물의 이름으로 바꿉니다.
      + *MyGreengrassCoreGroup*을 사물 그룹의 이름으로 바꿉니다.

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

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

## 사물 인증서 생성
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>디바이스를 AWS IoT 사물로 등록하면 해당 디바이스는 디지털 인증서를 사용하여 인증할 수 있습니다 AWS. 이 인증서를 사용하면 디바이스가 AWS IoT 및와 통신할 수 있습니다 AWS IoT Greengrass.

<a name="create-thing-certificate-intro-2"></a>이 섹션에서는 디바이스가 AWS에 연결하는 데 사용할 수 있는 인증서를 생성하고 다운로드합니다.<a name="create-thing-certificate-cloud-steps"></a>

**사물 인증서를 생성하려면**

1.  AWS IoT 사물에 대한 인증서를 다운로드할 폴더를 생성합니다.

   ```
   mkdir greengrass-v2-certs
   ```

1.  AWS IoT 사물에 대한 인증서를 생성하고 다운로드합니다.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   이후 인증서 구성에 사용할 인증서의 Amazon 리소스 이름(ARN)을 저장합니다.

그런 다음 사물 인증서를 구성합니다. 자세한 내용은 [사물 인증서 구성](manual-installation.md#configure-thing-certificate) 단원을 참조하십시오.

## 토큰 교환 역할 생성
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass 코어 디바이스는 *토큰 교환* 역할이라는 IAM 서비스 역할을 사용하여 AWS 서비스에 대한 호출을 승인합니다. 디바이스는 자격 AWS IoT 증명 공급자를 사용하여이 역할에 대한 임시 AWS 자격 증명을 가져오므로 디바이스가 상호 작용하고 AWS IoT, Amazon CloudWatch Logs로 로그를 전송하고, Amazon S3에서 사용자 지정 구성 요소 아티팩트를 다운로드할 수 있습니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.

<a name="installation-create-token-exchange-role-alias-intro"></a> AWS IoT *Anrole 별칭을* 사용하여 Greengrass 코어 디바이스에 대한 토큰 교환 역할을 구성합니다. 역할 별칭을 사용하면 디바이스의 토큰 교환 역할을 변경할 수 있지만 디바이스 구성은 동일하게 유지할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS 서비스 직접 호출에 대한 권한 부여](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)를 참조하세요.

이 단원에서는 토큰 교환 IAM 역할과 AWS IoT 역할을 가리키는 역할 별칭을 생성합니다. 이미 Greengrass 코어 디바이스를 설정한 경우 새 디바이스를 생성하는 대신 토큰 교환 역할 및 역할 별칭을 사용할 수 있습니다. 그런 다음 해당 역할과 별칭을 사용하도록 디바이스의 AWS IoT 사물을 구성합니다.

**토큰 교환 IAM 역할을 생성하려면**

1. <a name="create-token-exchange-role-create-iam-role"></a>디바이스가 토큰 교환 역할로 사용할 수 있는 IAM 역할을 생성합니다. 해결 방법:

   1. 토큰 교환 역할에 필요한 신뢰 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano device-role-trust-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 신뢰 정책 문서를 사용하여 토큰 교환 역할을 생성합니다.
      + *GreengrassV2TokenExchangeRole*을 생성할 IAM 역할의 이름으로 바꿉니다.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. 토큰 교환 역할에 필요한 액세스 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano device-role-access-policy.json
      ```

      다음 JSON을 파일로 복사합니다.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**참고**  
이 액세스 정책은 S3 버킷의 구성 요소 아티팩트에 대한 액세스를 허용하지 않습니다. Amazon S3에서 아티팩트를 정의하는 사용자 지정 구성 요소를 배포하려면 코어 디바이스가 구성 요소 아티팩트를 검색할 수 있도록 역할에 권한을 추가해야 합니다. 자세한 내용은 [구성 요소 아티팩트에 대한 S3 버킷 액세스 허용](device-service-role.md#device-service-role-access-s3-bucket) 단원을 참조하십시오.  
구성 요소 아티팩트에 대한 S3 버킷이 아직 없는 경우 버킷을 생성한 후 권한을 추가할 수 있습니다.

   1. 정책 문서에서 IAM 정책을 생성합니다.
      + *GreengrassV2TokenExchangeRoleAccess*를 생성할 IAM 정책의 이름으로 바꿉니다.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. IAM 정책을 토큰 교환 역할에 연결합니다.
      + *GreengrassV2TokenExchangeRole*을 IAM 역할의 이름으로 바꿉니다.
      + 정책 ARN을 이전 단계에서 생성한 IAM 정책의 ARN으로 변경합니다.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

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

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>토큰 교환 AWS IoT 역할을 가리키는 역할 별칭을 생성합니다.
   + *GreengrassCoreTokenExchangeRoleAlias*를 생성할 역할 별칭의 이름으로 바꿉니다.
   + 역할 ARN을 이전 단계에서 생성한 IAM 역할의 ARN으로 변경합니다.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**참고**  
역할 별칭을 생성하려면 토큰 교환 IAM 역할을 AWS IoT에 전달할 권한이 있어야 합니다. 역할 별칭을 생성하려고 할 때 오류 메시지가 표시되면 AWS 사용자에게이 권한이 있는지 확인합니다. 자세한 내용은 사용 *AWS Identity and Access Management 설명서*의 [AWS 서비스에 역할을 전달할 수 있는 사용자 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

1. Greengrass 코어 디바이스가 역할 별칭을 사용하여 토큰 교환 역할을 수임하도록 허용하는 AWS IoT 정책을 생성하고 연결합니다. 이전에 Greengrass 코어 디바이스를 설정한 경우 새 디바이스를 생성하는 대신 역할 별칭 AWS IoT 정책을 연결할 수 있습니다. 해결 방법:

   1. (선택 사항) 역할 별칭에 필요한 AWS IoT 정책 문서가 포함된 파일을 생성합니다.

      <a name="nano-command-intro"></a>예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 파일을 생성할 수 있습니다.

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      다음 JSON을 파일로 복사합니다.
      + 리소스 ARN을 역할 별칭의 ARN으로 바꿉니다.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1.  AWS IoT 정책 문서에서 정책을 생성합니다.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*를 생성할 AWS IoT 정책의 이름으로 바꿉니다.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      요청에 성공하는 경우 응답은 다음 예제와 유사합니다.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1.  AWS IoT 사물의 인증서에 AWS IoT 정책을 연결합니다.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*를 역할 별칭 AWS IoT 정책의 이름으로 바꿉니다.
      + 대상 ARN을 AWS IoT 사물 인증서의 ARN으로 바꿉니다.

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

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

## 디바이스에 인증서 다운로드
<a name="download-thing-certificates"></a>

앞서 디바이스의 인증서를 개발 컴퓨터에 다운로드했습니다. 이 섹션에서는 Amazon 루트 인증 기관(CA) 인증서를 다운로드합니다. 그런 다음 개발 컴퓨터와 다른 컴퓨터에서 Docker에서 AWS IoT Greengrass 코어 소프트웨어를 실행하려는 경우 인증서를 해당 호스트 컴퓨터에 복사합니다. AWS IoT Greengrass 코어 소프트웨어는 이러한 인증서를 사용하여 AWS IoT 클라우드 서비스에 연결합니다.

**디바이스에 인증서를 다운로드하려면**

1. 개발 컴퓨터에서 Amazon 루트 인증 기관(CA) 인증서를 다운로드합니다. AWS IoT 인증서는 기본적으로 Amazon의 루트 CA 인증서와 연결됩니다.

------
#### [ Linux or Unix ]

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. 개발 컴퓨터와 다른 디바이스에서 Docker의 AWS IoT Greengrass 코어 소프트웨어를 실행하려는 경우 인증서를 호스트 컴퓨터에 복사합니다. 개발 컴퓨터와 호스트 컴퓨터에서 SSH 및 SCP가 활성화된 경우 개발 컴퓨터에서 `scp` 명령을 사용하여 인증서를 전송할 수 있습니다. *device-ip-address*를 호스트 컴퓨터의 IP 주소로 바꿉니다.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## 구성 파일 생성
<a name="create-docker-install-configuration-file"></a>

1. 호스트 컴퓨터에서 구성 파일을 배치할 폴더를 생성합니다.

   ```
   mkdir ./greengrass-v2-config
   ```

1. 텍스트 편집기를 사용하여 `config.yaml` 폴더에 `./greengrass-v2-config`라는 이름의 구성 파일을 생성합니다.

   예를 들어 다음 명령을 실행하면 GNU nano를 사용하여 `config.yaml`을 생성할 수 있습니다.

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. 다음 YAML 콘텐츠를 파일에 복사합니다. 이 부분 구성 파일은 시스템 파라미터와 Greengrass nucleus 파라미터를 지정합니다.

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   그런 다음, 다음 값을 바꿉니다.
   + */tmp/certs*. 컨테이너를 시작할 때 다운로드한 인증서를 탑재하는 Docker 컨테이너의 디렉터리입니다.
   + `/greengrass/v2`. 설치에 사용하려는 Greengrass 루트 폴더입니다. `GGC_ROOT` 환경 변수를 사용하여 이 값을 지정할 수 있습니다.
   + *MyGreengrassCore*. AWS IoT 사물의 이름입니다.
   + *nucleus-version*. 설치할 AWS IoT Greengrass 코어 소프트웨어의 버전입니다. 이 값은 다운로드한 Docker 이미지 또는 Dockerfile의 버전과 일치해야 합니다. `latest` 태그와 함께 Greengrass Docker 이미지를 다운로드한 경우 ****docker inspect *image-id*****를 사용하여 이미지 버전을 확인합니다.
   + *region*. AWS IoT 리소스를 생성한 AWS 리전 입니다. 또한 [환경 파일](#create-env-file-manual-provisioning)에서 `AWS_REGION` 환경 변수에 대해 동일한 값을 지정해야 합니다.
   + *GreengrassCoreTokenExchangeRoleAlias*. 토큰 교환 역할 별칭입니다.
   + *device-data-prefix*. AWS IoT 데이터 엔드포인트의 접두사입니다.
   + *device-credentials-prefix*. AWS IoT 자격 증명 엔드포인트의 접두사입니다.

## 환경 파일 생성
<a name="create-env-file-manual-provisioning"></a>

이 자습서에서는 환경 파일을 사용하여 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 관리자로 전달될 환경 변수를 설정합니다. `docker run` 명령의 [`-e` 또는 `--env` 인수](https://docs.docker.com/engine/reference/commandline/run/#env)를 사용하여 Docker 컨테이너에서 환경 변수를 설정하거나 `docker-compose.yml` 파일의 [`environment` 블록](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment)에서 변수를 설정할 수 있습니다.

1. 텍스트 편집기를 사용하여 `.env`라는 이름의 환경 파일을 생성합니다.

   예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 현재 디렉터리에 `.env`를 생성할 수 있습니다.

   ```
   nano .env
   ```

1. 다음 콘텐츠를 파일에 복사합니다.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   그런 다음, 다음 값을 바꿉니다.
   + `/greengrass/v2`. AWS IoT Greengrass 코어 소프트웨어를 설치하는 데 사용할 루트 폴더의 경로입니다.
   + *region*. AWS IoT 리소스를 생성한 AWS 리전 입니다. [구성 파일](#create-docker-install-configuration-file)에서 `awsRegion` 구성 파라미터에 대해 동일한 값을 지정해야 합니다.
   + */tmp/config/*. Docker 컨테이너를 시작할 때 구성 파일을 탑재하는 폴더입니다.
**참고**  <a name="docker-local-dev-tools-production-environment-warning"></a>
`DEPLOY_DEV_TOOLS` 환경 변수를 `true`로 설정하여 Docker 컨테이너 내에서 사용자 지정 구성 요소를 개발할 수 있도록 하는 [Greengrass CLI 구성 요소](greengrass-cli-component.md)를 배포할 수 있습니다. <a name="local-dev-tools-production-environment-warning"></a>이 구성 요소는 프로덕션 환경이 아닌 개발 환경에서만 사용하는 것이 좋습니다. 이 구성 요소는 일반적으로 프로덕션 환경에서는 필요하지 않은 정보와 작업에 대한 액세스를 제공합니다. 필요한 코어 디바이스에만 이 구성 요소를 배포하여 최소 권한 원칙을 따르세요.

## 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 실행
<a name="run-greengrass-image-manual-provisioning"></a>

이 자습서에서는 Docker 컨테이너에 빌드한 Docker 이미지를 시작하는 방법을 설명합니다. Docker CLI 또는 Docker Compose CLI를 사용하여 Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어 이미지를 실행할 수 있습니다.

------
#### [ Docker ]
+ 이 자습서에서는 Docker 컨테이너에 빌드한 Docker 이미지를 시작하는 방법을 설명합니다.

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  이 예제 명령은 [Docker 실행](https://docs.docker.com/engine/reference/commandline/run/)을 위해 다음 인수를 사용합니다.
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). 컨테이너가 종료될 때 컨테이너를 정리합니다.
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). 컨테이너에서 init 프로세스를 사용합니다.
**참고**  
`--init` 인수는 Docker 컨테이너를 중지할 때 AWS IoT Greengrass 코어 소프트웨어를 종료하는 데 필요합니다.
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (선택 사항) 전경의 Docker 컨테이너를 대화형 프로세스로 실행합니다. 이를 대신 Docker 컨테이너를 분리 모드로 실행하기 위한 `-d` 인수로 바꿀 수 있습니다. 자세한 내용은 Docker 설명서의 [Detached vs foreground](https://docs.docker.com/engine/reference/run/#detached-vs-foreground)를 참조하세요.
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). `aws-iot-greengrass`라는 이름의 컨테이너를 실행합니다.
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). 볼륨을 Docker 컨테이너에 탑재하여 구성 파일과 인증서 파일을 컨테이너 내에서 AWS IoT Greengrass 실행할 수 있도록 합니다.
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (선택 사항) 환경 파일을 지정하여 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 관리자로 전달될 환경 변수를 설정합니다. 이 인수는 환경 변수를 설정하기 위해 [환경 파일](#create-env-file-manual-provisioning)을 생성한 경우에만 필요합니다. 환경 파일을 생성하지 않은 경우 `--env` 인수를 사용하여 Docker 실행 명령에서 환경 변수를 직접 설정할 수 있습니다.
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (선택 사항) 8883 컨테이너 포트를 호스트 시스템에 게시합니다. AWS IoT Greengrass 는 MQTT 트래픽에 포트 8883을 사용하므로 이 인수는 MQTT를 통해 연결하고 통신하려는 경우에 필요합니다. 다른 포트를 열려면 추가 `-p` 인수를 사용합니다.
**참고**  <a name="docker-run-cap-drop"></a>
Docker 컨테이너를 강화된 보안으로 실행하려면 `--cap-drop` 및 `--cap-add` 인수를 사용하여 컨테이너에 대한 Linux 기능을 선택적으로 활성화할 수 있습니다. 자세한 내용은 Docker 설명서의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하세요.

------
#### [ Docker Compose ]

1. 텍스트 편집기를 사용하여 `docker-compose.yml`이라는 이름의 Docker Compose 파일을 생성합니다.

   예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNU nano를 사용하여 현재 디렉터리에 `docker-compose.yml`를 생성할 수 있습니다.

   ```
   nano docker-compose.yml
   ```
**참고**  
[GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)에서 AWS제공 Compose 파일의 최신 버전을 다운로드하여 사용할 수도 있습니다.

1. Compose 파일에 다음 콘텐츠를 추가합니다. 파일은 다음 예제와 비슷할 것입니다. *your-container-name:version*을 Docker 이미지의 이름으로 바꿉니다.

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   이 예제 Compose 파일의 다음 파라미터는 선택 사항입니다.
   + `ports` - 8883 컨테이너 포트를 호스트 시스템에 게시합니다. 이 파라미터는 MQTT 트래픽에 포트 8883을 AWS IoT Greengrass 사용하기 때문에 MQTT를 통해 연결하고 통신하려는 경우에 필요합니다.
   + `env_file`- 환경 파일을 지정하여 Docker 컨테이너 내의 AWS IoT Greengrass 코어 소프트웨어 설치 관리자로 전달될 환경 변수를 설정합니다. 이 파라미터는 환경 변수를 설정하기 위해 [환경 파일](#create-env-file-manual-provisioning)을 생성한 경우에만 필요합니다. 환경 파일을 생성하지 않은 경우 [환경](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) 파라미터를 사용하여 Compose 파일에서 변수를 직접 설정할 수 있습니다.
**참고**  <a name="docker-compose-cap-drop"></a>
Docker 컨테이너를 강화된 보안으로 실행하려면 Compose 파일의 `cap_drop` 및 `cap_add`를 사용하여 컨테이너에 대한 Linux 기능을 선택적으로 활성화할 수 있습니다. 자세한 내용은 Docker 설명서의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하세요.

1. 컨테이너를 시작하려면 다음 명령을 실행합니다.

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## 다음 단계
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass 코어 소프트웨어가 이제 Docker 컨테이너에서 실행 중입니다. 다음 명령을 실행하여 현재 실행 중인 컨테이너의 컨테이너 ID를 검색합니다.

```
docker ps
```

그런 다음 다음 명령을 실행하여 컨테이너에 액세스하고 컨테이너 내에서 실행되는 AWS IoT Greengrass 코어 소프트웨어를 탐색할 수 있습니다.

```
docker exec -it container-id /bin/bash
```

간단한 구성 요소 생성에 대한 자세한 내용은 [자습서: AWS IoT Greengrass V2 시작하기](getting-started.md)의 [4단계: 디바이스에서 구성 요소 개발 및 테스트](create-first-component.md) 섹션을 참조하세요.

**참고**  <a name="run-greengrass-commands-in-docker-note"></a>
`docker exec`를 사용하여 Docker 컨테이너 내에서 명령을 실행하면 이 명령이 Docker 로그에 기록되지 않습니다. Docker 로그에 명령을 기록하려면 Docker 컨테이너에 대화형 쉘을 연결합니다. 자세한 내용은 [대화형 쉘을 Docker 컨테이너에 연결](docker-troubleshooting.md#debugging-docker-attach-shell) 단원을 참조하십시오.

 AWS IoT Greengrass 코어 로그 파일은 라고 `greengrass.log` 하며에 있습니다`/greengrass/v2/logs`. 구성 요소 로그 파일도 동일한 디렉터리에 있습니다. Greengrass 로그를 호스트의 임시 디렉터리에 복사하려면 다음 명령을 실행합니다.

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

컨테이너가 종료되거나 제거된 후 로그를 유지하려면 호스트의 임시 로그 디렉터리에 전체 Greengrass 디렉터리를 탑재하는 대신 `/greengrass/v2/logs` 디렉터리만 바인딩 탑재하는 것이 좋습니다. 자세한 내용은 [Docker 컨테이너 외부에서 Greengrass 로그 유지](docker-troubleshooting.md#debugging-docker-persist-logs) 단원을 참조하십시오.

<a name="greengrass-docker-stop"></a>실행 중인 AWS IoT Greengrass Docker 컨테이너를 중지하려면 `docker stop` 또는를 실행합니다`docker-compose -f docker-compose.yml stop`. 이 작업은 `SIGTERM`을 Greengrass 프로세스로 전송하고 컨테이너에서 시작된 모든 관련 프로세스를 종료합니다. Docker 컨테이너는 `docker-init` 실행 파일을 사용하여 프로세스 PID 1로 초기화되며, 이는 남아 있는 좀비 프로세스를 제거하는 데 도움이 됩니다. 자세한 내용은 Docker 설명서의 [Specify an init process](https://docs.docker.com/engine/reference/run/#specify-an-init-process)를 참조하세요.

<a name="see-docker-troubleshooting"></a>Docker 컨테이너에서 AWS IoT Greengrass 를 실행하는 데 발생하는 문제 해결에 대한 자세한 내용은 [Docker 컨테이너 AWS IoT Greengrass 의 문제 해결](docker-troubleshooting.md) 섹션을 참조하세요.

# Docker 컨테이너 AWS IoT Greengrass 의 문제 해결
<a name="docker-troubleshooting"></a>

다음 정보를 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행 시 발생하는 문제를 해결하고 Docker 컨테이너 AWS IoT Greengrass 에서의 문제를 디버깅할 수 있습니다.

**Topics**
+ [Docker 컨테이너 실행 문제 해결](#troubleshooting-container-errors)
+ [Docker 컨테이너 AWS IoT Greengrass 에서 디버깅](#debugging-greengrass-in-docker)

## Docker 컨테이너 실행 문제 해결
<a name="troubleshooting-container-errors"></a>

다음 정보를 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행과 관련된 문제를 해결할 수 있습니다.

**Topics**
+ [오류: TTY가 아닌 장치에서 대화형 로그인을 수행할 수 없습니다.](#docker-troubleshootin-ecr-get-login-password)
+ [오류: 알 수 없는 옵션: no-include-email](#docker-troubleshooting-cli-version)
+ [오류: 방화벽이 Windows와 컨테이너 간의 파일 공유를 차단하고 있습니다.](#docker-troubleshooting-firewall)
+ [오류: GetAuthorizationToken 작업 직접 호출 도중 오류 발생(AccessDeniedException): 사용자: arn:aws:iam::*account-id*:user/<user-name>에게 다음을 수행할 권한 없음: ecr:GetAuthorizationToken on resource: \$1](#docker-troubleshooting-ecr-perms)
+ [오류: 풀 속도 제한에 도달함](#docker-troubleshooting-too-many-requests)

### 오류: TTY가 아닌 장치에서 대화형 로그인을 수행할 수 없습니다.
<a name="docker-troubleshootin-ecr-get-login-password"></a>

`aws ecr get-login-password` 명령을 실행할 때 이 오류가 발생할 수 있습니다. 최신 AWS CLI 버전 2 또는 버전 1을 설치했는지 확인합니다. AWS CLI 버전 2를 사용하는 것이 좋습니다. 자세한 내용은 *AWS Command Line Interface 사용자 가이드*에서 [AWS CLI설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)를 참조하세요.

### 오류: 알 수 없는 옵션: no-include-email
<a name="docker-troubleshooting-cli-version"></a>

`aws ecr get-login` 명령을 실행할 때 이 오류가 발생할 수 있습니다. 최신 AWS CLI 버전이 설치되어 있는지 확인합니다(예: 실행: `pip install awscli --upgrade --user`). 자세한 내용은 *AWS Command Line Interface 사용 설명서*[의 Microsoft Windows AWS Command Line Interface 에 설치를](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) 참조하세요.

### 오류: 방화벽이 Windows와 컨테이너 간의 파일 공유를 차단하고 있습니다.
<a name="docker-troubleshooting-firewall"></a>

Windows 컴퓨터에서 Docker를 실행할 때 이 오류 또는 `Firewall Detected` 메시지가 표시될 수 있습니다. 이 오류는 VPN(가상 프라이빗 네트워크)에 로그인되어 있고 네트워크 설정 때문에 공유 드라이브가 탑재되지 않는 경우에도 발생할 수 있습니다. 이러한 경우에는 VPN을 끄고 Docker 컨테이너를 재실행합니다.

### 오류: GetAuthorizationToken 작업 직접 호출 도중 오류 발생(AccessDeniedException): 사용자: arn:aws:iam::*account-id*:user/<user-name>에게 다음을 수행할 권한 없음: ecr:GetAuthorizationToken on resource: \$1
<a name="docker-troubleshooting-ecr-perms"></a>

Amazon ECR 리포지토리에 액세스할 충분한 권한이 없는데 `aws ecr get-login-password` 명령을 실행할 경우 이 오류가 발생할 수 있습니다. 자세한 내용은 *Amazon ECR 사용 설명서*의 [Amazon ECR 리포지토리 정책 예제](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) 및 [하나의 Amazon ECR 리포지토리에 액세스](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html)를 참조하세요.

### 오류: 풀 속도 제한에 도달함
<a name="docker-troubleshooting-too-many-requests"></a>

Docker Hub는 익명 및 Free Docker Hub 사용자가 수행할 수 있는 풀 요청 수를 제한합니다. 익명 또는 무료 사용자 풀 요청의 속도 제한을 초과하면 다음 오류 중 하나가 발생합니다.

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

이러한 오류를 해결하려면 몇 시간 기다린 다음 다른 풀 요청을 시도할 수 있습니다. 많은 수의 풀 요청을 일관적으로 제출할 계획인 경우 [Docker Hub 웹 사이트](https://www.docker.com/increase-rate-limits)에서 속도 제한, 그리고 Docker 계정 인증 및 업그레이드 옵션 관련 정보를 참조하세요.

## Docker 컨테이너 AWS IoT Greengrass 에서 디버깅
<a name="debugging-greengrass-in-docker"></a>

도커 컨테이너로 문제를 디버그하려면 Greengrass 런타임 로그를 유지하거나 대화형 셸을 도커 컨테이너에 연결할 수 있습니다.

### Docker 컨테이너 외부에서 Greengrass 로그 유지
<a name="debugging-docker-persist-logs"></a>

 AWS IoT Greengrass 컨테이너를 중지한 후 다음 `docker cp ` 명령을 사용하여 Greengrass 로그를 Docker 컨테이너에서 임시 로그 디렉터리로 복사할 수 있습니다.

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

컨테이너가 종료되거나 제거된 후에도 로그를 유지하려면 `/greengrass/v2/logs` 디렉터리를 바인드 마운트한 후 AWS IoT Greengrass Docker 컨테이너를 실행해야 합니다.

`/greengrass/v2/logs` 디렉터리를 바인드 마운트하려면 새 AWS IoT Greengrass Docker 컨테이너를 실행할 때 다음 중 하나를 수행합니다.
+ `docker run` 명령에 `-v /tmp/logs:/greengrass/v2/logs:ro`를 포함합니다.

  `docker-compose up` 명령을 실행하기 전에 다음 줄을 포함하도록 Compose 파일의 `volumes` 블록을 수정합니다.

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

그런 다음 호스트`/tmp/logs`의에서 로그를 확인하여 AWS IoT Greengrass 가 Docker 컨테이너 내에서 실행되는 동안 Greengrass 로그를 볼 수 있습니다.

Greengrass Docker 컨테이너 실행에 대한 자세한 내용은 [수동 프로비저닝을 사용하여 Docker AWS IoT Greengrass 에서 실행](run-greengrass-docker-manual-provisioning.md) 및 [자동 프로비저닝을 사용하여 Docker AWS IoT Greengrass 에서 실행](run-greengrass-docker-automatic-provisioning.md) 섹션을 참조하세요.

### 대화형 쉘을 Docker 컨테이너에 연결
<a name="debugging-docker-attach-shell"></a>

`docker exec`를 사용하여 Docker 컨테이너 내에서 명령을 실행하면 이 명령이 Docker 로그에 캡처되지 않습니다. Docker 로그에 명령을 로깅하면 Greengrass Docker 컨테이너의 상태를 조사하는 데 도움이 될 수 있습니다. 다음 중 하나를 수행하세요.
+ 별도의 터미널에서 다음 명령을 실행하여 터미널의 표준 입력, 출력 및 오류를 실행 중인 컨테이너에 연결합니다. 이를 통해 현재 터미널에서 Docker 컨테이너를 보고 제어할 수 있습니다.

  ```
  docker attach container-id
  ```
+ 별도의 터미널에서 다음 명령을 실행합니다. 이렇게 하면 컨테이너가 연결되지 않은 경우에도 대화형 모드에서 명령을 실행할 수 있습니다.

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

일반적인 AWS IoT Greengrass 문제 해결은 섹션을 참조하세요[문제 해결 AWS IoT Greengrass V2](troubleshooting.md).

# AWS IoT Greengrass 코어 소프트웨어 구성
<a name="configure-greengrass-core-v2"></a>

 AWS IoT Greengrass 코어 소프트웨어는 소프트웨어를 구성하는 데 사용할 수 있는 옵션을 제공합니다. 배포를 생성하여 각 AWS IoT Greengrass 코어 디바이스에서 코어 소프트웨어를 구성할 수 있습니다.

**Topics**
+ [Greengrass nucleus 구성 요소 배포](#configure-nucleus-component)
+ [Greengrass nucleus를 시스템 서비스로 구성](#configure-system-service)
+ [JVM 옵션으로 메모리 할당 제어](#jvm-tuning)
+ [구성 요소를 실행하는 사용자 구성](#configure-component-user)
+ [구성 요소에 대한 시스템 리소스 제한 구성](#configure-component-system-resource-limits)
+ [포트 443에서 또는 네트워크 프록시를 통해 연결](#configure-alpn-network-proxy)
+ [프라이빗 CA에서 서명한 디바이스 인증서 사용](#configure-nucleus-private-ca)
+ [MQTT 제한 시간 및 캐시 설정 구성](#configure-mqtt)
+ [IPv6 네트워크에서 Greengrass Nucleus 구성](#configure-ipv6)

## Greengrass nucleus 구성 요소 배포
<a name="configure-nucleus-component"></a>

AWS IoT Greengrass 는 Greengrass AWS IoT Greengrass 코어 디바이스에 배포할 수 있는 구성 요소로 코어 소프트웨어를 제공합니다. 배포를 생성하여 여러 Greengrass 코어 디바이스에 동일한 구성을 적용할 수 있습니다. 자세한 내용은 [Greengrass nucleus](greengrass-nucleus-component.md) 및 [AWS IoT Greengrass 코어 소프트웨어(OTA) 업데이트](update-greengrass-core-v2.md) 섹션을 참조하세요.

## Greengrass nucleus를 시스템 서비스로 구성
<a name="configure-system-service"></a>

다음을 수행하려면 AWS IoT Greengrass 코어 소프트웨어를 디바이스의 init 시스템에서 시스템 서비스로 구성해야 합니다.
+ 디바이스가 부팅되면 AWS IoT Greengrass 코어 소프트웨어를 시작합니다. 대규모 디바이스 플릿을 관리하는 경우에 좋습니다.
+ 플러그인 구성 요소를 설치하고 실행합니다. AWS여러 제공 구성 요소는 플러그인 구성 요소이므로 Greengrass nucleus와 직접 인터페이스할 수 있습니다. 구성 요소 유형에 대한 자세한 정보는 [구성 요소 유형](develop-greengrass-components.md#component-types)을(를) 참조하세요.
+ 코어 디바이스의 AWS IoT Greengrass 코어 소프트웨어에 over-the-air(OTA) 업데이트를 적용합니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어(OTA) 업데이트](update-greengrass-core-v2.md) 단원을 참조하십시오.
+ 배포가 구성 요소를 새 버전으로 업데이트하거나 특정 구성 파라미터를 업데이트할 때 구성 요소가 AWS IoT Greengrass 코어 소프트웨어 또는 코어 디바이스를 다시 시작할 수 있도록 합니다. 자세한 내용은 [부트스트랩 수명 주기 단계](component-recipe-reference.md#bootstrap-lifecycle-definition)를 참조하세요.

**중요**  <a name="windows-system-service-requirement-important-note"></a>
Windows 코어 디바이스에서는 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.

**Topics**
+ [nucleus를 시스템 서비스로 구성(Linux)](#configure-system-service-linux)
+ [nucleus를 시스템 서비스로 구성(Windows)](#configure-system-service-windows)

### nucleus를 시스템 서비스로 구성(Linux)
<a name="configure-system-service-linux"></a>

Linux 디바이스에서는 다양한 init 시스템이 지원됩니다(예: initd, systemd, SystemV). AWS IoT Greengrass 코어 소프트웨어를 설치할 때 `--setup-system-service true` 인수를 사용하여 nucleus를 시스템 서비스로 시작하고 디바이스가 부팅될 때 시작되도록 구성합니다. 설치 관리자는 AWS IoT Greengrass 코어 소프트웨어를 systemd를 사용하는 시스템 서비스로 구성합니다.

시스템 서비스로 실행되도록 nucleus를 수동으로 구성할 수도 있습니다. 다음은 systemd를 위한 서비스 파일의 예입니다.

```
[Unit]
Description=Greengrass Core

[Service]
Type=simple
PIDFile=/greengrass/v2/alts/loader.pid
RemainAfterExit=no
Restart=on-failure
RestartSec=10
ExecStart=/bin/sh /greengrass/v2/alts/current/distro/bin/loader

[Install]
WantedBy=multi-user.target
```

시스템 서비스를 구성한 후 다음 명령을 실행하여 부팅 시 디바이스 시작을 구성하고 AWS IoT Greengrass 코어 소프트웨어를 시작하거나 중지할 수 있습니다.
+ 서비스 상태를 확인하려면(systemd)

  ```
  sudo systemctl status greengrass.service
  ```
+ 디바이스가 부팅될 때 시작되도록 nucleus를 활성화하는 방법입니다.

  ```
  sudo systemctl enable greengrass.service
  ```
+ 디바이스가 부팅될 때 nucleus 시작을 중지하는 방법입니다.

  ```
  sudo systemctl disable greengrass.service
  ```
+  AWS IoT Greengrass 코어 소프트웨어를 시작하는 방법.

  ```
  sudo systemctl start greengrass.service
  ```
+  AWS IoT Greengrass 코어 소프트웨어를 중지합니다.

  ```
  sudo systemctl stop greengrass.service
  ```

### nucleus를 시스템 서비스로 구성(Windows)
<a name="configure-system-service-windows"></a>

 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 `--setup-system-service true` 인수를 사용하여 nucleus를 Windows 서비스로 시작하고 디바이스가 부팅될 때 시작되도록 구성합니다.

서비스를 구성한 후 다음 명령을 실행하여 부팅 시 디바이스 시작을 구성하고 AWS IoT Greengrass 코어 소프트웨어를 시작하거나 중지할 수 있습니다. 이러한 명령을 실행하려면 관리자로 명령 프롬프트 또는 PowerShell을 실행해야 합니다.

------
#### [ Windows Command Prompt (CMD) ]
+ 서비스 상태를 확인하려면

  ```
  sc query "greengrass"
  ```
+ 디바이스가 부팅될 때 시작되도록 nucleus를 활성화하는 방법입니다.

  ```
  sc config "greengrass" start=auto
  ```
+ 디바이스가 부팅될 때 nucleus 시작을 중지하는 방법입니다.

  ```
  sc config "greengrass" start=disabled
  ```
+  AWS IoT Greengrass 코어 소프트웨어를 시작하는 방법.

  ```
  sc start "greengrass"
  ```
+  AWS IoT Greengrass 코어 소프트웨어를 중지합니다.

  ```
  sc stop "greengrass"
  ```
**참고**  <a name="windows-ignore-shutdown-signal-behavior-note"></a>
Windows 디바이스에서 AWS IoT Greengrass 코어 소프트웨어는 Greengrass 구성 요소 프로세스를 종료하는 동안이 종료 신호를 무시합니다. 이 명령을 실행할 때 AWS IoT Greengrass 코어 소프트웨어가 종료 신호를 무시하는 경우 몇 초 정도 기다렸다가 다시 시도하세요.

------
#### [ PowerShell ]
+ 서비스 상태를 확인하려면

  ```
  Get-Service -Name "greengrass"
  ```
+ 디바이스가 부팅될 때 시작되도록 nucleus를 활성화하는 방법입니다.

  ```
  Set-Service -Name "greengrass" -Status stopped -StartupType automatic
  ```
+ 디바이스가 부팅될 때 nucleus 시작을 중지하는 방법입니다.

  ```
  Set-Service -Name "greengrass" -Status stopped -StartupType disabled
  ```
+  AWS IoT Greengrass 코어 소프트웨어를 시작하는 방법.

  ```
  Start-Service -Name "greengrass"
  ```
+  AWS IoT Greengrass 코어 소프트웨어를 중지합니다.

  ```
  Stop-Service -Name "greengrass"
  ```
**참고**  <a name="windows-ignore-shutdown-signal-behavior-note"></a>
Windows 디바이스에서 AWS IoT Greengrass 코어 소프트웨어는 Greengrass 구성 요소 프로세스를 종료하는 동안이 종료 신호를 무시합니다. 이 명령을 실행할 때 AWS IoT Greengrass 코어 소프트웨어가 종료 신호를 무시하는 경우 몇 초 정도 기다렸다가 다시 시도하세요.

------

## JVM 옵션으로 메모리 할당 제어
<a name="jvm-tuning"></a>

메모리가 제한된 디바이스 AWS IoT Greengrass 에서를 실행하는 경우 Java 가상 머신(JVM) 옵션을 사용하여 AWS IoT Greengrass 코어 소프트웨어가 사용하는 메모리 양을 제어하는 최대 힙 크기, 가비지 수집 모드 및 컴파일러 옵션을 제어할 수 있습니다. JVM의 힙 크기에 따라 [폐영역 회수](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html) 발생 전 또는 애플리케이션의 메모리 부족 전에 애플리케이션에서 사용될 수 있는 메모리 양이 결정됩니다. 최대 힙 크기는 로드가 많이 발생하는 작업 중 힙을 확장하는 경우 JVM에서 할당할 수 있는 최대 메모리 양을 지정합니다.

메모리 할당을 제어하려면 새 배포를 생성하거나 nucleus 구성 요소가 포함된 기존 배포를 수정하고 [nucleus 구성 요소 구성](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-jvm-options)의 `jvmOptions` 구성 파라미터에서 JVM 옵션을 지정합니다.

요구 사항에 따라 메모리 할당을 줄이거나 최소 메모리 할당으로 AWS IoT Greengrass 코어 소프트웨어를 실행할 수 있습니다.

**줄어든 메모리 할당**  
메모리 할당이 감소된 AWS IoT Greengrass 코어 소프트웨어를 실행하려면 다음 예제 구성 병합 업데이트를 사용하여 nucleus 구성에서 JVM 옵션을 설정하는 것이 좋습니다.

```
{
  "jvmOptions": "-XX:+UseSerialGC -XX:TieredStopAtLevel=1"
}
```

**최소 메모리 할당**  
최소 메모리 할당으로 AWS IoT Greengrass 코어 소프트웨어를 실행하려면 다음 예제 구성 병합 업데이트를 사용하여 nucleus 구성에서 JVM 옵션을 설정하는 것이 좋습니다.

```
{
  "jvmOptions": "-Xmx32m -XX:+UseSerialGC -Xint"
}
```

**중요**  
최소 메모리 할당으로 AWS IoT Greengrass 코어 소프트웨어를 실행하면 더 적은 메모리를 사용할 때 JVM이 더 많은 처리를 수행하기 때문에 사양이 낮은 시스템에 상당한 성능 영향을 미칠 수 있습니다. 메모리와 필요한 성능의 균형이 유지되도록 옵션을 조정하는 것이 좋습니다.

이러한 예제 구성 병합 업데이트에서는 다음 JVM 옵션이 사용됩니다.

`-XX:+UseSerialGC`  
JVM 힙 스페이스에 직렬 폐영역 회수가 사용되도록 지정합니다. 직렬 폐영역 회수기는 느린 편이지만, 다른 JVM 폐영역 회수 구현보다 메모리가 적게 사용됩니다.

`-XX:TieredStopAtLevel=1`  
Java JIT(Just-In-Time) 컴파일러가 한 번 사용되도록 JVM에 지시합니다. JIT 방식으로 컴파일된 코드에서는 디바이스 메모리의 스페이스가 사용되므로 JIT 컴파일러를 두 번 이상 사용하면 단일 컴파일보다 많은 메모리가 소비됩니다.

`-XmxNNm`  
최대 JVM 힙 크기를 설정합니다.  
최대 힙 크기를 너무 낮게 설정하면 성능이 느려지거나 메모리 부족 오류가 발생할 수 있습니다. `-XmxNNm` 옵션으로 최대 크기를 설정하기 전에 현재 힙 사용량을 측정하는 것이 좋습니다. JVM 옵션으로 `-XX:NativeMemoryTracking=detail` JVM을 구성합니다. 그런 다음에 [jcmd 유틸리티](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html) 내의 `VM.native_memory` 명령 요청을 사용하여 현재 힙 사용량을 측정합니다.
힙 측정이 옵션이 아니라면 `-Xmx64m`을 시작 값으로 사용하여 힙 크기를 64MB로 제한합니다. 그런 다음에는 최대 힙 크기를 점진적으로 줄일 수 있습니다. 최소 메모리 할당의 경우 `-Xmx32m`을 시작 값으로 사용하여 힙 크기를 32MB로 제한합니다.  
실제 요구 사항에 따라 `-Xmx` 값을 늘리거나 줄일 수 있지만, 최대 힙 크기를 16MB 미만으로 설정하지 않는 것이 좋습니다. 필요한 JVM 힙 크기의 양은 코어 디바이스에 배포된 플러그인 구성 요소에 따라 시간 경과에 따라 달라질 수 있습니다. 최대 힙 크기가 환경에 비해 너무 낮으면 메모리 부족으로 인해 AWS IoT Greengrass 코어 소프트웨어에 예기치 않은 오류가 발생할 수 있습니다. 부족한 메모리 때문에 성능이 느려지거나 오류가 발생하면 알려진 좋은 설정으로 되돌립니다. 예를 들어, 일반적인 커밋 힙 크기가 `41428KB`라면 `-Xmx40m`을 사용하여 힙 사용량을 약간 제한합니다.

`-Xint`  
JIT(Just-In-Time) 컴파일러가 사용되지 않도록 JVM에 지시합니다. 그 대신에 해석 전용 모드에서 JVM이 실행됩니다. 이 모드는 JIT 방식으로 컴파일된 코드가 실행되는 것보다 느립니다(저사양 시스템의 배포는 20배 느릴 수 있음). 그러나 컴파일된 코드에서는 메모리의 스페이스가 사용되지 않습니다.

구성 병합 파일 업데이트 생성에 대한 자세한 내용은 [구성 요소 구성 업데이트](update-component-configurations.md) 섹션을 참조하세요.

## 구성 요소를 실행하는 사용자 구성
<a name="configure-component-user"></a>

 AWS IoT Greengrass 코어 소프트웨어는 시스템 사용자 및 소프트웨어를 실행하는 그룹과 다른 그룹으로 구성 요소 프로세스를 실행할 수 있습니다. 이렇게 하면 AWS IoT Greengrass 코어 디바이스에서 실행되는 구성 요소에 권한을 부여하지 않고도 코어 소프트웨어를 루트 또는 관리자 사용자로 실행할 수 있으므로 보안이 향상됩니다.

다음 표에는 AWS IoT Greengrass 코어 소프트웨어가 사용자가 지정한 사용자로 실행할 수 있는 구성 요소의 유형이 나와 있습니다. 자세한 내용은 [구성 요소 유형](develop-greengrass-components.md#component-types) 단원을 참조하십시오.


| 구성 요소 유형 | 구성 요소 사용자 구성 | 
| --- | --- | 
|  nucleus  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-no.png) 아니요   | 
|  플러그인  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-no.png) 아니요   | 
|  일반  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-yes.png) 예   | 
|  Lambda(컨테이너화되지 않았음)  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-yes.png) 예   | 
|  Lambda(컨테이너화되었음)  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-yes.png) 예   | 

배포 구성에서 구성 요소 사용자를 지정하려면 먼저 구성 요소 사용자를 생성해야 합니다. Windows 기반 디바이스에서는 LocalSystem 계정의 자격 증명 관리자 인스턴스에서 사용자의 사용자 이름과 암호도 저장해야 합니다. 자세한 내용은 [Windows 디바이스의 구성 요소 사용자 설정](#create-component-user-windows) 단원을 참조하십시오.

Linux 기반 디바이스에서 구성 요소 사용자를 구성할 때 선택적으로 그룹을 지정할 수도 있습니다. `user:group` 형식으로 사용자와 그룹을 콜론(`:`)으로 구분하여 지정합니다. 그룹을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 기본적으로 사용자의 기본 그룹으로 설정됩니다. 이름 또는 ID를 사용하여 사용자와 그룹을 식별할 수 있습니다.

Linux 기반 디바이스에서는 알 수 없는 사용자라고도 하는 존재하지 않는 시스템 사용자로 구성 요소를 실행하여 보안을 강화할 수도 있습니다. Linux 프로세스에서는 동일한 사용자가 실행하는 다른 프로세스에 신호를 보낼 수 있습니다. 알 수 없는 사용자는 다른 프로세스를 실행하지 않으므로 알 수 없는 사용자로 구성 요소를 실행하여 구성 요소에서 코어 디바이스의 다른 구성 요소에 신호를 보내지 못하도록 할 수 있습니다. 알 수 없는 사용자로 구성 요소를 실행하려면 코어 디바이스에 존재하지 않는 사용자 ID를 지정합니다. 알 수 없는 그룹으로 실행되도록 존재하지 않는 그룹 ID를 지정할 수도 있습니다.

구성 요소와 코어 디바이스마다 사용자를 구성할 수 있습니다.
+ **구성 요소에 대해 구성**

  각 구성 요소를 해당 구성 요소에 지정된 사용자를 통해 실행되도록 구성할 수 있습니다. 배포를 생성할 때 해당 구성 요소에 대한 `runWith` 구성에서 구성 요소마다 사용자를 지정할 수 있습니다. AWS IoT Greengrass 코어 소프트웨어는 구성한 경우 구성 요소를 지정된 사용자로 실행합니다. 그렇지 않으면 코어 디바이스에 대해 구성하는 기본 사용자로 구성 요소가 실행되도록 기본적으로 설정됩니다. 배포 구성에서 구성 요소 사용자를 지정하는 방법에 대한 자세한 내용은 [배포 만들기](create-deployments.md)의 [`runWith`](create-deployments.md#component-run-with-config) 구성 파라미터를 참조하세요.
+ **코어 디바이스의 기본 사용자 구성**

   AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 실행하는 데 사용하는 기본 사용자를 구성할 수 있습니다. AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 실행할 때 해당 구성 요소에 사용자를 지정했는지 확인하고 이를 사용하여 구성 요소를 실행합니다. 구성 요소가 사용자를 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 코어 디바이스에 대해 구성한 기본 사용자로 구성 요소를 실행합니다. 자세한 내용은 [기본 구성 요소 사용자 구성](#configure-default-component-user) 단원을 참조하십시오.

**참고**  
Windows 기반 디바이스에서는 구성 요소를 실행할 기본 사용자를 하나 이상 지정해야 합니다.  
Linux 기반 디바이스에서는 구성 요소를 실행할 사용자를 구성하지 않으면 다음 고려 사항이 적용됩니다.  
 AWS IoT Greengrass 코어 소프트웨어를 루트로 실행하면 소프트웨어가 구성 요소를 실행하지 않습니다. 루트로 실행하는 경우 구성 요소를 실행할 기본 사용자를 지정해야 합니다.
루트가 아닌 사용자로 AWS IoT Greengrass 코어 소프트웨어를 실행하면 소프트웨어가 해당 사용자로 구성 요소를 실행합니다.

**Topics**
+ [Windows 디바이스의 구성 요소 사용자 설정](#create-component-user-windows)
+ [기본 구성 요소 사용자 구성](#configure-default-component-user)

### Windows 디바이스의 구성 요소 사용자 설정
<a name="create-component-user-windows"></a>

**Windows 기반 디바이스의 구성 요소 사용자 설정 방법**

1. 디바이스의 LocalSystem 계정에서 구성 요소 사용자를 생성합니다.

   ```
   net user /add component-user password
   ```

1. [Microsoft의 PsExec 유틸리티](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)를 사용하여 구성 요소 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장합니다.

   ```
   psexec -s cmd /c cmdkey /generic:component-user /user:component-user /pass:password
   ```
**참고**  
Windows 기반 디바이스의 LocalSystem 계정에서는 Greengrass nucleus가 실행되며, PsExec 유틸리티를 사용하여 기본 사용자 정보를 LocalSystem 계정에 저장해야 합니다. Credential Manager 애플리케이션을 사용하면 이 정보가 LocalSystem 계정 대신 현재 로그인한 사용자의 Windows 계정에 저장됩니다.

### 기본 구성 요소 사용자 구성
<a name="configure-default-component-user"></a>

배포를 사용하여 코어 디바이스의 기본 사용자를 구성할 수 있습니다. 이 배포에서는 [nucleus 구성 요소](greengrass-nucleus-component.md) 구성을 업데이트합니다.

**참고**  
`--component-default-user` 옵션으로 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 기본 사용자를 설정할 수도 있습니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 설치](install-greengrass-core-v2.md) 단원을 참조하십시오.

`aws.greengrass.Nucleus` 구성 요소에 대해 다음 구성 업데이트가 지정되는 [배포를 생성](create-deployments.md)합니다.

------
#### [ Linux ]

```
{
  "runWithDefault": {
    "posixUser": "ggc_user:ggc_group"
  }
}
```

------
#### [ Windows ]

```
{
  "runWithDefault": {
    "windowsUser": "ggc_user"
  }
}
```

**참고**  
지정한 사용자가 존재해야 하며, 이 사용자의 사용자 이름과 암호는 Windows 디바이스에 있는 LocalSystem 계정의 Credential Manager 인스턴스에 저장되어야 합니다. 자세한 내용은 [Windows 디바이스의 구성 요소 사용자 설정](#create-component-user-windows) 단원을 참조하십시오.

------

다음 예제에서는 `ggc_user`는 기본 사용자, `ggc_group`은 기본 그룹으로 구성되는 Linux 기반 디바이스에 대한 배포가 정의됩니다. `merge` 구성 업데이트에는 직렬화된 JSON 객체가 필요합니다.

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"runWithDefault\":{\"posixUser\":\"ggc_user:ggc_group\"}}"
      }
    }
  }
}
```

## 구성 요소에 대한 시스템 리소스 제한 구성
<a name="configure-component-system-resource-limits"></a>

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

각 구성 요소의 프로세스가 코어 디바이스에서 사용할 수 있는 최대 CPU 및 RAM 사용량을 구성할 수 있습니다.

시스템 리소스 제한이 지원되는 구성 요소의 유형이 다음 표에 나와 있습니다. 자세한 내용은 [구성 요소 유형](develop-greengrass-components.md#component-types) 단원을 참조하십시오.


| 구성 요소 유형 | 시스템 리소스 제한 구성 | 
| --- | --- | 
|  nucleus  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-no.png) 아니요   | 
|  플러그인  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-no.png) 아니요   | 
|  일반  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-yes.png) 예   | 
|  Lambda(컨테이너화되지 않았음)  |  <a name="polaris-yes-para"></a> ![\[Yes\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-yes.png) 예   | 
|  Lambda(컨테이너화되었음)  |  <a name="polaris-no-para"></a> ![\[No\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/images/icon-no.png) 아니요   | 

**중요**  
[Docker 컨테이너에서 AWS IoT Greengrass 코어 소프트웨어를 실행할](run-greengrass-docker.md) 때는 시스템 리소스 제한이 지원되지 않습니다.

구성 요소와 코어 디바이스마다 시스템 리소스 제한을 구성할 수 있습니다.
+ **구성 요소에 대해 구성**

  해당 구성 요소에 지정된 시스템 리소스 제한으로 각 구성 요소를 구성할 수 있습니다. 배포를 생성할 때 배포의 각 구성 요소에 대한 시스템 리소스 제한을 지정할 수 있습니다. 구성 요소에서 시스템 리소스 제한이 지원되면 AWS IoT Greengrass 코어 소프트웨어에서는 구성 요소의 프로세스에 제한이 적용됩니다. 구성 요소에 대한 시스템 리소스 제한을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 코어 디바이스에 대해 구성한 기본값을 사용합니다. 자세한 내용은 [배포 만들기](create-deployments.md) 단원을 참조하십시오.
+ **코어 디바이스의 기본값 구성**

   AWS IoT Greengrass 코어 소프트웨어가 이러한 제한을 지원하는 구성 요소에 적용하는 기본 시스템 리소스 제한을 구성할 수 있습니다. AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 실행하면 해당 구성 요소에 대해 지정한 시스템 리소스 제한이 적용됩니다. 해당 구성 요소가 시스템 리소스 제한을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 코어 디바이스에 대해 구성한 기본 시스템 리소스 제한을 적용합니다. 기본 시스템 리소스 제한을 지정하지 않으면 AWS IoT Greengrass 코어 소프트웨어는 기본적으로 시스템 리소스 제한을 적용하지 않습니다. 자세한 내용은 [기본 시스템 리소스 제한 구성](#configure-default-component-system-resource-limits) 단원을 참조하십시오.

### 기본 시스템 리소스 제한 구성
<a name="configure-default-component-system-resource-limits"></a>

[Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)를 배포하여 코어 디바이스에 대한 기본 시스템 리소스 제한을 구성할 수 있습니다. 기본 시스템 리소스 제한을 구성하려면 `aws.greengrass.Nucleus` 구성 요소에 다음 구성 업데이트가 지정되는 [배포를 생성](create-deployments.md)합니다.

```
{
  "runWithDefault": {
    "systemResourceLimits": {
      "cpu": cpuTimeLimit,
      "memory": memoryLimitInKb
    }
  }
}
```

다음 예제에서는 CPU 시간 제한이 CPU 코어 4개 디바이스의 50% 사용량에 해당하는 `2`로 구성되는 배포를 정의합니다. 이 예제에서는 메모리 사용량을 100MB로 구성합니다.

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"runWithDefault\":{\"systemResourceLimits\":\"cpus\":2,\"memory\":102400}}}"
      }
    }
  }
}
```

## 포트 443에서 또는 네트워크 프록시를 통해 연결
<a name="configure-alpn-network-proxy"></a>

AWS IoT Greengrass 코어 디바이스는 TLS 클라이언트 인증과 함께 MQTT 메시징 프로토콜을 AWS IoT Core 사용하여와 통신합니다. 일반적으로 MQTT over TLS는 포트 8883을 사용합니다. 그러나 보안 조치로서 제한적 환경 하에서 작은 범위의 TCP 포트로의 인바운드 및 아웃바운드 트래픽이 제한될 수 있습니다. 예를 들어, 기업 방화벽은 HTTPS 트래픽용 포트 443을 열지만 MQTT 트래픽용 포트 8883과 같이 비교적 일반적이지 않은 프로토콜에 사용되는 기타 포트를 닫을 수 있습니다. 다른 제한적 환경에서는 모든 트래픽이 인터넷 연결 전에 프록시를 경유해야 할 수도 있습니다.

**참고**  
Greengrass [nucleus 구성 요소 v2.0.3 이하를 실행하는 Greengrass](greengrass-nucleus-component.md) 코어 디바이스는 포트 8443을 사용하여 AWS IoT Greengrass 데이터 영역 엔드포인트에 연결합니다. 이러한 디바이스에서는 포트 8443에서 이 엔드포인트에 연결할 수 있어야 합니다. 자세한 내용은 [프록시 또는 방화벽을 통해 디바이스 트래픽 허용](allow-device-traffic.md) 단원을 참조하십시오.

이러한 시나리오에서 통신을 활성화하기 위해는 다음 구성 옵션을 AWS IoT Greengrass 제공합니다.
+ **포트 443을 통한 MQTT 통신**입니다. 네트워크에서 포트 443에 대한 연결이 허용되면 MQTT 트래픽에 기본 포트 8883 대신에 포트 443이 사용되도록 Greengrass 코어를 구성할 수 있습니다. 이는 포트 443으로 직접 연결되거나 네트워크 프록시 서버를 통해 연결되는 것일 수 있습니다. 인증서 기반 클라이언트 인증이 사용되는 기본 구성과 달리 포트 443의 MQTT에서는 인증에 [디바이스 서비스 역할](device-service-role.md)이 사용됩니다.

  자세한 내용은 [포트 443을 통해 MQTT 구성](#configure-mqtt-port-443) 단원을 참조하십시오.
+ **포트 443을 통한 HTTPS 통신**입니다. AWS IoT Greengrass 코어 소프트웨어는 기본적으로 포트 8443을 통해 HTTPS 트래픽을 전송하지만 포트 443을 사용하도록 구성할 수 있습니다. AWS IoT Greengrass 는 [Application Layer Protocol Network](https://tools.ietf.org/html/rfc7301)(ALPN) TLS 확장을 사용하여이 연결을 활성화합니다. 기본 구성과 마찬가지로 포트 443의 HTTPS에서는 인증서 기반 클라이언트 인증이 사용됩니다.
**중요**  
ALPN을 사용하고 포트 443을 통한 HTTPS 통신을 활성화하려면 코어 디바이스에서 Java 8 업데이트 252 이상이 실행되어야 합니다. Java 버전 9 이상의 모든 업데이트에서는 ALPN도 지원됩니다.

  자세한 내용은 [포트 443을 통해 HTTPS 구성](#configure-https-port-443) 단원을 참조하십시오.
+ **네트워크 프록시를 통한 연결**. Greengrass 코어 코어가 연결되는 중개자로 작동하도록 네트워크 프록시 서버를 구성할 수 있습니다. AWS IoT Greengrass 에서는 HTTP 및 HTTPS 프록시에 대한 기본 인증이 지원됩니다.

  <a name="https-proxy-greengrass-nucleus-requirement"></a>Greengrass 코어 디바이스에서 HTTPS 프록시가 사용되려면 [Greengrass nucleus ](greengrass-nucleus-component.md) v2.5.0 이상을 실행해야 합니다.

   AWS IoT Greengrass 코어 소프트웨어는 `ALL_PROXY`, `HTTP_PROXY``HTTPS_PROXY`, 및 `NO_PROXY` 환경 변수를 통해 프록시 구성을 구성 요소에 전달합니다. 프록시를 통해 연결되려면 구성 요소에서 이러한 설정이 사용되어야 합니다 일반적으로 이러한 환경 변수가 연결을 만드는 기본값으로 사용되는 공통 라이브러리(예: boto3, cURL 및 python `requests` 패키지)가 구성 요소에서 사용됩니다. 구성 요소에서 이러한 환경 변수도 지정되는 경우 AWS IoT Greengrass 에서 재정의되지 않습니다.

  자세한 내용은 [네트워크 프록시 구성](#configure-network-proxy) 단원을 참조하십시오.

### 포트 443을 통해 MQTT 구성
<a name="configure-mqtt-port-443"></a>

기존 코어 디바이스의 포트 443을 통하거나 새 코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 MQTT를 구성할 수 있습니다.

**Topics**
+ [기존 코어 디바이스의 포트 443을 통해 MQTT 구성](#configure-mqtt-port-443-deployment)
+ [설치 중 포트 443을 통해 MQTT 구성](#configure-mqtt-port-443-installer)

#### 기존 코어 디바이스의 포트 443을 통해 MQTT 구성
<a name="configure-mqtt-port-443-deployment"></a>

배포를 사용하여 단일 코어 디바이스 또는 코어 디바이스 그룹의 포트 443을 통해 MQTT를 구성할 수 있습니다. 이 배포에서는 [nucleus 구성 요소](greengrass-nucleus-component.md) 구성을 업데이트합니다. `mqtt` 구성을 업데이트하면 nucleus가 다시 시작됩니다.

포트 443을 통해 MQTT를 구성하려면 `aws.greengrass.Nucleus` 구성 요소에 다음 구성 업데이트가 지정되는 [배포를 생성](create-deployments.md)합니다.

```
{
  "mqtt": {
    "port": 443
  }
}
```

다음 예제에서는 포트 443을 통해 MQTT가 구성되는 배포를 정의합니다. `merge` 구성 업데이트에는 직렬화된 JSON 객체가 필요합니다.

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"mqtt\":{\"port\":443}}"
      }
    }
  }
}
```

#### 설치 중 포트 443을 통해 MQTT 구성
<a name="configure-mqtt-port-443-installer"></a>

코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 포트 443을 통해 MQTT를 구성할 수 있습니다. `--init-config` 설치 프로그램 인수를 사용하여 포트 443을 통해 MQTT를 구성합니다. [수동 프로비저닝](manual-installation.md), [플릿 프로비저닝](fleet-provisioning.md) 또는 [사용자 지정 프로비저닝](custom-provisioning.md)으로 설치할 때 이 인수를 지정할 수 있습니다.

### 포트 443을 통해 HTTPS 구성
<a name="configure-https-port-443"></a>

이 기능에는 [Greengrass nucleus](greengrass-nucleus-component.md) v2.0.4 이상이 필요합니다.

기존 코어 디바이스의 포트 443을 통하거나 새 코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 HTTPS를 구성할 수 있습니다.

**Topics**
+ [기존 코어 디바이스의 포트 443을 통해 HTTPS 구성](#configure-https-port-443-deployment)
+ [설치 중 포트 443을 통해 HTTPS 구성](#configure-https-port-443-installer)

#### 기존 코어 디바이스의 포트 443을 통해 HTTPS 구성
<a name="configure-https-port-443-deployment"></a>

배포를 사용하여 단일 코어 디바이스 또는 코어 디바이스 그룹의 포트 443을 통해 HTTPS를 구성할 수 있습니다. 이 배포에서는 [nucleus 구성 요소](greengrass-nucleus-component.md) 구성을 업데이트합니다.

포트 443을 통해 HTTPS를 구성하려면 `aws.greengrass.Nucleus` 구성 요소에 다음 구성 업데이트가 지정되는 [배포를 생성](create-deployments.md)합니다.

```
{
  "greengrassDataPlanePort": 443
}
```

다음 예제에서는 포트 443을 통해 HTTPS가 구성되는 배포를 정의합니다. `merge` 구성 업데이트에는 직렬화된 JSON 객체가 필요합니다.

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"greengrassDataPlanePort\":443}"
      }
    }
  }
}
```

#### 설치 중 포트 443을 통해 HTTPS 구성
<a name="configure-https-port-443-installer"></a>

코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 포트 443을 통해 HTTPS를 구성할 수 있습니다. `--init-config` 설치 프로그램 인수를 사용하여 포트 443을 통해 HTTPS를 구성합니다. [수동 프로비저닝](manual-installation.md), [플릿 프로비저닝](fleet-provisioning.md) 또는 [사용자 지정 프로비저닝](custom-provisioning.md)으로 설치할 때 이 인수를 지정할 수 있습니다.

### 네트워크 프록시 구성
<a name="configure-network-proxy"></a>

이 섹션의 절차에 따라 HTTP 또는 HTTPS 네트워크 프록시를 통해 인터넷에 연결되도록 Greengrass 코어 디바이스를 구성합니다. 코어 디바이스에서 사용되는 엔드포인트 및 포트에 대한 자세한 내용은 [프록시 또는 방화벽을 통해 디바이스 트래픽 허용](allow-device-traffic.md) 섹션을 참조하세요.

**중요**  
코어 디바이스에서 v2.4.0 이전 버전의 [Greengrass nucleus](greengrass-nucleus-component.md)가 실행되는 경우 네트워크 프록시를 사용하려면 다음 권한이 디바이스의 역할에서 허용되어야 합니다.  
`iot:Connect`
`iot:Publish`
`iot:Receive`
`iot:Subscribe`
이는 디바이스가 토큰 교환 서비스의 AWS 자격 증명을 사용하여 MQTT 연결을 인증하기 때문에 필요합니다 AWS IoT. 디바이스는 MQTT를 사용하여에서 배포를 수신하고 설치 AWS 클라우드하므로 역할에 대한 이러한 권한을 정의하지 않으면 디바이스가 작동하지 않습니다. 일반적으로 디바이스에서는 MQTT 연결 인증에 X.509 인증서가 사용되지만, 디바이스에서 프록시가 사용될 때는 이 방식으로 인증될 수 없습니다.  
디바이스 역할을 구성하는 방법에 대한 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 섹션을 참조하세요.

**Topics**
+ [기존 코어 디바이스에서 네트워크 프록시 구성](#configure-network-proxy-deployment)
+ [설치 중 네트워크 프록시 구성](#configure-network-proxy-installer)
+ [HTTPS 프록시가 신뢰될 수 있도록 코어 디바이스 설정](#https-proxy-certificate-trust)
+ [networkProxy 객체](#network-proxy-object)

#### 기존 코어 디바이스에서 네트워크 프록시 구성
<a name="configure-network-proxy-deployment"></a>

배포를 사용하여 단일 코어 디바이스 또는 코어 디바이스 그룹에서 네트워크 프록시를 구성할 수 있습니다. 이 배포에서는 [nucleus 구성 요소](greengrass-nucleus-component.md) 구성을 업데이트합니다. `networkProxy` 구성을 업데이트하면 nucleus가 다시 시작됩니다.

네트워크 프록시를 구성하려면 다음 구성 업데이트가 병합되는 `aws.greengrass.Nucleus` 구성 요소에 대한 [배포를 생성](create-deployments.md)합니다. 이 구성 업데이트에는 [networkProxy 객체](#network-proxy-object)가 있습니다.

```
{
  "networkProxy": {
    "noProxyAddresses": "http://192.168.0.1,www.example.com",
    "proxy": {
      "url": "https://my-proxy-server:1100"
    }
  }
}
```

다음 예제에서는 네트워크 프록시가 구성되는 배포를 정의합니다. `merge` 구성 업데이트에는 직렬화된 JSON 객체가 필요합니다.

```
{
  "components": {
    "aws.greengrass.Nucleus": {
      "version": "2.17.0",
      "configurationUpdate": {
        "merge": "{\"networkProxy\":{\"noProxyAddresses\":\"http://192.168.0.1,www.example.com\",\"proxy\":{\"url\":\"https://my-proxy-server:1100\",\"username\":\"Mary_Major\",\"password\":\"pass@word1357\"}}}"
      }
    }
  }
}
```

#### 설치 중 네트워크 프록시 구성
<a name="configure-network-proxy-installer"></a>

코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 네트워크 프록시를 구성할 수 있습니다. `--init-config` 설치 프로그램 인수를 사용하여 네트워크 프록시를 구성합니다. [수동 프로비저닝](manual-installation.md), [플릿 프로비저닝](fleet-provisioning.md) 또는 [사용자 지정 프로비저닝](custom-provisioning.md)으로 설치할 때 이 인수를 지정할 수 있습니다.

#### HTTPS 프록시가 신뢰될 수 있도록 코어 디바이스 설정
<a name="https-proxy-certificate-trust"></a>

HTTPS 프록시가 사용되도록 코어 디바이스를 구성할 때는 HTTPS 프록시가 신뢰될 수 있도록 코어 디바이스에 프록시 서버 인증서 체인을 추가해야 합니다. 그렇지 않으면 코어 디바이스에서 프록시를 통해 트래픽을 라우팅하려고 할 때 오류가 발생할 수 있습니다. 코어 디바이스의 Amazon 루트 CA 인증서 파일에 프록시 서버 CA 인증서를 추가합니다.

**HTTPS 프록시가 신뢰될 수 있도록 코어 디바이스를 설정하는 방법**

1. 코어 디바이스에서 Amazon 루트 CA 인증서 파일을 찾습니다.
   + [자동 프로비저닝](quick-installation.md)과 함께 AWS IoT Greengrass 코어 소프트웨어를 설치한 경우 Amazon 루트 CA 인증서 파일은에 있습니다`/greengrass/v2/rootCA.pem`.
   + [수동](manual-installation.md) 또는 [플릿 프로비저닝](fleet-provisioning.md)으로 AWS IoT Greengrass 코어 소프트웨어를 설치한 경우 Amazon 루트 CA 인증서 파일이에 있을 수 있습니다`/greengrass/v2/AmazonRootCA1.pem`.

   Amazon 루트 CA 인증서가 이러한 위치에 없는 경우 `/greengrass/v2/config/effectiveConfig.yaml`에서 `system.rootCaPath` 속성을 확인하여 해당 위치를 찾습니다.

1. Amazon 루트 CA 인증서 파일에 프록시 서버 CA 인증서의 내용을 추가합니다.

   다음 예제에서는 Amazon 루트 CA 인증서 파일에 추가된 프록시 서버 CA 인증서를 보여줍니다.

   ```
   -----BEGIN CERTIFICATE-----
   MIIEFTCCAv2gAwIQWgIVAMHSAzWG/5YVRYtRQOxXUTEpHuEmApzGCSqGSIb3DQEK
   \nCwUAhuL9MQswCQwJVUzEPMAVUzEYMBYGA1UECgwP1hem9uLmNvbSBJbmMuMRww
   ... content of proxy CA certificate ...
   +vHIRlt0e5JAm5\noTIZGoFbK82A0/nO7f/t5PSIDAim9V3Gc3pSXxCCAQoFYnui
   GaPUlGk1gCE84a0X\n7Rp/lND/PuMZ/s8YjlkY2NmYmNjMCAXDTE5MTEyN2cM216
   gJMIADggEPADf2/m45hzEXAMPLE=
   -----END CERTIFICATE-----
   
   -----BEGIN CERTIFICATE-----
   MIIDQTCCAimgF6AwIBAgITBmyfz/5mjAo54vB4ikPmljZKyjANJmApzyMZFo6qBg
   ADA5MQswCQYDVQQGEwJVUzEPMA0tMVT8QtPHRh8jrdkGA1UEChMGDV3QQDExBBKW
   ... content of root CA certificate ...
   o/ufQJQWUCyziar1hem9uMRkwFwYVPSHCb2XV4cdFyQzR1KldZwgJcIQ6XUDgHaa
   5MsI+yMRQ+hDaXJiobldXgjUka642M4UwtBV8oK2xJNDd2ZhwLnoQdeXeGADKkpy
   rqXRfKoQnoZsG4q5WTP46EXAMPLE
   -----END CERTIFICATE-----
   ```

#### networkProxy 객체
<a name="network-proxy-object"></a>

`networkProxy` 객체를 사용하여 네트워크 프록시 관련 정보를 지정합니다. 이 객체에는 다음 정보가 포함되어 있어야 합니다.

`noProxyAddresses`  
(선택 사항) 프록시에서 제외되는 IP 주소 또는 호스트 이름을 쉼표로 구분한 목록입니다.

`proxy`  
연결할 프록시입니다. 이 객체에는 다음 정보가 포함되어 있어야 합니다.    
`url`  
`scheme://userinfo@host:port` 형식으로 표시되는 프록시 서버의 URL입니다.  <a name="nucleus-component-configuration-proxy-url-segments"></a>
+ `scheme` - 체계로, `http` 또는 `https`여야 합니다.
**중요**  
<a name="https-proxy-greengrass-nucleus-requirement"></a>Greengrass 코어 디바이스에서 HTTPS 프록시가 사용되려면 [Greengrass nucleus ](greengrass-nucleus-component.md) v2.5.0 이상을 실행해야 합니다.  
HTTPS 프록시를 구성하는 경우 코어 디바이스의 Amazon 루트 CA 인증서에 프록시 서버 CA 인증서를 추가해야 합니다. 자세한 내용은 [HTTPS 프록시가 신뢰될 수 있도록 코어 디바이스 설정](#https-proxy-certificate-trust) 단원을 참조하십시오.
+ `userinfo` - (선택 사항) 사용자 이름 및 암호 정보입니다. `url`에서 이 정보를 지정하면 Greengrass 코어 디바이스에서는 `username` 및 `password` 필드를 무시합니다.
+ `host` - 프록시 서버의 호스트 이름 또는 IP 주소입니다.
+ `port` – (선택 사항) 포트 번호입니다. 포트를 지정하지 않으면 Greengrass 코어 디바이스에서는 다음 기본값이 사용됩니다.
  + `http` – 80
  + `https` – 443  
`username`  
(선택 사항) 프록시 서버를 인증하는 사용자 이름입니다.  
`password`  
(선택 사항) 프록시 서버를 인증하는 암호입니다.

## 프라이빗 CA에서 서명한 디바이스 인증서 사용
<a name="configure-nucleus-private-ca"></a>

사용자 지정 프라이빗 인증 기관(CA)을 사용하는 경우 Greengrass nucleus의 **greengrassDataPlaneEndpoint**를 **iotdata**로 설정해야 합니다. **--init-config** [설치 프로그램 인수](configure-installer.md)를 사용하여 배포 또는 설치 중에 이 옵션을 설정할 수 있습니다.

디바이스가 연결되는 Greengrass 데이터 플레인 엔드포인트를 사용자 지정할 수 있습니다. 이 구성 옵션을 **iotdata**로 설정하여 **iotDataEndpoint**를 통해 지정할 수 있는 IoT 데이터 엔드포인트와 동일한 엔드포인트로 Greengrass 데이터 플레인 엔드포인트를 설정할 수 있습니다.

## MQTT 제한 시간 및 캐시 설정 구성
<a name="configure-mqtt"></a>

환경에서 AWS IoT Greengrass 구성 요소는 MQTT를 사용하여와 통신할 수 있습니다 AWS IoT Core. AWS IoT Greengrass 코어 소프트웨어는 구성 요소에 대한 MQTT 메시지를 관리합니다. 코어 디바이스에서 AWS 클라우드연결이 끊어지면 소프트웨어에서는 나중에 연결이 복원될 때 다시 시도할 MQTT 메시지가 캐싱됩니다. 메시지 제한 시간 및 캐시 크기와 같은 설정을 구성할 수 있습니다. 자세한 내용은 [ Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 `mqtt` 및 `mqtt.spooler` 구성 파라미터를 참조하세요.

AWS IoT Core 는 MQTT 메시지 브로커에 서비스 할당량을 부과합니다. 이러한 할당량은 코어 디바이스와 AWS IoT Core간에 보내는 메시지에 적용될 수 있습니다. 자세한 내용은 *AWS 일반 참조*의 [AWS IoT Core 메시지 브로커 서비스 할당량](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits)을 참조하세요.

## IPv6 네트워크에서 Greengrass Nucleus 구성
<a name="configure-ipv6"></a>

 Greengrass Nucleus는 Greengrass API를 AWS IoT Core 통해와 대화합니다. [ APIs](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) Greengrass API는 듀얼 스택 환경에서 IPv6를 지원합니다.

IPv6용 듀얼 스택 엔드포인트를 활성화하려면:
+  시스템 속성 `aws.useDualstackEndpoint=true` 및 `java.net.preferIPv6Addresses=true`를 `jvmOptions`에 추가합니다.
+  `s3EndpointType`를 `DUALSTACK`로 설정합니다.

 이 옵션은 [배포](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html) 시 지정하거나, `--init-config` [설치 인자](https://docs.aws.amazon.com/greengrass/v2/developerguide/configure-installer.html)를 사용하여 수동으로 프로비저닝할 수 있습니다. 자세한 내용은 [Amazon S3 듀얼 스택 엔드포인트 사용](https://docs.aws.amazon.com/AmazonS3/latest/API/dual-stack-endpoints.html)을 참조하세요.

**Example 배포용 코드:**  

```
{
    "jvmOptions": "-Daws.useDualstackEndpoint=true",
    "s3EndpointType":"DUALSTACK"
}
```

**Example 수동 프로비저닝을 통한 `config.yaml`:**  

```
---
system:
  ...
services:
  aws.greengrass.Nucleus:
    ...
    configuration:
      ...
      jvmOptions: "-Daws.useDualstackEndpoint=true -Djava.net.preferIPv6Addresses=true"
      s3EndpointType: "DUALSTACK"
```

# AWS IoT Greengrass 코어 소프트웨어(OTA) 업데이트
<a name="update-greengrass-core-v2"></a>

AWS IoT Greengrass 코어 소프트웨어는 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)와 소프트웨어의 무선 업데이트(OTA)를 수행하기 위해 디바이스에 배포할 수 있는 기타 구성 요소(선택 사항)로 구성되어 있습니다. 이 기능은 AWS IoT Greengrass 코어 소프트웨어에 내장되어 있습니다.

OTA 업데이트를 통해 다음을 보다 효율적으로 수행할 수 있습니다.
+ 보안 취약성을 수정합니다.
+ 소프트웨어 안정성 문제를 해결합니다.
+ 새 기능 또는 향상된 기능을 배포합니다.

**Topics**
+ [요구 사항](#ota-update-requirements)
+ [코어 디바이스에 대한 고려 사항](#ota-update-considerations)
+ [Greengrass nucleus 업데이트 동작](#ota-update-behavior-nucleus)
+ [OTA 업데이트를 수행합니다.](#create-ota-update)

## 요구 사항
<a name="ota-update-requirements"></a>

AWS IoT Greengrass 코어 소프트웨어의 OTA 업데이트를 배포하려면 다음과 같은 요구 사항이 적용됩니다.
+ 배포를 수신하려면 Greengrass 코어 디바이스가 AWS 클라우드에 연결되어 있어야 합니다.
+ Greengrass 코어 디바이스는 AWS IoT Core 및 AWS IoT Greengrass를 사용하여 인증을 위한 인증서 및 키로 올바르게 구성되고 프로비저닝되어야 합니다.
+ AWS IoT Greengrass 코어 소프트웨어는 시스템 서비스로 설정하고 실행해야 합니다. JAR 파일(`Greengrass.jar`)에서 nucleus를 실행하는 경우에는 OTA 업데이트가 작동하지 않습니다. 자세한 내용은 [Greengrass nucleus를 시스템 서비스로 구성](configure-greengrass-core-v2.md#configure-system-service) 섹션을 참조하세요.

## 코어 디바이스에 대한 고려 사항
<a name="ota-update-considerations"></a>

OTA 업데이트를 수행하기 전에 업데이트하는 코어 디바이스와 연결된 클라이언트 디바이스에 미치는 영향에 유의하세요.
+ Greengrass nucleus가 종료됩니다.
+ 코어 디바이스에서 실행되는 모든 구성 요소도 종료됩니다. 해당 구성 요소가 로컬 리소스에 쓰는 경우에 제대로 종료하지 않으면 해당 리소스가 잘못된 상태로 남을 수 있습니다. 구성 요소는 [프로세스 간 통신](interprocess-communication.md)을 사용하여 사용하는 리소스를 정리할 때까지 업데이트를 연기하도록 nucleus 구성 요소에 지시할 수 있습니다.
+ nucleus 구성 요소가 종료되는 동안 코어 디바이스는 AWS 클라우드 및 로컬 디바이스와의 연결이 끊어집니다. 코어 디바이스는 종료된 상태에서는 클라이언트 디바이스의 메시지를 라우팅하지 않습니다.
+ 구성 요소로 실행되는 수명이 긴 Lambda 함수는 동적 상태 정보를 잃고 보류 중인 모든 작업을 삭제합니다.

## Greengrass nucleus 업데이트 동작
<a name="ota-update-behavior-nucleus"></a>

<a name="component-patch-update"></a>구성 요소를 배포할 때 AWS IoT Greengrass는 해당 구성 요소의 모든 종속성에 대해 지원되는 최신 버전을 설치합니다. 이로 인해 사물 그룹에 새 디바이스를 추가하거나 해당 디바이스를 대상으로 하는 배포를 업데이트하면 AWS에서 제공한 퍼블릭 구성 요소의 새 패치 버전이 코어 디바이스에 자동으로 배포될 수 있습니다. Nucleus 업데이트와 같은 일부 자동 업데이트로 인해 디바이스가 예기치 않게 다시 시작될 수 있습니다.

[Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 버전이 변경되면 디바이스의 nucleus 및 기타 모든 구성 요소를 포함하는 AWS IoT Greengrass 코어 소프트웨어가 다시 시작되어 변경 사항을 적용합니다. nucleus 구성 요소가 업데이트될 때 [코어 디바이스에 미치는 영향](#ota-update-considerations)으로 인해 새 nucleus 패치 버전이 디바이스에 배포되는 시기를 제어하고 싶을 수 있습니다. 이렇게 하려면 배포에 Greengrass nucleus 구성 요소를 직접 포함해야 합니다. 구성 요소를 직접 포함한다는 것은 배포 구성에 해당 구성 요소의 특정 버전을 포함하고 해당 구성 요소를 디바이스에 배포할 때 구성 요소 종속성에 의존하지 않음을 의미합니다. 구성 요소 레시피에서 종속성을 정의하는 방법에 대한 자세한 내용은 [레시피 형식](component-recipe-reference.md#recipe-format) 섹션을 참조하세요.

다음 표를 검토하여 작업 및 배포 구성에 따른 Greengrass nucleus 구성 요소의 업데이트 동작을 이해합니다.


| Action | 배포 구성 | Nucleus 업데이트 동작 | 
| --- | --- | --- | 
| 배포를 수정하지 않고 기존 배포가 대상으로 하는 사물 그룹에 새 디바이스를 추가합니다. | 배포는 Greengrass nucleus를 직접 포함하지 않습니다.배포는 하나 이상의 AWS 제공 구성 요소를 직접 포함하거나 AWS 제공 구성 요소 또는 Greengrass nucleus에 따라 달라지는 사용자 지정 구성 요소를 포함합니다. | 새 디바이스에서는 모든 구성 요소 종속성 요구 사항을 충족하는 최신 패치 버전의 nucleus를 설치합니다.기존 디바이스에서는 nucleus의 설치된 버전을 업데이트하지 않습니다. | 
| 배포를 수정하지 않고 기존 배포가 대상으로 하는 사물 그룹에 새 디바이스를 추가합니다. |  배포는 Greengrass nucleus의 특정 버전을 직접 포함합니다.  | 새 디바이스에서 지정된 nucleus 버전을 설치합니다.기존 디바이스에서는 nucleus의 설치된 버전을 업데이트하지 않습니다. | 
| 새 배포를 생성하거나 기존 배포를 수정합니다. | 배포는 Greengrass nucleus를 직접 포함하지 않습니다.배포는 하나 이상의 AWS 제공 구성 요소를 직접 포함하거나 AWS 제공 구성 요소 또는 Greengrass nucleus에 따라 달라지는 사용자 지정 구성 요소를 포함합니다. | 모든 대상 디바이스에서 대상 사물 그룹에 추가하는 새 디바이스를 포함하여 모든 구성 요소 종속성 요구 사항을 충족하는 nucleus의 최신 패치 버전을 설치합니다. | 
| 새 배포를 생성하거나 기존 배포를 수정합니다. | 배포는 Greengrass nucleus의 특정 버전을 직접 포함합니다. | 모든 대상 디바이스에 대상 사물 그룹에 추가하는 새 디바이스를 포함하여 지정된 nucleus 버전을 설치합니다. | 

## OTA 업데이트를 수행합니다.
<a name="create-ota-update"></a>

OTA 업데이트를 수행하려면 [nucleus 구성 요소](greengrass-nucleus-component.md)와 설치할 버전이 포함된 [배포를 생성](create-deployments.md)합니다.

# AWS IoT Greengrass 코어 소프트웨어 제거
<a name="uninstall-greengrass-core-v2"></a>

AWS IoT Greengrass 코어 소프트웨어를 제거하여 Greengrass 코어 디바이스로 사용하지 않으려는 디바이스에서 이를 제거할 수 있습니다. 이러한 단계를 사용하여 실패한 설치를 정리할 수도 있습니다.

**AWS IoT Greengrass 코어 소프트웨어를 제거하려면**

1. 소프트웨어를 시스템 서비스로 실행하는 경우 해당 서비스를 중지, 비활성화, 제거해야 합니다. 운영 체제에 맞도록 다음 명령을 실행합니다.

------
#### [ Linux ]

   1.  서비스를 중단합니다.

      ```
      sudo systemctl stop greengrass.service
      ```

   1. 서비스를 비활성화합니다.

      ```
      sudo systemctl disable greengrass.service
      ```

   1. 서비스를 제거합니다.

      ```
      sudo rm /etc/systemd/system/greengrass.service
      ```

   1. 서비스가 삭제되었는지 확인합니다.

      ```
      sudo systemctl daemon-reload && sudo systemctl reset-failed
      ```

------
#### [ Windows (Command Prompt) ]

**참고**  
이러한 명령을 실행하려면 관리자로 명령 프롬프트를 실행해야 합니다.

   1.  서비스를 중단합니다.

      ```
      sc stop "greengrass"
      ```

   1. 서비스를 비활성화합니다.

      ```
      sc config "greengrass" start=disabled
      ```

   1. 서비스를 제거합니다.

      ```
      sc delete "greengrass"
      ```

   1. 디바이스를 다시 시작합니다.

------
#### [ Windows (PowerShell) ]

**참고**  
이러한 명령을 실행하려면 관리자 권한으로 PowerShell을 실행해야 합니다.

   1.  서비스를 중단합니다.

      ```
      Stop-Service -Name "greengrass"
      ```

   1. 서비스를 비활성화합니다.

      ```
      Set-Service -Name "greengrass" -Status stopped -StartupType disabled
      ```

   1. 서비스를 제거합니다.
      + PowerShell 6.0 이상인 경우:

        ```
        Remove-Service -Name "greengrass" -Confirm:$false -Verbose
        ```
      + PowerShell 6.0 이전 버전의 경우:

        ```
        Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\greengrass | Remove-Item -Force -Verbose
        ```

   1. 디바이스를 다시 시작합니다.

------

1. 디바이스에서 루트 폴더를 제거합니다. `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 루트 폴더의 경로로 바꿉니다.

------
#### [ Linux ]

   ```
   sudo rm -rf /greengrass/v2
   ```

------
#### [ Windows (Command Prompt) ]

   ```
   rmdir /s /q C:\greengrass\v2
   ```

------
#### [ Windows (PowerShell) ]

   ```
   cmd.exe /c "rmdir /s /q C:\greengrass\v2"
   ```

------

1. AWS IoT Greengrass 서비스에서 코어 디바이스를 삭제합니다. 이 단계에서는 AWS 클라우드에서 코어 디바이스의 상태 정보를 제거합니다. 동일한 이름의 코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 다시 설치하려는 경우 이 단계를 완료해야 합니다.
   + AWS IoT Greengrass 콘솔에서 코어 디바이스를 삭제하려면 다음을 수행합니다.

     1. <a name="navigate-greengrass-console"></a>[AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)로 이동합니다.

     1. **코어 디바이스**를 선택합니다.

     1. 삭제할 코어 디바이스를 선택합니다.

     1. **삭제**를 선택합니다.

     1. 확인 모달에서 **삭제**를 선택합니다.
   + AWS Command Line Interface로 코어 디바이스를 삭제하려면 [DeleteCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_DeleteCoreDevice.html) 작업을 사용합니다. 다음 명령을 실행하고 *MyGreengrassCore*를 코어 디바이스의 이름으로 바꿉니다.

     ```
     aws greengrassv2 delete-core-device --core-device-thing-name MyGreengrassCore
     ```