

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

# 자습서: AWS IoT Greengrass V2 시작하기
<a name="getting-started"></a>

이 시작하기 자습서를 완료하여 AWS IoT Greengrass V2의 기본 기능을 학습할 수 있습니다. 이 자습서에서는 다음을 수행합니다.

1. Raspberry Pi와 같은 Linux 디바이스 또는 Windows 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치하고 구성합니다. 이 디바이스는 Greengrass 코어 디바이스입니다.

1. Greengrass 코어 디바이스에서 Hello World 구성 요소를 개발합니다. 구성 요소는 Greengrass 코어 디바이스에서 실행되는 소프트웨어 모듈입니다.

1. AWS 클라우드의 AWS IoT Greengrass V2로 구성 요소를 업로드합니다.

1. AWS 클라우드에서 Greengrass 코어 디바이스로 해당 구성 요소를 배포합니다.

**참고**  
이 자습서에서는 개발 환경을 설정하고 AWS IoT Greengrass의 기능을 탐색하는 방법을 설명합니다. 프로덕션 디바이스를 설정 및 구성하는 방법에 대한 자세한 내용은 다음을 참조하세요.  
[AWS IoT Greengrass 코어 디바이스 설정](setting-up.md)
[AWS IoT Greengrass 코어 소프트웨어 설치](install-greengrass-core-v2.md)

이 자습서의 예상 소요 시간은 20\$130분입니다.

**Topics**
+ [사전 조건](getting-started-prerequisites.md)
+ [1단계: AWS 계정 설정](getting-started-set-up-aws-account.md)
+ [2단계: 환경 설정](getting-started-set-up-environment.md)
+ [3단계: AWS IoT Greengrass 코어 소프트웨어 설치](install-greengrass-v2.md)
+ [4단계: 디바이스에서 구성 요소 개발 및 테스트](create-first-component.md)
+ [5단계: AWS IoT Greengrass 서비스에서 구성 요소 생성](upload-first-component.md)
+ [6단계: 구성 요소 배포](deploy-first-component.md)
+ [다음 단계](getting-started-next-steps.md)

# 사전 조건
<a name="getting-started-prerequisites"></a>

이 시작하기 자습서를 완료하려면 다음이 필요합니다.
+ AWS 계정. 없으면 [1단계: AWS 계정 설정](getting-started-set-up-aws-account.md) 단원을 참조하세요.
+ <a name="requirement-supported-region"></a>AWS IoT Greengrass V2를 지원하는 [AWS 리전](https://en.wikipedia.org/wiki/Amazon_Web_Services#Availability_and_topology) 사용. 지원되는 리전 목록은 *AWS 일반 참조*에서 [AWS IoT Greengrass V2 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html)을 참조하세요.
+ 관리자 권한이 있는 AWS Identity and Access Management(IAM) 사용자.
+ [Raspberry Pi OS](https://www.raspberrypi.org/downloads/)(기존의 Raspbian)를 사용하는 Raspberry Pi 또는 Windows 10 디바이스와 같이 Greengrass 코어 디바이스로 설정할 디바이스. 이 디바이스에 대한 관리자 권한을 보유하거나 `sudo`를 통한 경로 등으로 관리자 권한을 획득할 수 있어야 합니다. 이 디바이스는 인터넷에 연결되어 있어야 합니다.

  AWS IoT Greengrass 코어 소프트웨어 설치 및 실행 요구 사항을 충족하는 다른 디바이스를 사용하도록 선택할 수도 있습니다.

  개발 컴퓨터가 이러한 요구 사항을 충족하는 경우 이 자습서에서 Greengrass 코어 디바이스로 설정할 수 있습니다.
+ 디바이스의 모든 사용자에 대해 [Python](https://www.python.org/downloads/) 3.5 이상 버전이 설치되고 `PATH` 환경 변수에 추가되어야 합니다. Windows에서는 모든 사용자에 대해 Windows용 Python 런처가 설치되어 있어야 합니다.
**중요**  <a name="windows-core-device-python-installation"></a>
Windows에서 Python은 기본적으로 모든 사용자를 대상으로 설치되지 않습니다. Python을 설치할 때는 AWS IoT Greengrass 코어 소프트웨어에서 Python 스크립트가 실행되도록 설치 구성을 사용자 지정해야 합니다. 예를 들어 그래픽 Python 설치 관리자를 사용하는 경우 다음을 수행합니다.  
**모든 사용자에 대해 런처 설치(권장)**를 선택합니다.
를 선택합니다..**Customize installation**
를 선택합니다..**Next**
을 선택합니다..**Install for all users**
을 선택합니다..**Add Python to environment variables**
**설치**를 선택합니다.
자세한 내용은 *Python 3 설명서*의 [Using Python on Windows](https://docs.python.org/3/using/windows.html)를 참조하세요.
+ 자격 증명을 사용하여 개발 컴퓨터와 디바이스에 AWS Command Line Interface(AWS CLI)가 설치되어 있어야 합니다. 동일한 AWS 리전을 사용하여 개발 컴퓨터와 디바이스에서 AWS CLI를 구성해야 합니다. AWS CLI와 함께 AWS IoT Greengrass V2를 사용하려면 다음 버전 또는 그 이상이 있어야 합니다.<a name="minimum-aws-cli-versions"></a>
  + 최소 AWS CLI V1 버전: v1.18.197
  + 최소 AWS CLI V2 버전: v2.1.11
**작은 정보**  <a name="tip-check-aws-cli-version"></a>
다음 명령을 실행하여 보유하고 있는 AWS CLI의 버전을 확인할 수 있습니다.  

  ```
  aws --version
  ```

  자세한 내용은 *AWS Command Line Interface 사용 설명서*에서 [AWS CLI 설치, 업데이트, 제거](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 및 [AWS CLI 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 섹션을 참조하세요.
**참고**  
32비트 운영 체제를 사용하는 Raspberry Pi와 같은 32비트 ARM 디바이스를 사용하는 경우 AWS CLI V1을 설치합니다. AWS CLI 32비트 ARM 디바이스에서는 V2를 사용할 수 없습니다. 자세한 내용은 [AWS CLI 버전 1 설치, 업데이트 및 제거](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) 단원을 참조하세요.

# 1단계: AWS 계정 설정
<a name="getting-started-set-up-aws-account"></a>

## 에 가입 AWS 계정
<a name="sign-up-for-aws"></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)을 수행하는 것입니다.

AWS 는 가입 프로세스가 완료된 후 확인 이메일을 보냅니다. 언제든지 [https://aws.amazon.com/](https://aws.amazon.com/)으로 이동하고 **내 계정**을 선택하여 현재 계정 활동을 보고 계정을 관리할 수 있습니다.

## 관리자 액세스 권한이 있는 사용자 생성
<a name="create-an-admin"></a>

에 가입한 후 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 AWS 계정보호 AWS IAM Identity Center, AWS 계정 루트 사용자활성화 및 생성합니다.

**보안 AWS 계정 루트 사용자**

1.  **루트 사용자를** 선택하고 AWS 계정 이메일 주소를 입력하여 계정 소유자[AWS Management Console](https://console.aws.amazon.com/)로에 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

   루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In User Guide*의 [루트 사용자로 로그인](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)을 참조하세요.

1. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

   지침은 *IAM 사용 설명서*의 [AWS 계정 루트 사용자(콘솔)에 대한 가상 MFA 디바이스 활성화를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html).

**관리자 액세스 권한이 있는 사용자 생성**

1. IAM Identity Center를 활성화합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [AWS IAM Identity Center설정](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)을 참조하세요.

1. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

   를 자격 증명 소스 IAM Identity Center 디렉터리 로 사용하는 방법에 대한 자습서는 사용 *AWS IAM Identity Center 설명서*[의 기본값으로 사용자 액세스 구성을 IAM Identity Center 디렉터리](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) 참조하세요.

**관리 액세스 권한이 있는 사용자로 로그인**
+ IAM IDentity Center 사용자로 로그인하려면 IAM Identity Center 사용자를 생성할 때 이메일 주소로 전송된 로그인 URL을 사용합니다.

  IAM Identity Center 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In 사용 설명서*[의 AWS 액세스 포털에 로그인](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)을 참조하세요.

**추가 사용자에게 액세스 권한 할당**

1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

   지침은AWS IAM Identity Center 사용 설명서의 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)를 참조하세요.**

1. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)를 참조하세요.

# 2단계: 환경 설정
<a name="getting-started-set-up-environment"></a>

**참고**  
이러한 단계는 nucleus lite에는 적용되지 않습니다.

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

## Linux 디바이스 설정(Raspberry Pi)
<a name="getting-started-set-up-raspberry-pi"></a>

이 단계에서는 Raspberry Pi OS와 함께 Raspberry Pi를 사용한다고 가정합니다. 다른 디바이스 또는 운영 체제를 사용하는 경우 해당 디바이스의 관련 설명서를 참조하세요.

**용 Raspberry Pi를 설정하려면 AWS IoT Greengrass V2**

1. Raspberry Pi에 원격으로 연결하려면 Pi에서 SSH를 활성화해야 합니다. 자세한 내용은 *Raspberry Pi 설명서*에서 [SSH(Secure shell)](https://www.raspberrypi.com/documentation/computers/remote-access.html#ssh)를 참조하세요.

1. SSH를 사용하여 연결할 Raspberry Pi의 IP 주소를 찾습니다. 이를 위해 Raspberry Pi에서 다음 명령을 실행할 수 있습니다.

   ```
   hostname -I
   ```

1. SSH를 사용하여 Raspberry Pi에 연결합니다.

   개발 컴퓨터에서 다음 명령을 실행합니다. *username*을 로그인할 사용자의 이름으로 바꾸고 *pi-ip-address*를 이전 단계에서 찾은 IP 주소로 바꿉니다.

   ```
   ssh username@pi-ip-address
   ```
**중요**  
개발 컴퓨터에서 이전 버전의 Windows를 사용하는 경우 `ssh` 명령이 없거나 `ssh`가 있어도 Raspberry Pi에 연결하지 못할 수 있습니다. Raspberry Pi에 연결하려면 무료 오픈 소스 SSH 클라이언트인 [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)를 설치하고 구성하면 됩니다. [PuTTY 설명서](https://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter2.html#gs)를 참조하여 Raspberry Pi에 연결합니다.

1.  AWS IoT Greengrass 코어 소프트웨어가 실행해야 하는 Java 런타임을 설치합니다. Raspberry Pi에서 다음 명령을 사용하여 Java 11을 설치합니다.

   ```
   sudo apt install default-jdk
   ```

   설치가 완료되면 다음 명령을 실행하여 Raspberry Pi에서 Java가 실행되는지 확인합니다.

   ```
   java -version
   ```

   디바이스에서 실행되는 Java 버전이 명령을 통해 인쇄됩니다. 출력은 다음 예제와 비슷할 것입니다.

   ```
   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)
   ```

**팁: Raspberry Pi에서 커널 파라미터 설정**  
디바이스가 Raspberry Pi인 경우 다음 단계를 완료하여 Linux 커널 파라미터를 보고 업데이트할 수 있습니다.  
`/boot/cmdline.txt` 파일을 엽니다. 이 파일은 Raspberry Pi가 부팅될 때 적용할 Linux 커널 파라미터를 지정합니다.  
예를 들어 Linux 기반 시스템에서 GNU nano를 사용하여 파일을 열도록 다음 명령을 실행할 수 있습니다.  

   ```
   sudo nano /boot/cmdline.txt
   ```
`/boot/cmdline.txt` 파일에 다음 커널 파라미터가 포함되어 있는지 확인합니다. `systemd.unified_cgroup_hierarchy=0` 파라미터는 cgroups v2 대신 cgroups v1을 사용하도록 지정합니다.  

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```
`/boot/cmdline.txt` 파일에 이러한 파라미터가 포함되어 있지 않거나 값이 다른 파라미터가 포함되어 있는 경우 이러한 파라미터와 값을 포함하도록 파일을 업데이트합니다.
`/boot/cmdline.txt` 파일을 업데이트한 경우 Raspberry Pi를 재부팅하여 변경 사항을 적용합니다.  

   ```
   sudo reboot
   ```

## Linux 디바이스 설정(기타)
<a name="getting-started-set-up-linux"></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="getting-started-set-up-windows"></a><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 계정에 저장됩니다.

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

**작은 정보**  
[AWS IoT Greengrass를 빠르게 설정하고 실험하려면 IoT Greengrass AI 에이전트 컨텍스트 팩을](https://github.com/aws-greengrass/greengrass-agent-context-pack) 사용해 보는 것이 좋습니다. AWS IoT 에이전트 컨텍스트 팩을 사용하면 AI 에이전트가 Greengrass Nucleus 및 Nucleus Lite를 설정하고, 구성 요소를 배포하고, 일반적인 문제를 해결할 수 있습니다.

이 섹션의 단계에 따라 Raspberry Pi를 로컬 개발에 사용할 수 있는 AWS IoT Greengrass 코어 디바이스로 설정합니다. 이 단원에서는 다음을 수행하는 설치 관리자를 다운로드하고 실행하여 디바이스에 대한 AWS IoT Greengrass 코어 소프트웨어를 구성합니다.
+ Greengrass nucleus 구성 요소를 설치합니다. nucleus는 필수 구성 요소이며 디바이스에서 AWS IoT Greengrass 코어 소프트웨어를 실행하기 위한 최소 요구 사항입니다. 자세한 내용은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)를 참조하세요.
+ 디바이스를 AWS IoT 사물로 등록하고 디바이스를 연결할 수 있는 디지털 인증서를 다운로드합니다 AWS. 자세한 내용은 [에 대한 디바이스 인증 및 권한 부여 AWS IoT Greengrass](device-auth.md) 단원을 참조하십시오.
+  AWS IoT 사물 그룹, 즉 사물 그룹 또는 플릿에 디바이스의 AWS IoT 사물을 추가합니다. 사물 그룹을 사용하여 Greengrass 코어 디바이스의 플릿을 관리할 수 있습니다. 소프트웨어 구성 요소를 디바이스에 배포할 때 개별 디바이스 또는 디바이스 그룹에 배포할 수 있습니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*에서 [AWS IoT로 디바이스 관리](https://docs.aws.amazon.com/iot/latest/developerguide/iot-thing-management.html)를 참조하세요.
+ Greengrass 코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 하는 IAM 역할을 생성합니다. 기본적으로이 역할을 사용하면 디바이스가 Amazon CloudWatch Logs와 상호 작용 AWS IoT 하고 로그를 전송할 수 있습니다. 자세한 내용은 [코어 디바이스가 AWS 서비스와 상호 작용할 수 있도록 권한 부여](device-service-role.md) 단원을 참조하십시오.
+ 코어 디바이스에서 개발하는 사용자 지정 구성 요소를 테스트하는 데 사용할 수 있는 AWS IoT Greengrass 명령줄 인터페이스(`greengrass-cli`)를 설치합니다. 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 단원을 참조하십시오.

# AWS IoT Greengrass 코어 소프트웨어 설치(콘솔)
<a name="install-greengrass-v2-console"></a>

1. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)에 로그인합니다.

1. **Greengrass 시작하기**에서 **코어 디바이스 설정**을 선택합니다.

1. **1단계: Greengrass 코어 디바이스 등록**에서 **코어 디바이스 이름**에 Greengrass 코어 디바이스의 AWS IoT 사물 이름을 입력합니다. 사물이 존재하지 않는 경우 설치 관리자가 이를 생성합니다.

1. **2단계: 사물 그룹에 추가하여 지속적 배포 적용**에서 **사물 그룹**에 대해 코어 디바이스를 추가할 AWS IoT 사물 그룹을 선택합니다.
   + **새 그룹 이름 입력**을 선택하는 다음 **사물 그룹 이름**에 생성할 새 그룹의 이름을 입력합니다. 설치 프로그램에서 새 그룹을 생성합니다.
   + **기존 그룹 선택**을 선택하는 경우 **사물 그룹 이름**에서 사용하려는 기존 그룹을 선택합니다.
   + **그룹 없음**을 선택하면 설치 프로그램에서 코어 디바이스를 사물 그룹에 추가하지 않습니다.

1. **3단계: Greengrass 코어 소프트웨어 설치**에서 다음 단계를 완료합니다.

------
#### [ Nucleus classic ]

   1. 코어 디바이스의 소프트웨어 런타임으로 **Nucleus classic**을 선택합니다.

   1. 코어 디바이스의 운영 체제인 **Linux** 또는 **Windows**를 선택합니다.

   1. <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)를 참조하세요.

   1. **설치 프로그램 실행**에서 다음 단계를 완료합니다.

      1. **설치 관리자 다운로드**에서 **복사**를 선택하고 코어 디바이스에서 복사된 명령을 실행합니다. 이 명령은 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 다운로드하고 디바이스에 압축을 풉니다.

      1. **설치 관리자 실행**에서 **복사**를 선택하고 코어 디바이스에서 복사된 명령을 실행합니다. 이 명령은 이전에 지정한 AWS IoT 사물 그룹 및 사물 그룹 이름을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치 관리자를 실행하고 코어 디바이스에 대한 AWS 리소스를 설정합니다.

         이 명령은 다음 작업도 수행합니다.
         + <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 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.
         + <a name="install-argument-dev-tools"></a>코어 디바이스에서 사용자 지정 Greengrass 구성 요소를 개발할 수 있는 명령줄 도구인 [AWS IoT Greengrass CLI 구성 요소](gg-cli.md)를 배포합니다.
         + <a name="install-argument-component-default-user"></a>`ggc_user` 시스템 사용자를 사용하도록 지정하여 코어 디바이스에서 소프트웨어 구성 요소를 실행합니다. Linux 디바이스에서 이 명령은 `ggc_group` 시스템 그룹을 사용하도록 지정하고 설치 관리자가 시스템 사용자와 그룹을 생성합니다.

         이 명령을 실행하면 설치 관리자가 성공했음을 나타내는 다음 메시지가 표시됩니다.

         ```
         Successfully configured Nucleus with provisioned resource details!
         Configured Nucleus to deploy aws.greengrass.Cli component
         Successfully set up Nucleus as a system service
         ```
**참고**  <a name="installer-linux-no-systemd-message"></a>
Linux 디바이스가 있지만 이 디바이스에 [systemd](https://en.wikipedia.org/wiki/Systemd)가 없는 경우 설치 관리자는 소프트웨어를 시스템 서비스로 설정하지 않으며, nucleus를 시스템 서비스로 설정하기 위한 성공 메시지가 표시되지 않습니다.

------
#### [ Nucleus lite ]

   1. 코어 디바이스의 소프트웨어 런타임으로 **Nucleus lite**를 선택합니다.

   1. 디바이스를 Greengrass 코어 디바이스로 프로비저닝하기 위한 디바이스 설정 방법을 선택합니다.

   **옵션 1: 패키지 다운로드로 디바이스 설정(약 1MB)**

   1. AWS IoT 사물과 Greengrass용 역할을 생성합니다.

   1. 디바이스가 AWS IoT에 연결하는 데 필요한 AWS IoT 리소스가 포함된 ZIP 파일을 다운로드합니다.
      + AWS IoT의 인증 기관을 사용해 생성된 인증서와 프라이빗 키.
      + 디바이스용 Greengrass 설치를 시작하는 스키마 파일.

   1. Raspberry Pi에 최신 Greengrass Nucleus lite 런타임을 설치하는 패키지를 다운로드합니다.

   1. 디바이스를 AWS IoT Greengrass Core 디바이스가 되도록 프로비저닝하고 AWS IoT에 연결합니다.

      1. a. USB 썸 드라이브, SCP/FTP, SD 카드를 사용하여 Greengrass 패키지와 연결 키트를 디바이스로 전송합니다.

      1. b. 디바이스의 /GreengrassInstaller 디렉터리에서 greengrass-package.zip 파일을 압축 해제합니다.

      1. c. 디바이스의 /directory에서 연결 키트 압축 파일을 압축 해제합니다.

      1. d. 디바이스에서 제공된 명령을 실행하여 AWS IoT Greengrass를 설치합니다.

   1. 그런 다음 **코어 디바이스 보기**를 선택합니다.

   **옵션 2: 사전 구성된 전체 디스크 샘플 이미지 다운로드로 디바이스 설정(약 100MB)**

   1. AWS IoT 사물과 Greengrass용 역할을 생성합니다.

   1. 디바이스가 AWS IoT에 연결하는 데 필요한 AWS IoT 리소스가 포함된 ZIP 파일을 다운로드합니다.
      + AWS IoT의 인증 기관을 사용해 생성된 인증서와 프라이빗 키.
      + 디바이스용 Greengrass 설치를 시작하는 스키마 파일.

   1. Greengrass와 운영 체제가 포함된 사전 구성된 전체 디스크 샘플 이미지를 다운로드합니다.

      1. 연결 키트를 전송하고 이미지를 디바이스에 플래시하려면, 이미지와 함께 다운로드된 readme 파일의 지침을 따릅니다.

      1. Greengrass 설치를 시작하려면 디바이스를 켜고 플래시된 이미지로 부팅합니다.

   1. 그런 다음 **코어 디바이스 보기**를 선택합니다.

   **옵션 3: 자체 사용자 지정 빌드로 디바이스 설정**

   1. AWS IoT 사물과 Greengrass용 역할을 생성합니다.

   1. 디바이스가 AWS IoT에 연결하는 데 필요한 AWS IoT 리소스가 포함된 ZIP 파일을 다운로드합니다.
      + AWS IoT의 인증 기관을 사용해 생성된 인증서와 프라이빗 키.
      + 디바이스용 Greengrass 설치를 시작하는 스키마 파일.

   1. Yocto를 사용하여 소스 코드로 자체 이미지를 사용자 지정 및 빌드한 후, 연결 키트를 사용해 nucleus lite를 설치합니다. 자세한 내용은 GitHub 지침을 참조합니다.

      1. 그런 다음 **코어 디바이스 보기**를 선택합니다.

------

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

**참고**  
이러한 단계는 nucleus lite에는 적용되지 않습니다.

**AWS IoT Greengrass 코어 소프트웨어를 설치 및 구성**

1. Greengrass 코어 디바이스에서 다음 명령을 실행하여 홈 디렉터리로 전환합니다.

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

   ```
   cd ~
   ```

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

   ```
   cd %USERPROFILE%
   ```

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

   ```
   cd ~
   ```

------

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="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 코어 소프트웨어 설치 관리자를 시작합니다. 이 명령은 다음 작업을 수행합니다.
   + <a name="install-argument-aws-resources"></a>코어 디바이스가 작동하는 데 필요한 AWS 리소스를 생성합니다.
   + <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 코어 소프트웨어를 시스템 서비스로 설정해야 합니다.
   + <a name="install-argument-dev-tools"></a>코어 디바이스에서 사용자 지정 Greengrass 구성 요소를 개발할 수 있는 명령줄 도구인 [AWS IoT Greengrass CLI 구성 요소](gg-cli.md)를 배포합니다.
   + <a name="install-argument-component-default-user"></a>`ggc_user` 시스템 사용자를 사용하도록 지정하여 코어 디바이스에서 소프트웨어 구성 요소를 실행합니다. Linux 디바이스에서 이 명령은 `ggc_group` 시스템 그룹을 사용하도록 지정하고 설치 관리자가 시스템 사용자와 그룹을 생성합니다.

   다음과 같이 명령의 인수 값을 바꿉니다.<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 Greengrass와 통신할 수 있도록 허용하는 AWS IoT 정책의 이름입니다. 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 \
     --deploy-dev-tools 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 ^
     --deploy-dev-tools 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 `
     --deploy-dev-tools true
   ```

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

   이 명령을 실행하면 설치 관리자가 성공했음을 나타내는 다음 메시지가 표시됩니다.

   ```
   Successfully configured Nucleus with provisioned resource details!
   Configured Nucleus to deploy aws.greengrass.Cli component
   Successfully set up Nucleus as a system service
   ```
**참고**  <a name="installer-linux-no-systemd-message"></a>
Linux 디바이스가 있지만 이 디바이스에 [systemd](https://en.wikipedia.org/wiki/Systemd)가 없는 경우 설치 관리자는 소프트웨어를 시스템 서비스로 설정하지 않으며, nucleus를 시스템 서비스로 설정하기 위한 성공 메시지가 표시되지 않습니다.

# (선택 사항) Greengrass 소프트웨어 실행(Linux)
<a name="run-the-software"></a>

**참고**  
이러한 단계는 nucleus lite에는 적용되지 않습니다.

소프트웨어를 시스템 서비스로 설치한 경우 설치 관리자가 소프트웨어를 실행합니다. 그렇지 않은 경우에는 사용자가 소프트웨어를 실행해야 합니다. 설치 관리자가 소프트웨어를 시스템 서비스로 설정했는지 확인하려면 설치 관리자 출력에서 다음 줄을 찾으세요.

```
Successfully set up Nucleus as a system service
```

이 메시지가 표시되지 않으면 다음을 수행하여 소프트웨어를 실행합니다.

1. 다음 명령을 실행하여 소프트웨어를 실행합니다.

   ```
   sudo /greengrass/v2/alts/current/distro/bin/loader
   ```

   소프트웨어가 성공적으로 시작되면 다음 메시지를 인쇄합니다.

   ```
   Launched Nucleus successfully.
   ```

1.  AWS IoT Greengrass 코어 소프트웨어를 계속 실행하려면 현재 명령 셸을 열어 두어야 합니다. SSH를 사용하여 코어 디바이스에 연결하는 경우 개발 컴퓨터에서 다음 명령을 실행하여 코어 디바이스에서 추가 명령을 실행하는 데 사용할 수 있는 두 번째 SSH 세션을 엽니다. *username*을 로그인할 사용자의 이름으로 바꾸고 *pi-ip-address*를 디바이스의 IP 주소로 바꿉니다.

   ```
   ssh username@pi-ip-address
   ```

Greengrass 시스템 서비스와 상호 작용하는 방법에 대한 자세한 내용은 [Greengrass nucleus를 시스템 서비스로 구성](configure-greengrass-core-v2.md#configure-system-service) 섹션을 참조하세요.

# 디바이스에서 Greengrass CLI 설치 확인
<a name="verify-local-development-tools"></a>

**참고**  
이러한 단계는 nucleus lite에는 적용되지 않습니다.

Greengrass CLI를 배포하는 데 최대 1분이 걸릴 수 있습니다. 다음 명령을 실행하여 배포 상태를 확인합니다. *MyGreengrassCore*를 코어 디바이스의 이름으로 바꿉니다.

```
aws greengrassv2 list-effective-deployments --core-device-thing-name MyGreengrassCore
```

`coreDeviceExecutionStatus`는 코어 디바이스에 대한 배포 상태를 나타냅니다. 상태가 `SUCCEEDED`인 경우 다음 명령을 실행하여 Greengrass CLI가 설치되고 실행되는지 확인합니다. `/greengrass/v2`를 루트 폴더의 경로로 바꿉니다.

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

```
/greengrass/v2/bin/greengrass-cli help
```

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

```
C:\greengrass\v2\bin\greengrass-cli help
```

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

```
C:\greengrass\v2\bin\greengrass-cli help
```

------

이 명령은 Greengrass CLI에 대한 도움말 정보를 출력합니다. `greengrass-cli`를 찾을 수 없는 경우 배포에서 Greengrass CLI를 설치하지 못했을 수 있습니다. 자세한 내용은 [문제 해결 AWS IoT Greengrass V2](troubleshooting.md) 단원을 참조하십시오.

다음 명령을 실행하여 AWS IoT Greengrass CLI를 디바이스에 수동으로 배포할 수도 있습니다.
+ *region*을 사용하는 AWS 리전 로 바꿉니다. 디바이스 AWS CLI 에서를 구성하는 데 사용한 AWS 리전 것과 동일한를 사용해야 합니다.
+ *account-id*를 AWS 계정 ID로 바꿉니다.
+ *MyGreengrassCore*를 코어 디바이스의 이름으로 바꿉니다.

------
#### [ Linux, macOS, or Unix ]

```
aws greengrassv2 create-deployment \
  --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" \
  --components '{
    "aws.greengrass.Cli": {
      "componentVersion": "2.16.1"
    }
  }'
```

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

```
aws greengrassv2 create-deployment ^
  --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ^
  --components "{\"aws.greengrass.Cli\":{\"componentVersion\":\"2.16.1\"}}"
```

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

```
aws greengrassv2 create-deployment `
  --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" `
  --components '{\"aws.greengrass.Cli\":{\"componentVersion\":\"2.16.1\"}}'
```

------

**작은 정보**  
`PATH` 환경 변수에 `/greengrass/v2/bin`(Linux) 또는 `C:\greengrass\v2\bin`(Windows)를 추가하여 절대 경로 없이 `greengrass-cli`를 실행할 수 있습니다.

 AWS IoT Greengrass 코어 소프트웨어 및 로컬 개발 도구는 디바이스에서 실행됩니다. 다음으로 디바이스에서 Hello World AWS IoT Greengrass 구성 요소를 개발할 수 있습니다.

# 4단계: 디바이스에서 구성 요소 개발 및 테스트
<a name="create-first-component"></a>

구성 요소는 AWS IoT Greengrass 코어 디바이스에서 실행되는 소프트웨어 모듈입니다. 구성 요소를 사용하면 복잡한 애플리케이션을 여기저기 Greengrass 코어 디바이스에서 재사용할 수 있는 불연속 빌딩 블록으로 생성하고 관리할 수 있습니다. 모든 구성 요소는 *레시피*와 *아티팩트 *로 구성되어 있습니다.
+ <a name="component-recipe-definition"></a>**레시피**

  모든 구성 요소에는 메타데이터가 정의되는 레시피 파일이 있습니다. 레시피에서는 구성 요소의 구성 파라미터, 구성 요소 종속성, 수명 주기 및 플랫폼 호환성도 지정됩니다. 구성 요소 수명 주기에서는 구성 요소 설치, 실행 및 종료 명령이 정의됩니다. 자세한 내용은 [AWS IoT Greengrass 구성 요소 레시피 참조](component-recipe-reference.md) 단원을 참조하십시오.

  레시피를 [JSON](https://en.wikipedia.org/wiki/JSON) 또는 [YAML](https://en.wikipedia.org/wiki/YAML) 형식으로 정의할 수 있습니다.
+ <a name="component-artifacts-definition"></a>**아티팩트**

  구성 요소의 구성 요소 바이너리인 아티팩트는 수량 제한이 없습니다. 아티팩트에는 구성 요소에서 사용되는 스크립트, 컴파일된 코드, 정적 리소스 및 기타 파일이 포함될 수 있습니다. 구성 요소에서는 구성 요소 종속성의 아티팩트도 사용될 수도 있습니다.

를 사용하면 Greengrass CLI를 사용하여 AWS 클라우드와의 상호 작용 없이 Greengrass 코어 디바이스에서 로컬로 구성 요소를 개발하고 테스트 AWS IoT Greengrass할 수 있습니다. 로컬 구성 요소를 완료하면 구성 요소 레시피와 아티팩트를 사용하여 AWS 클라우드의 AWS IoT Greengrass 서비스에서 해당 구성 요소를 생성한 다음 모든 Greengrass 코어 디바이스에 배포할 수 있습니다. 구성 요소에 대한 자세한 내용은 [AWS IoT Greengrass 구성 요소 개발](develop-greengrass-components.md)를 참조하세요.

이 섹션에서는 코어 디바이스에서 로컬로 기본 Hello World 구성 요소를 생성하고 실행하는 방법을 알아봅니다.

**디바이스에서 Hello World 구성 요소를 개발하는 방법**

1. <a name="create-component-recipes-artifacts-folder-step"></a>레시피 및 아티팩트의 하위 폴더로 구성 요소의 폴더를 생성합니다. Greengrass 코어 디바이스에서 다음 명령을 실행하여 이러한 폴더를 생성하고 구성 요소 폴더로 변경합니다. 로컬 개발에 사용할 폴더 경로로 *\$1/greengrassv2* 또는 *%USERPROFILE%\$1greengrassv2*를 바꿉니다.

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

   ```
   mkdir -p ~/greengrassv2/{recipes,artifacts}
   cd ~/greengrassv2
   ```

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

   ```
   mkdir %USERPROFILE%\greengrassv2\\recipes, %USERPROFILE%\greengrassv2\\artifacts
   cd %USERPROFILE%\greengrassv2
   ```

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

   ```
   mkdir ~/greengrassv2/recipes, ~/greengrassv2/artifacts
   cd ~/greengrassv2
   ```

------

1. <a name="create-component-recipe-file-step"></a>텍스트 편집기를 사용하여 구성 요소의 메타데이터, 파라미터, 종속성, 수명 주기 및 플랫폼 기능이 정의되는 레시피 파일을 생성합니다. 레시피에 반영되는 구성 요소 버전을 식별할 수 있도록 레시피 파일 이름에 구성 요소 버전을 포함합니다. 레시피에 YAML 또는 JSON 형식을 선택할 수 있습니다.

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

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

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

------
**참고**  
<a name="semver-para"></a>AWS IoT Greengrass 는 구성 요소에 의미 체계 버전을 사용합니다. *시맨틱 버전은 메이저*.*마이너*.*패치* 번호 시스템을 따릅니다. 예를 들어 `1.0.0` 버전은 구성 요소의 첫 번째 주요 릴리스를 나타냅니다. 자세한 내용은 [의미 체계 버전 사양](https://semver.org/)을 참조하세요.

1. 파일에 다음 레시피를 붙여 넣습니다.

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

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "run": "python3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "run": "py -3 -u {artifacts:path}/hello_world.py {configuration:/Message}"
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
     - Platform:
         os: windows
       Lifecycle:
         run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
   ```

------

   이 레시피의 `ComponentConfiguration` 섹션에서는 기본값이 `world`인 파라미터(`Message`)가 정의합니다. `Manifests` 섹션에서는 플랫폼에 대한 수명 주기 지침과 아티팩트 세트인 *매니페스트*가 정의합니다. 예를 들어 여러 매니페스트를 정의하여 다양한 플랫폼에 상이한 설치 지침을 지정할 수 있습니다. 매니페스트의 `Lifecycle` 섹션에서는 `Message` 파라미터 값을 인수로 사용하여 Hello World 스크립트가 실행되도록 Greengrass 코어 디바이스에 지시합니다.

1. 다음 명령을 실행하여 구성 요소 아티팩트의 폴더를 생성합니다.

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

   ```
   mkdir -p artifacts/com.example.HelloWorld/1.0.0
   ```

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

   ```
   mkdir artifacts\com.example.HelloWorld\1.0.0
   ```

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

   ```
   mkdir artifacts\com.example.HelloWorld\1.0.0
   ```

------
**중요**  <a name="local-artifact-folder-name-requirements"></a>
아티팩트 폴더 경로에는 다음 형식을 사용해야 합니다. 레시피에서 지정하는 구성 요소 이름과 버전을 포함합니다.  

   ```
   artifacts/componentName/componentVersion/
   ```

1. 텍스트 편집기를 사용하여 Hello World 구성 요소에 대한 Python 스크립트 아티팩트 파일을 생성합니다.

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

   ```
   nano artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   다음 Python 스트립트를 복사하여 파일에 붙여 넣습니다.

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. 로컬 AWS IoT Greengrass CLI를 사용하여 Greengrass 코어 디바이스의 구성 요소를 관리합니다.

   다음 명령을 실행하여 AWS IoT Greengrass 코어에 구성 요소를 배포합니다. `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 AWS IoT Greengrass V2 루트 폴더로 바꾸고*, \$1/greengrassv2* 또는 *%USERPROFILE%\$1greengrassv2*를 구성 요소 개발 폴더로 바꿉니다.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------

   이 명령에서는 `recipes`의 레시피가 사용되고 `artifacts`의 Python 스크립트가 사용되는 구성 요소가 추가됩니다. `--merge` 옵션에서는 지정하는 구성 요소와 버전이 추가 또는 업데이트됩니다.

1.  AWS IoT Greengrass 코어 소프트웨어는 구성 요소 프로세스의 stdout을 `logs` 폴더의 로그 파일에 저장합니다. 다음 명령을 실행하여 Hello World 구성 요소가 실행되고 메시지가 인쇄되는지 확인합니다.

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\logs\com.example.HelloWorld.log
   ```

   <a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

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

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   다음 예제와 비슷한 메시지가 표시되어야 합니다.

   ```
   Hello, world!
   ```
**참고**  
파일이 없으면 로컬 배포가 아직 완료되지 않았을 수 있습니다. 15초 이내에 파일이 존재하지 않으면 배포에 실패했을 수 있습니다. 예를 들어 레시피가 유효하지 않은 경우에 실패가 발생할 수 있습니다. 다음 명령을 실행하여 AWS IoT Greengrass 코어 로그 파일을 확인합니다. 이 파일에는 Greengrass 코어 디바이스의 배포 서비스의 로그가 포함되어 있습니다.  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\logs\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

   ```
   gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
   ```

1. 로컬 구성 요소를 수정하여 코드를 반복하고 테스트합니다. 텍스트 편집기`hello_world.py`에서를 열고 4행에 다음 코드를 추가하여 AWS IoT Greengrass 코어가 로깅하는 메시지를 편집합니다.

   ```
   message += " Greetings from your first Greengrass component."
   ```

   이제 `hello_world.py` 스크립트에 다음 내용이 있어야 합니다.

   ```
   import sys
   
   message = "Hello, %s!" % sys.argv[1]
   message += " Greetings from your first Greengrass component."
   
   # Print the message to stdout, which Greengrass saves in a log file.
   print(message)
   ```

1. 다음 명령을 실행하여 변경 사항으로 구성 요소를 업데이트합니다.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create \
     --recipeDir ~/greengrassv2/recipes \
     --artifactDir ~/greengrassv2/artifacts \
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create ^
     --recipeDir %USERPROFILE%\greengrassv2\recipes ^
     --artifactDir %USERPROFILE%\greengrassv2\artifacts ^
     --merge "com.example.HelloWorld=1.0.0"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create `
     --recipeDir ~/greengrassv2/recipes `
     --artifactDir ~/greengrassv2/artifacts `
     --merge "com.example.HelloWorld=1.0.0"
   ```

------

   이 명령에서는 최신 Hello World 아티팩트로 `com.example.HelloWorld` 구성 요소가 업데이트됩니다.

1. 다음 명령을 실행하여 구성 요소를 다시 시작합니다. 구성 요소를 다시 시작하면 최신 변경 사항이 코어 디바이스에서 사용됩니다.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli component restart \
     --names "com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component restart ^
     --names "com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component restart `
     --names "com.example.HelloWorld"
   ```

------

1. 로그를 다시 확인하여 Hello World 구성 요소에서 새 메시지가 인쇄되는지 확인합니다.

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\logs\com.example.HelloWorld.log
   ```

   <a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

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

   ```
   gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   다음 예제와 비슷한 메시지가 표시되어야 합니다.

   ```
   Hello, world! Greetings from your first Greengrass component.
   ```

1. 구성 요소의 구성 파라미터를 업데이트하여 상이한 구성을 테스트할 수 있습니다. 구성 요소를 배포할 때 코어 디바이스에서 구성 요소의 구성이 수정되는 방법이 정의되는 *구성 업데이트 *를 지정할 수 있습니다. 기본값으로 재설정할 구성 값과 코어 디바이스에 병합할 새 구성 값을 지정할 수 있습니다. 자세한 내용은 [구성 요소 구성 업데이트](update-component-configurations.md) 단원을 참조하십시오.

   해결 방법:

   1. 텍스트 편집기를 사용하여 구성 업데이트가 포함되는 `hello-world-config-update.json`이라는 파일을 생성합니다.

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

      ```
      nano hello-world-config-update.json
      ```

   1. 다음 JSON 객체를 복사하여 파일에 붙여 넣습니다. 이 JSON 객체에서는 값 `friend`가 `Message` 파라미터에 병합되어 값이 업데이트되는 구성 업데이트가 정의됩니다. 이 구성 업데이트에서는 재설정할 값이 지정되지 않습니다. 병합 업데이트를 통해 기존 값이 대체되므로 `Message` 파라미터를 재설정할 필요가 없습니다.

      ```
      {
        "com.example.HelloWorld": {
          "MERGE": {
            "Message": "friend"
          }
        }
      }
      ```

   1. 다음 명령을 실행하여 구성 업데이트를 Hello World 구성 요소에 배포합니다.

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

      ```
      sudo /greengrass/v2/bin/greengrass-cli deployment create \
        --merge "com.example.HelloWorld=1.0.0" \
        --update-config hello-world-config-update.json
      ```

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

      ```
      C:\greengrass\v2\bin\greengrass-cli deployment create ^
        --merge "com.example.HelloWorld=1.0.0" ^
        --update-config hello-world-config-update.json
      ```

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

      ```
      C:\greengrass\v2\bin\greengrass-cli deployment create `
        --merge "com.example.HelloWorld=1.0.0" `
        --update-config hello-world-config-update.json
      ```

------

   1. 로그를 다시 확인하여 Hello World 구성 요소에서 새 메시지가 출력되는지 확인합니다.

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

      ```
      sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
      ```

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

      ```
      type C:\greengrass\v2\logs\com.example.HelloWorld.log
      ```

      <a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

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

      ```
      gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
      ```

------

      다음 예제와 비슷한 메시지가 표시되어야 합니다.

      ```
      Hello, friend! Greetings from your first Greengrass component.
      ```

1. 구성 요소는 테스트를 마치면 코어 디바이스에서 제거합니다. 다음 명령을 실행합니다.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli deployment create --remove="com.example.HelloWorld"
   ```

------
**중요**  
구성 요소를 AWS IoT Greengrass에 업로드한 후 코어 디바이스에 다시 배포하려면 이 단계가 필요합니다. 그렇지 않으면 로컬 배포에서 다른 구성 요소 버전이 지정되므로 버전 호환성 오류로 배포가 실패합니다.

   다음 명령을 실행하고 디바이스의 `com.example.HelloWorld` 구성 요소 목록에 구성 요소가 나타나지 않는지 확인합니다.

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

   ```
   sudo /greengrass/v2/bin/greengrass-cli component list
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component list
   ```

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

   ```
   C:\greengrass\v2\bin\greengrass-cli component list
   ```

------

Hello World 구성 요소가 완료되었으며 이제 AWS IoT Greengrass 클라우드 서비스에 업로드할 수 있습니다. 그런 다음에 구성 요소를 다른 코어 디바이스에 배포할 수 있습니다.

# 5단계: AWS IoT Greengrass 서비스에서 구성 요소 생성
<a name="upload-first-component"></a>

코어 디바이스에서 구성 요소 개발을 완료하면 이를 AWS 클라우드의 AWS IoT Greengrass 서비스에 업로드할 수 있습니다. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)에서 구성 요소를 직접 생성할 수도 있습니다. AWS IoT Greengrass 는 개별 디바이스 또는 디바이스 플릿에 배포할 수 있도록 구성 요소를 호스팅하는 구성 요소 관리 서비스를 제공합니다. AWS IoT Greengrass 서비스에 구성 요소를 업로드하려면 다음 단계를 완료합니다.
+ S3 버킷에 구성 요소 아티팩트를 업로드합니다.
+ 각 아티팩트의 Amazon Simple Storage Service(Amazon S3) URI를 구성 요소 레시피에 추가합니다.
+ 구성 요소 레시피 AWS IoT Greengrass 에서에 구성 요소를 생성합니다.

이 섹션에서는 Greengrass 코어 디바이스에서 다음 단계를 완료하여 Hello World 구성 요소를 AWS IoT Greengrass 서비스에 업로드합니다.

## 에서 구성 요소 생성 AWS IoT Greengrass (콘솔)
<a name="upload-first-component-console"></a>

1.  AWS 계정의 S3 버킷을 사용하여 AWS IoT Greengrass 구성 요소 아티팩트를 호스팅합니다. 구성 요소를 코어 디바이스에 배포하면 디바이스가 버킷에서 구성 요소의 아티팩트를 다운로드합니다.

   기존 S3 버킷을 사용하거나 새 버킷을 생성할 수 있습니다.

   1. [Amazon S3 콘솔](https://console.aws.amazon.com/s3)의 **버킷**에서 **버킷 생성**을 선택합니다.

   1. **버킷 이름**에 고유한 버킷 이름을 입력합니다. 예를 들어 **greengrass-component-artifacts-*region*-*123456789012***를 사용할 수 있습니다. *123456789012*을 AWS 계정 ID로 바꾸고 *리전*을이 자습서에서 AWS 리전 사용하는 로 바꿉니다.

   1. **AWS 리전**에서이 자습서에 사용할 AWS 리전을 선택합니다.

   1. **버킷 생성**을 선택합니다.

   1. **버킷**에서 생성한 버킷을 선택하고 `hello_world.py` 스크립트를 버킷의 `artifacts/com.example.HelloWorld/1.0.0` 폴더에 업로드합니다. S3 버킷에 객체를 업로드하는 데 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하세요.

   1. S3 버킷에 있는 `hello_world.py` 객체의 S3 URI를 복사합니다. 이 URI는 다음 예제와 유사할 것입니다. amzn-s3-demo-bucket을 S3 버킷의 이름으로 바꿉니다.

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
      ```

1. <a name="core-device-allow-s3-bucket-access-console"></a><a name="core-device-allow-s3-bucket-access-console-intro-1"></a>코어 디바이스가 S3 버킷의 구성 요소 아티팩트에 액세스하도록 허용합니다.

   <a name="core-device-allow-s3-bucket-access-console-intro-2"></a>각 코어 디바이스에는 AWS 클라우드와 상호 작용 AWS IoT 하고 로그를 전송할 수 있는 [코어 디바이스 IAM 역할](device-service-role.md)이 있습니다. 이 디바이스 역할은 기본적으로 S3 버킷에 대한 액세스를 허용하지 않으므로 코어 디바이스가 S3 버킷에서 구성 요소 아티팩트를 검색할 수 있도록 허용하는 정책을 생성하고 연결해야 합니다.

   <a name="core-device-allow-s3-bucket-access-console-intro-3"></a>디바이스의 역할이 이미 S3 버킷에 대한 액세스를 허용하는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 다음과 같이 액세스를 허용하는 IAM 정책을 생성하여 역할에 연결합니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-1"></a>[IAM 콘솔](https://console.aws.amazon.com/iam) 탐색 메뉴에서 **정책**을 선택한 다음 **정책 생성**을 선택합니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-2"></a>**JSON** 탭에서 자리 표시자 콘텐츠를 다음 정책으로 바꿉니다. amzn-s3-demo-bucket을 코어 디바이스가 다운로드할 구성 요소 아티팩트를 포함하는 S3 버킷의 이름으로 바꿉니다.

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

   1. <a name="core-device-allow-s3-bucket-access-console-step-3"></a>**다음**을 선택합니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-4"></a>**정책 세부 정보** 섹션에서 **이름**에 **MyGreengrassV2ComponentArtifactPolicy**를 입력합니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-5"></a>**정책 생성**을 선택합니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-6"></a>[IAM 콘솔](https://console.aws.amazon.com/iam) 탐색 메뉴에서 **역할**을 선택한 다음 코어 디바이스에 대한 역할 이름을 선택합니다. AWS IoT Greengrass 코어 소프트웨어를 설치할 때이 역할 이름을 지정했습니다. 이름을 지정하지 않은 경우 기본값은 `GreengrassV2TokenExchangeRole`입니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-7"></a>**권한**에서 **권한 추가**, **정책 연결**을 차례로 선택합니다.

   1. <a name="core-device-allow-s3-bucket-access-console-step-8"></a>**권한 추가** 페이지에서 생성한 `MyGreengrassV2ComponentArtifactPolicy` 정책 옆의 확인란을 선택한 다음 **권한 추가**를 선택합니다.

1. 구성 요소 레시피를 사용하여 [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)에서 구성 요소를 생성합니다.

   1. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass) 탐색 메뉴에서 **구성 요소**를 선택한 다음 **구성 요소 생성**을 선택합니다.

   1. **구성 요소 정보**에서 **레시피를 JSON으로 입력**을 선택합니다. 자리 표시자 레시피는 다음 예제와 유사할 것입니다.

      ```
      {
        "RecipeFormatVersion": "2020-01-25",
        "ComponentName": "com.example.HelloWorld",
        "ComponentVersion": "1.0.0",
        "ComponentDescription": "My first AWS IoT Greengrass component.",
        "ComponentPublisher": "Amazon",
        "ComponentConfiguration": {
          "DefaultConfiguration": {
            "Message": "world"
          }
        },
        "Manifests": [
          {
            "Platform": {
              "os": "linux"
            },
            "Lifecycle": {
              "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          },
          {
            "Platform": {
              "os": "windows"
            },
            "Lifecycle": {
              "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          }
        ]
      }
      ```

   1. 각 `Artifacts` 섹션의 자리 표시자 URI를 `hello_world.py` 객체의 S3 URI로 바꿉니다.

   1. **구성 요소 생성**을 선택합니다.

   1. **com.example.HelloWorld** 구성 요소 페이지에서 구성 요소의 **상태**가 **배포 가능**인지 확인합니다.

## 에서 구성 요소 생성 AWS IoT Greengrass (AWS CLI)
<a name="upload-first-component-cli"></a>

**Hello World 구성 요소를 업로드하려면**

1. 에서 S3 버킷을 사용하여 AWS IoT Greengrass 구성 요소 아티팩트 AWS 계정 를 호스팅합니다. 구성 요소를 코어 디바이스에 배포하면 디바이스가 버킷에서 구성 요소의 아티팩트를 다운로드합니다.

   기존 S3 버킷을 사용하거나 다음 명령을 실행하여 버킷을 생성할 수 있습니다. 이 명령은 AWS 계정 ID 및 로 버킷을 생성 AWS 리전 하여 고유한 버킷 이름을 형성합니다. *123456789012*을 AWS 계정 ID로 바꾸고 *리전*을이 자습서에서 AWS 리전 사용하는 로 바꿉니다.

   ```
   aws s3 mb s3://greengrass-component-artifacts-123456789012-region
   ```

   요청에 성공하는 경우 명령은 다음 정보를 출력합니다.

   ```
   make_bucket: greengrass-component-artifacts-123456789012-region
   ```

1. <a name="core-device-allow-s3-bucket-access-cli"></a>코어 디바이스가 S3 버킷의 구성 요소 아티팩트에 액세스하도록 허용합니다.

   각 코어 디바이스에는와 상호 작용 AWS IoT 하고 로그를 전송할 수 있는 [코어 디바이스 IAM 역할](device-service-role.md)이 있습니다 AWS 클라우드. 이 디바이스 역할은 기본적으로 S3 버킷에 대한 액세스를 허용하지 않으므로 코어 디바이스가 S3 버킷에서 구성 요소 아티팩트를 검색할 수 있도록 허용하는 정책을 생성하고 연결해야 합니다.

   코어 디바이스의 역할이 이미 S3 버킷에 대한 액세스를 허용하는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 다음과 같이 액세스를 허용하는 IAM 정책을 생성하여 역할에 연결합니다.

   1. `component-artifact-policy.json`이라는 파일을 만들고 다음 JSON을 파일로 복사합니다. 이 정책은 S3 버킷의 모든 파일에 대한 액세스를 허용합니다. amzn-s3-demo-bucket을 S3 버킷의 이름으로 바꿉니다.

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

   1. 다음 명령을 실행하여 `component-artifact-policy.json`의 정책 문서에서 정책을 생성합니다.

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

      ```
      aws iam create-policy \\
        --policy-name MyGreengrassV2ComponentArtifactPolicy \\
        --policy-document file://component-artifact-policy.json
      ```

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

      ```
      aws iam create-policy ^
        --policy-name MyGreengrassV2ComponentArtifactPolicy ^
        --policy-document file://component-artifact-policy.json
      ```

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

      ```
      aws iam create-policy `
        --policy-name MyGreengrassV2ComponentArtifactPolicy `
        --policy-document file://component-artifact-policy.json
      ```

------

      출력의 정책 메타데이터에서 정책 Amazon 리소스 이름(ARN)을 복사합니다. 이 ARN을 사용하여 다음 단계에서 이 정책을 코어 디바이스 역할에 연결합니다.

   1. 다음 명령을 실행하여 정책을 코어 디바이스 역할에 연결합니다. *GreengrassV2TokenExchangeRole*을 코어 디바이스에 대한 역할의 이름으로 바꿉니다. AWS IoT Greengrass 코어 소프트웨어를 설치할 때이 역할 이름을 지정했습니다. 정책 ARN을 이전 단계의 ARN으로 바꿉니다.

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

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

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

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

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

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

------

      명령의 출력이 없으면 성공한 것입니다. 이제 코어 디바이스는 이 S3 버킷에 업로드한 아티팩트에 액세스할 수 있습니다.

1. Hello World Python 스크립트 아티팩트를 S3 버킷에 업로드합니다.

   다음 명령을 실행하여 스크립트를 AWS IoT Greengrass 코어에 스크립트가 있는 버킷의 동일한 경로에 업로드합니다. amzn-s3-demo-bucket을 S3 버킷의 이름으로 바꿉니다.

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

   ```
   aws s3 cp \
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py \
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

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

   ```
   aws s3 cp ^
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py ^
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

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

   ```
   aws s3 cp `
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py `
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

   요청에 성공하는 경우 명령은 `upload:`로 시작하는 줄을 출력합니다.

1. 아티팩트의 Amazon S3 URI를 구성 요소 레시피에 추가합니다.

   Amazon S3 URI는 버킷 이름과 버킷의 아티팩트 객체 경로로 구성되어 있습니다. 스크립트 아티팩트의 Amazon S3 URI는 이전 단계에서 아티팩트를 업로드한 URI입니다. 이 URI는 다음 예제와 유사할 것입니다. amzn-s3-demo-bucket을 S3 버킷의 이름으로 바꿉니다.

   ```
   s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   레시피에 아티팩트를 추가하려면 Amazon S3 URI를 사용하여 구조가 포함된 `Artifacts`의 목록을 추가합니다.

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

   ```
   "Artifacts": [
     {
       "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
     }
   ]
   ```

   텍스트 편집기에서 레시피 파일을 엽니다.

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

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

   레시피에 아티팩트를 추가합니다. 레시피 파일은 다음 예제와 유사할 것입니다.

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   Artifacts:
     - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   텍스트 편집기에서 레시피 파일을 엽니다.

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

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

   레시피에 아티팩트를 추가합니다. 레시피 파일은 다음 예제와 유사할 것입니다.

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         Run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
     - Platform:
         os: windows
       Lifecycle:
         Run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

1. 레시피 AWS IoT Greengrass 에서에 구성 요소 리소스를 생성합니다. 다음 명령을 실행하여 이진 파일로 제공하는 레시피에서 구성 요소를 생성합니다.

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

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.yaml
   ```

------

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

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Nov 30 09:04:05 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   출력에서 `arn`을 복사하여 다음 단계에서 구성 요소의 상태를 확인합니다.
**참고**  
**구성 요소** 페이지의 [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)에서 Hello World 구성 요소를 확인할 수도 있습니다.

1. 구성 요소가 생성되고 배포할 준비가 되었는지 확인합니다. 구성 요소를 생성할 때 구성 요소의 상태는 `REQUESTED`입니다. 그런 다음 구성 요소를 배포할 수 있는지 AWS IoT Greengrass 확인합니다. 다음 명령을 실행하여 구성 요소 상태를 쿼리하고 구성 요소가 배포 가능한지 확인할 수 있습니다. `arn`을 이전 단계의 ARN으로 바꿉니다.

   ```
   aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0"
   ```

   구성 요소가 검증되면 응답은 구성 요소 상태가 `DEPLOYABLE`임을 나타냅니다.

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-11-30T18:04:05.823Z",
     "publisher": "Amazon",
     "description": "My first Greengrass component.",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "os": "linux",
         "architecture": "all"
       }
     ]
   }
   ```

이제에서 Hello World 구성 요소를 사용할 수 있습니다 AWS IoT Greengrass. 이 Greengrass 코어 디바이스 또는 다른 코어 디바이스에 다시 배포할 수 있습니다.

# 6단계: 구성 요소 배포
<a name="deploy-first-component"></a>

AWS IoT Greengrass를 통해 개별 디바이스 또는 디바이스 그룹에 구성 요소를 배포할 수 있습니다. 구성 요소를 배포하면 AWS IoT Greengrass에서는 대상 디바이스마다 해당 구성 요소의 소프트웨어가 설치 및 실행됩니다. 구성 요소마다 배포할 구성 요소와 배포할 구성 업데이트를 지정합니다. 배포 대상인 디바이스로 배포가 롤아웃되는 방식을 제어할 수도 있습니다. 자세한 내용은 [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md) 섹션을 참조하세요.

이 섹션에서는 Hello World 구성 요소를 Greengrass 코어 디바이스에 다시 배포합니다.

## 구성 요소를 배포하는 방법(콘솔)
<a name="deploy-first-component-console"></a>

1. [AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass) 탐색 메뉴에서 **구성 요소**를 선택합니다.

1. **구성 요소** 페이지의 **내 구성 요소** 탭에서 **com.example.HelloWorld**를 선택합니다.

1. **com.example.HelloWorld** 페이지에서 **배포**를 선택합니다.

1. **배포에 추가**에서 **새 배포 생성**과 **다음**을 차례로 선택합니다.

1. **대상 지정** 페이지에서 다음 작업을 수행합니다.

   1. **이름(Name)** 상자에 **Deployment for MyGreengrassCore**를 입력합니다.

   1. **배포 대상**에는 **코어 디바이스**와 코어 디바이스의 AWS IoT 사물 이름을 선택합니다. 이 자습서에서는 기본값이 *MyGreengrassCore*입니다.

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

1. **구성 요소 선택** 페이지의 **내 구성 요소**에서 **com.example.HelloWorld** 구성 요소가 선택되었는지 확인하고 **다음**을 선택합니다.

1. **구성 요소 구성** 페이지에서 **com.example.HelloWorld**를 선택하고 다음을 수행합니다.

   1. **구성 요소 구성**을 선택합니다.

   1. **구성 업데이트** 아래에 있는 **병합할 구성**에 다음 구성을 입력합니다.

      ```
      {
        "Message": "universe"
      }
      ```

      이 구성 업데이트에서는 이 배포의 디바이스에 대해 Hello World `Message` 파라미터가 `universe`로 설정됩니다.

   1. **확인**을 선택합니다.

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

1. **고급 설정 구성** 페이지에서 기본 구성 설정을 유지하고 **다음**을 선택합니다.

1. **검토** 페이지에서 **배포**를 선택합니다.

1. <a name="getting-started-verify-cloud-deployment-step"></a>배포가 완료되었는지 확인합니다. 배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. Hello World 로그를 점검하여 변경을 확인합니다. Greengrass 코어 디바이스에서 다음 명령을 실행합니다.

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\\logs\\com.example.HelloWorld.log
   ```

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

   ```
   gc C:\greengrass\v2\\logs\\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   다음 예제와 비슷한 메시지가 표시되어야 합니다.

   ```
   Hello, universe! Greetings from your first Greengrass component.
   ```
**참고**  
로그 메시지가 변경되지 않으면 배포에 실패했거나 코어 디바이스에 도달하지 못한 것입니다. 코어 디바이스가 인터넷에 연결되어 있지 않거나 S3 버킷에서 아티팩트를 검색할 권한이 없으면 이 문제가 발생할 수 있습니다. 코어 디바이스에서 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어 로그 파일을 확인합니다. 이 파일에는 Greengrass 코어 디바이스의 배포 서비스의 로그가 포함되어 있습니다.  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\\logs\\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

   ```
   gc C:\greengrass\v2\\logs\\greengrass.log -Tail 10 -Wait
   ```
자세한 내용은 [문제 해결 AWS IoT Greengrass V2](troubleshooting.md) 섹션을 참조하세요.

## 구성 요소 배포(AWS CLI)
<a name="deploy-first-component-cli"></a>

**Hello World 구성 요소를 배포하려면**

1. 개발 컴퓨터에서 `hello-world-deployment.json`이라는 파일을 생성하고 다음 JSON을 파일로 복사합니다. 이 파일에서는 배포되는 구성 요소와 구성이 정의됩니다.

   ```
   {
     "components": {
       "com.example.HelloWorld": {
         "componentVersion": "1.0.0",
         "configurationUpdate": {
           "merge": "{\"Message\":\"universe\"}"
         }
       }
     }
   }
   ```

   이 구성 파일에서는 이전 절차에서 개발하고 게시한 Hello World 구성 요소의 `1.0.0` 버전 배포가 지정됩니다. `configurationUpdate`에서는 JSON에서 인코딩된 문자열로 구성 요소 구성 병합이 지정됩니다. 이 구성 업데이트에서는 이 배포의 디바이스에 대해 Hello World `Message` 파라미터가 `universe`로 설정됩니다.

1. 다음 명령을 실행하여 Greengrass 코어 디바이스에 구성 요소를 배포합니다. 개별 디바이스인 사물 또는 디바이스 그룹인 사물 그룹에 배포할 수 있습니다. 코어의 AWS IoT 사물 이름으로 *MyGreengrassCore*를 바꿉니다.

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

   ```
   aws greengrassv2 create-deployment \
     --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" \
     --cli-input-json file://hello-world-deployment.json
   ```

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

   ```
   aws greengrassv2 create-deployment ^
     --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" ^
     --cli-input-json file://hello-world-deployment.json
   ```

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

   ```
   aws greengrassv2 create-deployment `
     --target-arn "arn:aws:iot:region:account-id:thing/MyGreengrassCore" `
     --cli-input-json file://hello-world-deployment.json
   ```

------

   다음 예제 출력과 비슷한 출력이 명령에서 반환됩니다.

   ```
   {
     "deploymentId": "deb69c37-314a-4369-a6a1-3dff9fce73a9",
     "iotJobId": "b5d92151-6348-4941-8603-bdbfb3e02b75",
     "iotJobArn": "arn:aws:iot:region:account-id:job/b5d92151-6348-4941-8603-bdbfb3e02b75"
   }
   ```

1. <a name="getting-started-verify-cloud-deployment-step"></a>배포가 완료되었는지 확인합니다. 배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. Hello World 로그를 점검하여 변경을 확인합니다. Greengrass 코어 디바이스에서 다음 명령을 실행합니다.

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

   ```
   sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
   ```

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

   ```
   type C:\greengrass\v2\\logs\\com.example.HelloWorld.log
   ```

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

   ```
   gc C:\greengrass\v2\\logs\\com.example.HelloWorld.log -Tail 10 -Wait
   ```

------

   다음 예제와 비슷한 메시지가 표시되어야 합니다.

   ```
   Hello, universe! Greetings from your first Greengrass component.
   ```
**참고**  
로그 메시지가 변경되지 않으면 배포에 실패했거나 코어 디바이스에 도달하지 못한 것입니다. 코어 디바이스가 인터넷에 연결되어 있지 않거나 S3 버킷에서 아티팩트를 검색할 권한이 없으면 이 문제가 발생할 수 있습니다. 코어 디바이스에서 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어 로그 파일을 확인합니다. 이 파일에는 Greengrass 코어 디바이스의 배포 서비스의 로그가 포함되어 있습니다.  

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   ```
   type C:\greengrass\v2\\logs\\greengrass.log
   ```
<a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

   ```
   gc C:\greengrass\v2\\logs\\greengrass.log -Tail 10 -Wait
   ```
자세한 내용은 [문제 해결 AWS IoT Greengrass V2](troubleshooting.md) 섹션을 참조하세요.

# 다음 단계
<a name="getting-started-next-steps"></a>

이 자습서를 완료했습니다. AWS IoT Greengrass 코어 소프트웨어와 Hello World 구성 요소가 디바이스에서 실행됩니다. 또한 Hello World 구성 요소는 AWS IoT Greengrass 클라우드 서비스에서 다른 디바이스에 배포할 수 있습니다. 이 자습서에서 살펴보는 주제에 대한 자세한 내용은 다음을 참조하세요.
+ [AWS IoT Greengrass 구성 요소 생성](create-components.md)
+ [코어 디바이스에 배포할 구성 요소를 게시하세요.](publish-components.md)
+ [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md)