

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

# AWS IoT Greengrass 개발 키트 명령줄 인터페이스
<a name="greengrass-development-kit-cli"></a>

AWS IoT Greengrass 개발 키트 CLI(GDK CLI)는 [사용자 지정 Greengrass 구성 요소](develop-greengrass-components.md)를 개발하는 데 도움이 되는 기능을 제공합니다. GDK CLI를 사용하여 사용자 지정 구성 요소를 생성, 빌드 및 게시할 수 있습니다. GDK CLI를 사용하여 구성 요소 리포지토리를 생성할 때 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)의 템플릿 또는 커뮤니티 구성 요소에서 시작할 수 있습니다. 이후 파일을 ZIP 아카이브로 패키징하거나, Maven 또는 Gradle 빌드 스크립트를 사용하거나, 사용자 지정 빌드 명령을 실행하는 빌드 시스템을 선택할 수 있습니다. 구성 요소를 생성한 후 GDK CLI를 사용하여 AWS IoT Greengrass 서비스에 게시할 수 있으므로 AWS IoT Greengrass 콘솔 또는 API를 사용하여 Greengrass 코어 디바이스에 구성 요소를 배포할 수 있습니다.

GDK CLI 없이 Greengrass 구성 요소를 개발할 때는 구성 요소의 새 버전을 생성할 때마다 [구성 요소 레시피 파일](component-recipe-reference.md)에서 버전 및 아티팩트 URI를 업데이트해야 합니다. GDK CLI를 사용하면 구성 요소의 새 버전을 게시할 때마다 버전 및 아티팩트 URI가 자동으로 업데이트될 수 있습니다.

GDK CLI는 오픈 소스로 GitHub에서 사용할 수 있습니다. 구성 요소 개발 요구 사항에 맞춰 GDK CLI를 사용자 지정 및 확장할 수 있습니다. GitHub 리포지토리에서 문제를 열고 요청을 가져오는 것이 좋습니다. GDK CLI 소스를 찾을 수 있는 링크: [https://github.com/aws-greengrass/aws-greengrass-gdk-cli](https://github.com/aws-greengrass/aws-greengrass-gdk-cli).

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

Greengrass 개발 키트 CLI를 설치 및 사용하려면 다음이 필요합니다.
+ AWS 계정. 없으면 [설정 AWS 계정](setting-up.md#set-up-aws-account) 단원을 참조하세요.
+ 인터넷에 연결된 Windows, macOS 또는 Unix 계열 개발 컴퓨터.
+ GDK CLI 버전 1.1.0 이상의 경우 [Python](https://www.python.org/downloads/) 3.6 이상이 개발 컴퓨터에 설치되어야 합니다.

  GDK CLI 버전 1.0.0의 경우 [Python](https://www.python.org/downloads/) 3.8 이상이 개발 컴퓨터에 설치되어야 합니다.
+ 개발 컴퓨터에 설치된 [Git](https://git-scm.com/).
+ <a name="development-component-aws-cli-prerequisite"></a>자격 증명을 사용하여 개발 컴퓨터에 AWS Command Line Interface(AWS CLI)가 설치되어 있어야 합니다. 자세한 내용은 *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) 단원을 참조하세요.
**참고**  
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) 섹션을 참조하세요.
+ GDK CLI를 사용하여 AWS IoT Greengrass 서비스에 구성 요소를 게시하려면 다음 권한이 있어야 합니다.
  + `s3:CreateBucket`
  + `s3:GetBucketLocation`
  + `s3:PutObject`
  + `greengrass:CreateComponentVersion`
  + `greengrass:ListComponentVersions`
+ GDK CLI를 사용하여 아티팩트가 로컬 파일 시스템이 아닌 S3 버킷에 있는 구성 요소를 빌드하려면 다음 권한이 있어야 합니다.
  + `s3:ListBucket`

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

## Changelog
<a name="gdk-cli-changelog"></a>

다음 표에서는 GDK CLI의 각 버전에서 변경된 사항에 대해 설명합니다. 자세한 내용은 GitHub의 [GDK CLI Releases 페이지](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases)를 참조하세요.


|  **버전**:   |  **변경 사항**  | 
| --- | --- | 
|  1.6.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.6.1  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.6.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.5.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.4.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.3.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
| 1.2.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/greengrass-development-kit-cli.html)  | 
|  1.0.0  |  초기 버전입니다.  | 

# AWS IoT Greengrass 개발 키트 명령줄 인터페이스 설치 또는 업데이트
<a name="install-greengrass-development-kit-cli"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)는 Python을 기반으로 빌드되므로 `pip`를 사용하여 개발 컴퓨터에 설치할 수 있습니다.

**작은 정보**  
GDK CLI를 [venv](https://docs.python.org/3/library/venv.html#module-venv) 와 같은 Python 가상 환경에 설치할 수도 있습니다. 자세한 내용은 *Python 3 설명서*의 [가상 환경 및 패키지](https://docs.python.org/3/tutorial/venv.html)를 참조하세요.

**GDK CLI 설치 또는 업데이트**

1. 다음 명령을 실행하여 [GitHub 리포지토리](https://github.com/aws-greengrass/aws-greengrass-gdk-cli)에서 최신 버전의 GDK CLI를 설치합니다.

   ```
   python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@v1.6.2
   ```
**참고**  
GDK CLI의 특정 버전을 설치하려면 *versionTag*를 설치할 버전 태그로 바꿉니다. [GitHub 리포지토리](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/tags)에서 GDK CLI의 버전 태그를 볼 수 있습니다.  

   ```
   python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@versionTag
   ```

1. <a name="gdk-cli-verify-installation"></a>다음 명령을 실행하여 GDK CLI가 성공적으로 설치되었는지 확인합니다.

   ```
   gdk --help
   ```

   `gdk` 명령을 찾을 수 없는 경우 해당 폴더를 PATH에 추가합니다.
   + Linux 디바이스에서 PATH에 `/home/MyUser/.local/bin`을 추가하고 *MyUser*를 사용자 이름으로 바꿉니다.
   + Windows 디바이스에서 PATH에 `PythonPath\\Scripts`를 추가하고 *PythonPath*를 디바이스의 Python 폴더 경로로 바꿉니다.

이제 GDK CLI를 사용하여 Greengrass 구성 요소를 생성, 빌드 및 게시할 수 있습니다. GDK CLI 사용 방법에 대한 자세한 내용은 [AWS IoT Greengrass 개발 키트 명령줄 인터페이스 명령](greengrass-development-kit-cli-commands.md) 섹션을 참조하세요.

# AWS IoT Greengrass 개발 키트 명령줄 인터페이스 명령
<a name="greengrass-development-kit-cli-commands"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)는 개발 컴퓨터에 Greengrass 구성 요소를 생성, 빌드 및 게시하는 데 사용할 수 있는 명령줄 인터페이스를 제공합니다. GDK CLI 명령은 다음 형식을 사용합니다.

```
gdk <command> <subcommand> [arguments]
```

[GDK CLI를 설치](install-greengrass-development-kit-cli.md)하면 설치 관리자가 PATH에 `gdk`를 추가하여 명령줄에서 GDK CLI를 실행할 수 있습니다.

모든 명령에서 다음 인수를 사용할 수 있습니다.
+ `-h` 또는 `--help`를 사용하면 GDK CLI 명령에 대한 정보를 확인합니다.
+ `-v` 또는 `--version`을 사용하여 설치된 GDK CLI 버전을 확인합니다.
+ `-d` 또는 `--debug`를 사용하면 GDK CLI 디버깅에 사용할 수 있는 세부 로그가 출력됩니다.

이 섹션에서는 GDK CLI 명령을 설명하고 각 명령의 예제를 제공합니다. 각 명령의 개요에는 인수와 용도가 표시됩니다. 선택적 인수는 대괄호에 표시됩니다.

**Topics**
+ [구성 요소](greengrass-development-kit-cli-component.md)
+ [config](greengrass-development-kit-cli-config.md)
+ [test-e2e](greengrass-development-kit-cli-test.md)

# 구성 요소
<a name="greengrass-development-kit-cli-component"></a>

`component` 개발 키트 명령줄 인터페이스(GDK CLI)의 AWS IoT Greengrass 명령을 사용하여 사용자 지정 Greengrass 구성 요소를 생성, 빌드 및 게시합니다.

**Topics**
+ [init](#greengrass-development-kit-cli-component-init)
+ [빌드](#greengrass-development-kit-cli-component-build)
+ [publish](#greengrass-development-kit-cli-component-publish)
+ [list](#greengrass-development-kit-cli-component-list)

## init
<a name="greengrass-development-kit-cli-component-init"></a>

구성 요소 템플릿 또는 커뮤니티 구성 요소에서 Greengrass 구성 요소 폴더를 초기화합니다.

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI는 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)에서 커뮤니티 구성 요소를 검색하고 [AWS IoT Greengrass GitHub의 구성 요소 템플릿 리포지토리](https://github.com/aws-greengrass/aws-greengrass-component-templates)에서 구성 요소 템플릿을 검색합니다.

**참고**  
<a name="gdk-cli-component-init-empty-folder-requirement"></a>GDK CLI v1.0.0을 사용하는 경우 빈 폴더에서 이 명령을 실행해야 합니다. GDK CLI는 템플릿 또는 커뮤니티 구성 요소를 현재 폴더에 다운로드합니다.  
<a name="gdk-cli-component-init-empty-folder-requirement-gdk-cli-v1.1.0"></a>GDK CLI v1.1.0 이상을 사용하는 경우 `--name` 인수를 지정하여 GDK CLI가 템플릿 또는 커뮤니티 구성 요소를 다운로드하는 폴더를 지정할 수 있습니다. 이 인수를 사용하는 경우 존재하지 않는 폴더를 지정해야 합니다. GDK CLI가 폴더를 생성합니다. 이 인수를 지정하지 않으면 GDK CLI에서 현재 폴더를 사용하고, 이 폴더는 비어 있어야 합니다.  
구성 요소가 [zip 빌드 시스템](gdk-cli-configuration-file.md#gdk-cli-configuration-file-build-system)을 사용하는 경우 GDK CLI는 구성 요소의 폴더에 있는 특정 파일을 구성 요소 폴더와 이름이 동일한 zip 파일로 압축합니다. 예를 들어 구성 요소 폴더의 이름이 `HelloWorld`인 경우 GDK CLI는 `HelloWorld.zip`이라는 파일을 생성합니다. 구성 요소 레시피에서 zip 아티팩트 이름은 구성 요소 폴더의 이름과 일치해야 합니다. Windows 디바이스에서 GDK CLI 버전 1.0.0을 사용하는 경우 구성 요소 폴더 및 zip 파일 이름에는 소문자만 포함되어야 합니다.  
zip 빌드 시스템을 사용하는 템플릿 또는 커뮤니티 구성 요소를 템플릿 또는 구성 요소와 이름이 다른 폴더로 초기화하는 경우 구성 요소 레시피에서 zip 아티팩트 이름을 변경해야 합니다. zip 파일 이름이 구성 요소 폴더의 이름과 일치하도록 `Artifacts` 및 `Lifecycle` 정의를 업데이트합니다. 다음 예제에서는 `Artifacts` 및 `Lifecycle` 정의의 zip 파일 이름이 강조 표시됩니다.  

```
{
  ...
  "Manifests": [
    {
      "Platform": {
        "os": "all"
      },
      "Artifacts": [
        {
          "URI": "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip",
          "Unarchive": "ZIP"
        }
      ],
      "Lifecycle": {
        "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
      }
    }
  ]
}
```

```
---
...
Manifests:
  - Platform:
      os: all
    Artifacts:
      - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
        Unarchive: ZIP
    Lifecycle:
      Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
```

**시놉시스**  

```
$ gdk component init
    [--language]
    [--template]
    [--repository]
    [--name]
```

**인수(구성 요소 템플릿에서 초기화)**  
+ `-l`, `--language` - 지정한 템플릿에 사용할 프로그래밍 언어입니다.

  `--repository` 또는 `--language`와 `--template`을 지정해야 합니다.
+ `-t`, `--template` - 로컬 구성 요소 프로젝트에 사용할 구성 요소 템플릿입니다. 사용 가능한 템플릿을 보려면 [list](#greengrass-development-kit-cli-component-list) 명령을 사용합니다.

  `--repository` 또는 `--language`와 `--template`을 지정해야 합니다.
+ `-n`, `--name` – (선택 사항) GDK CLI가 구성 요소를 초기화하는 로컬 폴더의 이름입니다. 존재하지 않는 폴더를 지정해야 합니다. GDK CLI가 폴더를 생성합니다.

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

**인수(커뮤니티 구성 요소에서 초기화)**  
+ `-r`, `--repository` - 로컬 폴더에서 확인할 커뮤니티 구성 요소입니다. 사용 가능한 커뮤니티 구성 요소를 보려면 [list](#greengrass-development-kit-cli-component-list) 명령을 사용합니다.

  `--repository` 또는 `--language`와 `--template`을 지정해야 합니다.
+ `-n`, `--name` – (선택 사항) GDK CLI가 구성 요소를 초기화하는 로컬 폴더의 이름입니다. 존재하지 않는 폴더를 지정해야 합니다. GDK CLI가 폴더를 생성합니다.

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

**출력**:  
다음 예제는 Python Hello World 템플릿에서 구성 요소 폴더를 초기화하기 위해 이 명령을 실행할 때 생성된 출력을 보여줍니다.  

```
$ gdk component init -l python -t HelloWorld
[2021-11-29 12:51:40] INFO - Initializing the project directory with a python component template - 'HelloWorld'.
[2021-11-29 12:51:40] INFO - Fetching the component template 'HelloWorld-python' from Greengrass Software Catalog.
```
다음 예제는 커뮤니티 구성 요소에서 구성 요소 폴더를 초기화하기 위해 이 명령을 실행할 때 생성된 출력을 보여줍니다.  

```
$ gdk component init -r aws-greengrass-labs-database-influxdb
[2022-01-24 15:44:33] INFO - Initializing the project directory with a component from repository catalog - 'aws-greengrass-labs-database-influxdb'.
[2022-01-24 15:44:33] INFO - Fetching the component repository 'aws-greengrass-labs-database-influxdb' from Greengrass Software Catalog.
```

## 빌드
<a name="greengrass-development-kit-cli-component-build"></a>

구성 요소의 소스를 AWS IoT Greengrass 서비스에 게시할 수 있는 레시피와 아티팩트로 빌드합니다. GDK CLI는 [GDK CLI 구성 파일](gdk-cli-configuration-file.md)인 `gdk-config.json`에서 지정한 빌드 시스템을 실행합니다. `gdk-config.json` 파일이 있는 곳과 동일한 폴더에서 이 명령을 실행해야 합니다.

이 명령을 실행하면 GDK CLI는 구성 요소 폴더의 `greengrass-build` 폴더에 레시피와 아티팩트를 생성합니다. GDK CLI는 레시피를 `greengrass-build/recipes` 폴더에 저장하고 아티팩트를 `greengrass-build/artifacts/componentName/componentVersion` 폴더에 저장합니다.

GDK CLI v1.1.0 이상을 사용하는 경우 구성 요소 레시피는 S3 버킷에는 있지만 로컬 구성 요소 빌드 폴더에 없는 아티팩트를 지정할 수 있습니다. 이 기능을 사용하면 기계 학습 모델과 같은 큰 아티팩트가 포함된 구성 요소를 개발할 때 대역폭 사용량을 줄일 수 있습니다.

구성 요소를 빌드한 후 다음 중 하나를 수행하여 Greengrass 코어 디바이스에서 테스트할 수 있습니다.
+ AWS IoT Greengrass 코어 소프트웨어를 실행하는 디바이스가 아닌 다른 디바이스에서 개발하는 경우 구성 요소를 게시하여 Greengrass 코어 디바이스에 배포해야 합니다. AWS IoT Greengrass 서비스에 구성 요소를 게시하고 Greengrass 코어 디바이스에 배포합니다. 자세한 내용은 [publish](#greengrass-development-kit-cli-component-build) 명령과 [배포 만들기](create-deployments.md) 섹션을 참조하세요.
+ AWS IoT Greengrass 코어 소프트웨어를 실행하는 것과 동일한 디바이스에서 개발하는 경우 구성 요소를 AWS IoT Greengrass 서비스에 게시하여 배포하거나 로컬 배포를 생성하여 구성 요소를 설치하고 실행할 수 있습니다. 로컬 배포를 생성하려면 Greengrass CLI를 사용합니다. 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 및 [로컬 배포를 사용한 AWS IoT Greengrass 구성 요소 테스트](test-components.md)(을)를 참조하세요. 로컬 배포를 생성할 때 `greengrass-build/recipes`를 레시피 폴더로 지정하고 `greengrass-build/artifacts`를 아티팩트 폴더로 지정합니다.

**시놉시스**  

```
$ gdk component build
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk component build
[2021-11-29 13:18:49] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:18:49] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:18:49] INFO - Building the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:18:49] INFO - Using 'zip' build system to build the component.
[2021-11-29 13:18:49] WARNING - This component is identified as using 'zip' build system. If this is incorrect, please exit and specify custom build command in the 'gdk-config.json'.
[2021-11-29 13:18:49] INFO - Zipping source code files of the component.
[2021-11-29 13:18:49] INFO - Copying over the build artifacts to the greengrass component artifacts build folder.
[2021-11-29 13:18:49] INFO - Updating artifact URIs in the recipe.
[2021-11-29 13:18:49] INFO - Creating component recipe in 'C:\Users\MyUser\Documents\greengrass-components\python\HelloWorld\greengrass-build\recipes'.
```

## publish
<a name="greengrass-development-kit-cli-component-publish"></a>

이 구성 요소를 AWS IoT Greengrass 서비스에 게시합니다. 이 명령은 빌드 아티팩트를 S3 버킷에 업로드하고, 레시피에서 아티팩트 URI를 업데이트하고, 레시피에서 새 버전의 구성 요소를 생성합니다. GDK CLI는 [GDK CLI 구성 파일](gdk-cli-configuration-file.md)인 `gdk-config.json`에서 지정한 S3 버킷 및 AWS 리전을 사용합니다. `gdk-config.json` 파일이 있는 곳과 동일한 폴더에서 이 명령을 실행해야 합니다.

<a name="gdk-cli-s3-bucket-name-formation"></a>GDK CLI v1.1.0 이상을 사용하는 경우 `--bucket` 인수를 지정하여 GDK CLI가 구성 요소의 아티팩트를 업로드하는 S3 버킷을 지정할 수 있습니다. <a name="gdk-cli-s3-bucket-name-formation-format"></a>이 인수를 지정하지 않으면 GDK CLI가 이름이 `bucket-region-accountId`인 S3 버킷에 업로드합니다. 여기서 *bucket*과 *region*은 `gdk-config.json`에서 지정하는 값이고, *accountId*는 AWS 계정 ID입니다. GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.

GDK CLI v1.2.0 이상을 사용하는 경우 `--region` 파라미터를 사용하여 GDK CLI 구성 파일에 지정된 AWS 리전을 재정의할 수 있습니다. `--options` 파라미터를 사용하여 추가 옵션을 지정할 수도 있습니다. 사용 가능한 옵션의 목록은 [Greengrass 개발 키트 CLI 구성 파일](gdk-cli-configuration-file.md) 섹션을 참조하세요.

이 명령을 실행하면 GDK CLI는 레시피에 지정한 버전으로 구성 요소를 게시합니다. `NEXT_PATCH`를 지정하면 GDK CLI는 아직 존재하지 않는 다음 패치 버전을 사용합니다. 의미 체계 버전은 *메이저*.*마이너*.*패치* 번호 시스템을 사용합니다. 자세한 내용은 [의미 체계 버전 사양](https://semver.org/)을 참조하세요.

**참고**  
GDK CLI v1.1.0 이상을 사용하는 경우 이 명령을 실행하면 GDK CLI가 구성 요소 빌드 여부를 확인합니다. 구성 요소가 빌드되지 않으면 GDK CLI는 구성 요소를 게시하기 전에 [구성 요소를 빌드](#greengrass-development-kit-cli-component-build)합니다.

**시놉시스**  

```
$ gdk component publish
    [--bucket] [--region] [--options]
```

**인수**:  
+ `-b`, `--bucket` – (선택 사항) GDK CLI가 구성 요소 아티팩트를 게시하는 S3 버킷의 이름을 지정합니다.

   <a name="gdk-cli-s3-bucket-name-formation-format"></a>이 인수를 지정하지 않으면 GDK CLI가 이름이 `bucket-region-accountId`인 S3 버킷에 업로드합니다. 여기서 *bucket*과 *region*은 `gdk-config.json`에서 지정하는 값이고, *accountId*는 AWS 계정 ID입니다. GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.

  GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.

  이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.
+ `-r`, `--region` – (선택 사항) 구성 요소가 생성될 때 AWS 리전의 이름을 지정합니다. 이 인수는 GDK CLI 구성의 리전 이름을 재정의합니다.

  이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.
+ `-o`, `--options` (선택 사항) 구성 요소 게시를 위한 옵션 목록을 지정합니다. 인수는 유효한 JSON 문자열이거나 게시 옵션이 포함된 JSON 파일의 파일 경로여야 합니다. 이 인수는 GDK CLI 구성의 옵션을 재정의합니다.

  이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk component publish
[2021-11-29 13:45:29] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:45:29] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:45:29] INFO - Found credentials in shared credentials file: ~/.aws/credentials
[2021-11-29 13:45:30] INFO - Publishing the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:45:30] INFO - No private version of the component 'com.example.PythonHelloWorld' exist in the account. Using '1.0.0' as the next version to create.
[2021-11-29 13:45:30] INFO - Uploading the component built artifacts to s3 bucket.
[2021-11-29 13:45:30] INFO - Uploading component artifacts to S3 bucket: {bucket}. If this is your first time using this bucket, add the 's3:GetObject' permission to each core device's token exchange role to allow it to download the component artifacts. For more information, see https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html.
[2021-11-29 13:45:30] INFO - Not creating an artifacts bucket as it already exists.
[2021-11-29 13:45:30] INFO - Updating the component recipe com.example.PythonHelloWorld-1.0.0.
[2021-11-29 13:45:30] INFO - Creating a new greengrass component com.example.PythonHelloWorld-1.0.0
[2021-11-29 13:45:30] INFO - Created private version '1.0.0' of the component in the account.'com.example.PythonHelloWorld'.
```

## list
<a name="greengrass-development-kit-cli-component-list"></a>

사용 가능한 구성 요소 템플릿 및 커뮤니티 구성 요소 목록을 검색합니다.

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI는 [Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)에서 커뮤니티 구성 요소를 검색하고 [AWS IoT Greengrass GitHub의 구성 요소 템플릿 리포지토리](https://github.com/aws-greengrass/aws-greengrass-component-templates)에서 구성 요소 템플릿을 검색합니다.

이 명령의 출력을 [init](#greengrass-development-kit-cli-component-init) 명령에 전달하여 템플릿 및 커뮤니티 구성 요소에서 구성 요소 리포지토리를 초기화할 수 있습니다.

**시놉시스**  

```
$ gdk component list
    [--template]
    [--repository]
```

**인수**:  
+ `-t`, `--template` – (선택 사항) 이 인수를 지정하면 사용 가능한 구성 요소 템플릿이 나열됩니다. 이 명령은 `name-language` 형식으로 각 템플릿의 이름과 언어를 출력합니다. 예를 들어 `HelloWorld-python`에서 템플릿 이름은 `HelloWorld`이고 언어는 `python`입니다.
+ `-r`, `--repository` – (선택 사항) 이 인수를 지정하면 사용 가능한 커뮤니티 구성 요소 리포지토리가 나열됩니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk component list --template
[2021-11-29 12:29:04] INFO - Listing all the available component templates from Greengrass Software Catalog.
[2021-11-29 12:29:04] INFO - Found '2' component templates to display.
1. HelloWorld-python
2. HelloWorld-java
```

# config
<a name="greengrass-development-kit-cli-config"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)의 `config` 명령을 사용하여 구성 파일인 `gdk-config.json`에서 GDK에 대한 구성을 수정합니다.

**Topics**
+ [업데이트](#greengrass-development-kit-cli-config-update)

## 업데이트
<a name="greengrass-development-kit-cli-config-update"></a>

기존 GDK 구성 파일 내의 필드를 수정하는 대화형 프롬프트를 시작합니다.

**시놉시스**  

```
$ gdk config update
    [--component]
```

**인수**:  
+ `-c`, `--component` - `gdk-config.json` 파일의 구성 요소 관련 필드를 업데이트합니다. 이 인수는 유일한 옵션이므로 필수 사항입니다.

**출력**:  
다음 예제는 이 명령을 실행하여 구성 요소를 구성할 때 생성되는 출력을 보여줍니다.  

```
$ gdk config update --component
Current value of the REQUIRED component_name is (default: com.example.PythonHelloWorld): 
Current value of the REQUIRED author is (default: author): 
Current value of the REQUIRED version is (default: NEXT_PATCH): 
Do you want to change the build configurations? (y/n) 
Do you want to change the publish configurations? (y/n)
[2023-09-26 10:19:48] INFO - Config file has been updated. Exiting...
```

# test-e2e
<a name="greengrass-development-kit-cli-test"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)의 `test-e2e` 명령을 사용하여 GDK 프로젝트에서 종단 간 테스트 모듈을 초기화, 빌드 및 실행합니다.

**Topics**
+ [init](#greengrass-development-kit-cli-test-init)
+ [빌드](#greengrass-development-kit-cli-test-build)
+ [실행](#greengrass-development-kit-cli-test-run)

## init
<a name="greengrass-development-kit-cli-test-init"></a>

GTF(Greengrass Testing Framework)를 사용하는 테스트 모듈로 기존 GDK CLI 프로젝트를 초기화합니다.

기본적으로 GDK CLI는 [AWS IoT Greengrass GitHub의 구성 요소 템플릿 리포지토리](https://github.com/aws-greengrass/aws-greengrass-component-templates)에서 Maven 모듈 템플릿을 검색합니다. 이 Maven 모듈은 `aws-greengrass-testing-standalone` JAR 파일에 대한 종속성과 함께 제공됩니다.

이 명령은 GDK 프로젝트 내에 `gg-e2e-tests`라는 새 디렉터리를 생성합니다. 테스트 모듈 디렉터리가 이미 있고 비어 있지 않은 경우 아무 작업도 실시하지 않고 명령이 종료됩니다. 이 `gg-e2e-tests` 폴더에는 Maven 프로젝트에 구조화된 Cucumber 기능과 단계 정의가 포함되어 있습니다.

기본적으로 이 명령은 GTF의 최신 릴리스 버전을 사용하려고 합니다.

**시놉시스**  

```
$ gdk test-e2e init
    [--gtf-version]
```

**인수**:  
+ `-ov`, `--gtf-version` – (선택 사항) GDK 프로젝트의 종단 간 테스트 모듈에 사용할 GTF 버전입니다. 이 값은 [releases](https://github.com/aws-greengrass/aws-greengrass-testing/releases)의 GTF 버전 중 하나여야 합니다. 이 인수는 GDK CLI 구성의 `gtf_version`을 재정의합니다.

**출력**:  
다음 예제는 이 명령을 실행하여 테스트 모듈로 GDK 프로젝트를 초기화할 때 생성되는 출력을 보여줍니다.  

```
$ gdk test-e2e init
[2023-12-06 12:20:28] INFO - Using the GTF version provided in the GDK test config 1.2.0
[2023-12-06 12:20:28] INFO - Downloading the E2E testing template from GitHub into gg-e2e-tests directory...
```

## 빌드
<a name="greengrass-development-kit-cli-test-build"></a>

**참고**  
종단 간 테스트 모듈을 빌드하기 전에 **gdk component build**를 실행하여 구성 요소를 빌드해야 합니다.

종단 간 테스트 모듈을 구축합니다. GDK CLI는 `test-e2e` 속성 아래에서 [GDK CLI 구성 파일](gdk-cli-configuration-file.md)인 `gdk-config.json`에 지정한 빌드 시스템을 사용하여 테스트 모듈을 빌드합니다. `gdk-config.json` 파일이 있는 곳과 동일한 폴더에서 이 명령을 실행해야 합니다.

기본적으로 GDK CLI는 Maven 빌드 시스템을 사용하여 테스트 모듈을 빌드합니다. `gdk test-e2e build` 명령을 실행하려면 [Maven](https://maven.apache.org/)이 필요합니다.

테스트 기능 파일에 `GDK_COMPONENT_NAME` 및 `GDK_COMPONENT_RECIPE_FILE`과 같이 보간할 변수가 있는 경우 테스트 모듈을 빌드하기 전에 **gdk-component-build**를 실행하여 구성 요소를 빌드해야 합니다.

이 명령을 실행하면 GDK CLI는 GDK 프로젝트 구성에서 모든 변수를 보간하고 `gg-e2e-tests` 모듈을 빌드하여 최종 테스트 JAR 파일을 생성합니다.

**시놉시스**  

```
$ gdk test-e2e build
```

**인수**:  
없음

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk test-e2e build
[2023-07-20 15:36:48] INFO - Updating feature file: file:///path/to//HelloWorld/greengrass-build/gg-e2e-tests/src/main/resources/greengrass/features/component.feature
[2023-07-20 15:36:48] INFO - Creating the E2E testing recipe file:///path/to/HelloWorld/greengrass-build/recipes/e2e_test_recipe.yaml
[2023-07-20 15:36:48] INFO - Building the E2E testing module
[2023-07-20 15:36:48] INFO - Running the build command 'mvn package'
.........
```

## 실행
<a name="greengrass-development-kit-cli-test-run"></a>

GDK 구성 파일의 테스트 옵션을 사용하여 테스트 모듈을 실행합니다.

**참고**  
종단 간 테스트를 실행하기 전에 **gdk test-e2e build**를 실행하여 테스트 모듈을 빌드해야 합니다.

**시놉시스**  

```
$ gdk test-e2e run
    [--gtf-options]
```

**인수**:  
+ `-oo`, `--gtf-options` – (선택 사항) 종단 간 테스트를 실행하기 위한 옵션 목록을 지정합니다. 인수는 유효한 JSON 문자열이거나 GTF 옵션이 포함된 JSON 파일의 파일 경로여야 합니다. 구성 파일에 제공된 옵션은 명령 인수에 제공된 옵션과 병합됩니다. 두 곳 모두에 옵션이 있는 경우 인수의 옵션이 구성 파일의 옵션보다 우선합니다.

  이 명령에 `tags` 옵션이 지정되지 않은 경우 GDK는 태그에 `Sample`을 사용합니다. `ggc-archive`가 지정되지 않으면 GDK는 최신 버전의 Greengrass nucleus 아카이브를 다운로드합니다.

**출력**:  
다음 예제는 이 명령을 실행할 때 생성되는 출력을 보여줍니다.  

```
$ gdk test-e2e run
[2023-07-20 16:35:53] INFO - Downloading latest nucleus archive from url https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-latest.zip
[2023-07-20 16:35:57] INFO - Running test jar with command java -jar /path/to/greengrass-build/gg-e2e-tests/target/uat-features-1.0.0.jar —ggc-archive=/path/to/aws-greengrass-gdk-cli/HelloWorld/greengrass-build/greengrass-nucleus-latest.zip —tags=Sample

16:35:59.693 [] [] [] [INFO] com.aws.greengrass.testing.modules.GreengrassContextModule - Extracting /path/to/workplace/aws-greengrass-gdk-cli/HelloWorld/greengrass-build/greengrass-nucleus-latest.zip into /var/folders/7g/ltzcb_3s77nbtmkzfb6brwv40000gr/T/gg-testing-7718418114158172636/greengrass
16:36:00.534 [gtf-1.1.0-SNAPSHOT] [] [] [INFO] com.aws.greengrass.testing.features.LoggerSteps - GTF Version is gtf-1.1.0-SNAPSHOT
.......
```

# Greengrass 개발 키트 CLI 구성 파일
<a name="gdk-cli-configuration-file"></a>

AWS IoT Greengrass 개발 키트 명령줄 인터페이스(GDK CLI)는 `gdk-config.json` 구성 파일로부터 읽어 구성 요소를 빌드 및 게시합니다. 이 구성 파일은 구성 요소 리포지토리의 루트에 있어야 합니다. GDK CLI [init 명령](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-init)을 사용하여 이 구성 파일로 구성 요소 리포지토리를 초기화할 수 있습니다.

**Topics**
+ [GDK CLI 구성 파일 형식](#gdk-config-format)
+ [GDK CLI 구성 파일 예제](#gdk-config-examples)

## GDK CLI 구성 파일 형식
<a name="gdk-config-format"></a>

구성 요소에 대한 GDK CLI 구성 파일을 정의할 때 다음 정보를 JSON 형식으로 지정합니다.

`gdk_version`  
이 구성 요소와 호환되는 GDK CLI의 최소 버전입니다. 이 값은 [releases](https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases)의 GDK CLI 버전 중 하나여야 합니다.

`component`  
이 구성 요소의 구성입니다.    
`componentName`    
`author`  
구성 요소의 작성자 또는 게시자입니다.  
`version`  
구성 요소의 버전입니다. 다음 중 하나를 지정하세요.  <a name="gdk-cli-configuration-file-component-version-options"></a>
+ `NEXT_PATCH` – 이 옵션을 선택하면 구성 요소를 게시할 때 GDK CLI에서 버전이 설정됩니다. GDK CLI에서는 AWS IoT Greengrass 서비스 쿼리를 통해 구성 요소의 최신 게시 버전이 식별됩니다. 그런 다음에 버전이 해당 버전 이후의 다음 패치 버전으로 설정됩니다. 이전에 구성 요소를 게시하지 않았으면 GDK CLI에서는 `1.0.0` 버전이 사용됩니다.

  이 옵션을 선택하면 [Greengrass CLI](greengrass-cli-component.md)를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 실행하는 로컬 개발 컴퓨터에 구성 요소를 로컬로 배포하고 테스트할 수 없습니다. 로컬 배포를 활성화하려면 대신 의미 체계 버전을 지정해야 합니다.
+ 의미 체계 버전(예: **1.0.0**). 의미 체계 버전에서는 *major*.*minor*.*patch* 번호 매기기 시스템이 사용됩니다. 자세한 내용은 [의미 체계 버전 사양](https://semver.org/)을 참조하세요.

  구성 요소를 배포하고 테스트하려는 Greengrass 코어 디바이스에서 구성 요소를 개발하는 경우 이 옵션을 선택합니다. [Greengrass CLI](greengrass-cli-component.md)를 사용하여 로컬 배포를 생성하려면 특정 버전으로 구성 요소를 빌드해야 합니다.  
`build`  
이 구성 요소의 소스를 아티팩트에 빌드하는 데 사용할 구성입니다. 이 객체에는 다음 정보가 포함되어 있어야 합니다.    
  `build_system`   
사용할 빌드 시스템입니다. 다음 옵션 중 하나를 선택합니다.  <a name="gdk-cli-configuration-file-component-build-system-options"></a>
+ `zip` - 구성 요소의 폴더를 ZIP 파일로 패키징하여 구성 요소의 유일한 아티팩트로 정의합니다. 다음 유형의 구성 요소에 대해 이 옵션을 선택합니다.
  + Python 또는 JavaScript와 같이 해석된 프로그래밍 언어가 사용되는 구성 요소.
  + 기계 학습 모델 또는 기타 리소스와 같이 코드 이외의 파일이 패키징되는 구성 요소.

  GDK CLI에서는 구성 요소의 폴더를 이름이 동일한 zip 파일로 압축됩니다. 예를 들어, 구성 요소 폴더의 이름이 `HelloWorld`라면 GDK CLI에서는 `HelloWorld.zip`이라는 파일이 생성됩니다.
**참고**  
Windows 디바이스에서 GDK CLI 버전 1.0.0을 사용하는 경우 구성 요소 폴더 및 zip 파일 이름에는 소문자만 포함되어야 합니다.

  GDK CLI에서는 구성 요소의 폴더가 zip 파일로 압축하면 다음 파일을 건너뜁니다.
  + `gdk-config.json` 파일
  + 레시피 파일(`recipe.json` 또는 `recipe.yaml`)
  + 빌드 폴더(예: `greengrass-build`)
+ `maven` - `mvn clean package` 명령을 실행하여 구성 요소의 소스를 아티팩트에 빌드합니다. Java 구성 요소와 같이 [Maven](https://maven.apache.org/)을 사용하는 구성 요소의 경우 이 옵션을 선택합니다.

  Windows 디바이스에서 이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.
+ `gradle` - `gradle build` 명령을 실행하여 구성 요소의 소스를 아티팩트에 빌드합니다. [Gradle](https://gradle.org/)을 사용하는 구성 요소의 경우 이 옵션을 선택합니다. 이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

  `gradle` 빌드 시스템에서는 빌드 파일로 Kotlin DSL이 지원됩니다. 이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.
+ `gradlew` - `gradlew` 명령을 실행하여 구성 요소의 소스를 아티팩트에 빌드합니다. [Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html)를 사용하는 구성 요소의 경우 이 옵션을 선택합니다.

  이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.
+ `custom` - 사용자 지정 명령을 실행하여 구성 요소의 소스를 레시피 및 아티팩트에 빌드합니다. `custom_build_command` 파라미터에서 사용자 지정 명령을 지정합니다.  
`custom_build_command`  
(선택 사항) 사용자 지정 빌드 시스템에 대해 실행할 사용자 지정 빌드 명령입니다. `build_system`에 `custom`을 지정한 경우 이 파라미터를 지정해야 합니다.  
이 명령으로 구성 요소 폴더 내의 다음 폴더에 레시피와 아티팩트를 생성될 것입니다. GDK CLI는 [구성 요소 빌드 명령](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build)을 실행할 때 이러한 폴더를 생성합니다.  
+ 레시피 폴더: `greengrass-build/recipes`
+ 아티팩트 폴더: `greengrass-build/artifacts/componentName/componentVersion`

  *componentName*을 구성 요소 이름으로 바꾸고 *componentVersion*을 구성 요소 버전 또는 `NEXT_PATCH`로 바꿉니다.
단일 문자열 또는 문자열 목록을 지정할 수 있으며, 여기서 각 문자열은 명령의 단어입니다. 예를 들어 C\$1\$1 구성 요소에 대한 사용자 지정 빌드 명령을 실행하려면 **cmake --build build --config Release** 또는 **["cmake", "--build", "build", "--config", "Release"]**를 지정할 수 있습니다.  
사용자 지정 빌드 시스템의 예제를 보려면 [GitHub의 aws.greengrass.labs.LocalWebServer community component](https://github.com/awslabs/aws-greengrass-labs-local-web-server)를 참조하세요.  
`options`  
(선택 사항) 구성 요소 빌드 프로세스 중에 사용되는 추가 구성 옵션입니다.  
이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.    
`excludes`  
zip 파일을 빌드할 때 구성 요소 디렉터리에서 제외할 파일을 정의하는 glob 패턴 목록입니다. `build_system`이 `zip`인 경우에만 유효합니다.  
GDK CLI 버전 1.4.0 이하에서는 제외 목록의 항목과 일치하는 모든 파일이 구성 요소의 모든 하위 디렉터리에서 제외됩니다. GDK CLI 버전 1.5.0 이상에서 동일한 동작을 하려면 제외 목록의 기존 항목 `**/` 기호를 추가합니다. 예를 들어 `*.txt`는 디렉터리에서 텍스트 파일을 제외하고, `**/*.txt`는 모든 디렉터리 및 하위 디렉터리에서 텍스트 파일을 제외합니다.  
GDK CLI 버전 1.5.0 이상에서는 `excludes`가 GDK 구성 파일에 정의되어 있을 때 구성 요소 빌드 도중 경고가 표시될 수 있습니다. 이 경고를 비활성화하려면 환경 변수 `GDK_EXCLUDES_WARN_IGNORE`를 `true`로 설정합니다.
GDK CLI는 항상 zip 파일에서 다음 파일을 제외합니다.  
+ `gdk-config.json` 파일
+ 레시피 파일(`recipe.json` 또는 `recipe.yaml`)
+ 빌드 폴더(예: `greengrass-build`)
다음 파일은 기본적으로 제외됩니다. 하지만 `excludes` 옵션으로 제외되는 파일을 제어할 수 있습니다.  
+ 접두사 “test”로 시작하는 모든 폴더(`test*`)
+ 숨겨진 모든 파일
+ `node_modules` 폴더
`excludes` 옵션을 지정하면 GDK CLI는 `excludes` 옵션으로 설정한 파일만 제외합니다. `excludes` 옵션을 지정하지 않으면 GDK CLI는 이전에 언급한 기본 파일 및 폴더를 제외합니다.  
`zip_name`  
빌드 프로세스 중에 zip 아티팩트를 생성할 때 사용할 zip 파일 이름입니다. `build_system`이 `zip`인 경우에만 유효합니다. `build_system`이 비어 있으면 구성 요소 이름이 zip 파일 이름에 사용됩니다.  
`publish`  
이 구성 요소를 AWS IoT Greengrass 서비스에 게시하는 데 사용할 구성입니다.  
<a name="gdk-cli-s3-bucket-name-formation"></a>GDK CLI v1.1.0 이상을 사용하는 경우 `--bucket` 인수를 지정하여 GDK CLI가 구성 요소의 아티팩트를 업로드하는 S3 버킷을 지정할 수 있습니다. <a name="gdk-cli-s3-bucket-name-formation-format"></a>이 인수를 지정하지 않으면 GDK CLI가 이름이 `bucket-region-accountId`인 S3 버킷에 업로드합니다. 여기서 *bucket*과 *region*은 `gdk-config.json`에서 지정하는 값이고, *accountId*는 AWS 계정 ID입니다. GDK CLI는 버킷이 없는 경우 버킷을 생성합니다.  
이 객체에는 다음 정보가 포함되어 있어야 합니다.    
`bucket`  
구성 요소 아티팩트를 호스팅하는 데 사용할 S3 버킷 이름입니다.  
`region`  
GDK CLI가 이 구성 요소를 게시하는 AWS 리전입니다.  
GDK CLI v1.3.0 이상을 사용하는 경우 이 속성은 선택 사항입니다.  
`options`  
(선택 사항) 구성 요소 버전 생성 중에 사용되는 추가 구성 옵션입니다.  
이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.    
`file_upload_args`  
메타데이터 및 암호화 메커니즘과 같이 버킷에 파일을 업로드하는 동안 Amazon S3로 전송된 인수가 포함된 JSON 구조입니다. 허용되는 인수 목록은 *Boto3 설명서*의 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/customizations/s3.html#boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/customizations/s3.html#boto3.s3.transfer.S3Transfer.ALLOWED_UPLOAD_ARGS) 클래스를 참조하세요.

`test-e2e`  
(선택 사항) 구성 요소의 엔드 투 엔드 테스트에 사용할 구성입니다. 이 기능은 GDK CLI v1.3.0 이상에서 사용할 수 있습니다.    
`build`  
`build_system` - 사용할 빌드 시스템입니다. 기본값은 `maven`입니다. 다음 옵션 중 하나를 선택합니다.  
+ `maven` – `mvn package` 명령을 실행하여 테스트 모듈을 빌드합니다. 이 옵션을 선택하면 [Maven](https://maven.apache.org/)을 사용하는 테스트 모듈을 빌드합니다.
+ `gradle` – `gradle build` 명령을 실행하여 테스트 모듈을 빌드합니다. [Gradle](https://gradle.org/)을 사용하는 테스트 모듈에 이 옵션을 선택합니다.  
`gtf_version`  
(선택 사항) GTF(Greengrass Testing Framework)로 GDK 프로젝트를 초기화할 때 엔드 투 엔드 테스트 모듈의 종속성으로 사용할 GTF의 버전입니다. 이 값은 [releases](https://github.com/aws-greengrass/aws-greengrass-testing/releases)의 GTF 버전 중 하나여야 합니다. 기본 버전은 GTF 1.1.0입니다.  
`gtf_options`  
(선택 사항) 구성 요소의 엔드 투 엔드 테스트 중에 사용되는 추가 구성 옵션입니다.  
<a name="gtf_options"></a>다음 목록에는 GTF 버전 1.1.0에서 사용할 수 있는 옵션이 있습니다.  
+ `additional-plugins` – (선택 사항) 추가 Cucumber 플러그인
+ `aws-region` - AWS 서비스에 대한 특정 리전 엔드포인트를 대상으로 합니다. 기본값은 AWS SDK에서 검색되는 내용입니다.
+ `credentials-path` - 선택적 AWS 프로필 자격 증명 경로입니다. 기본값은 호스트 환경에서 검색된 자격 증명입니다.
+ `credentials-path-rotation` - AWS 자격 증명의 선택적 교체 기간입니다. 기본값은 15분 또는 `PT15M`입니다.
+ `csr-path` - CSR에서 사용되어 디바이스 인증서가 생성되는 경로입니다.
+ `device-mode` - 테스트 중인 대상 디바이스입니다. 기본값은 로컬 디바이스입니다.
+ `env-stage` – Greengrass의 배포 환경을 대상으로 합니다. 기본값은 프로덕션입니다.
+ `existing-device-cert-arn` - Greengrass의 디바이스 인증서로 사용하려는 기존 인증서의 arn입니다.
+ `feature-path` – 추가 특성 파일이 포함된 파일 또는 디렉터리입니다. 기본적으로 추가 특성 파일은 사용되지 않습니다.
+ `gg-cli-version` – Greengrass CLI의 버전을 재정의합니다. 기본값은 `ggc.version`에 있는 값입니다.
+ `gg-component-bucket` - Greengrass 구성 요소가 보관되는 기존 Amazon S3 버킷의 이름입니다.
+ `gg-component-overrides` – Greengrass 구성 요소 재정의 목록입니다.
+ `gg-persist` - 테스트 실행 후 유지할 테스트 요소 목록입니다. 기본 동작은 아무것도 유지하지 않는 것입니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `gg-runtime` - 테스트가 테스트 리소스와 상호 작용하는 방식에 영향을 미치는 값의 목록입니다. 이러한 값은 `gg.persist` 파라미터를 대체합니다. 기본값이 비어 있는 경우 설치된 Greengrass 런타임을 포함하여 모든 테스트 리소스가 테스트 사례로 관리된다고 가정합니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `ggc-archive` – 보관된 Greengrass nucleus 구성 요소의 경로입니다.
+ `ggc-install-root` – Greengrass nucleus 구성 요소를 설치하는 디렉터리입니다. 기본값은 test.temp.path 및 테스트 실행 폴더입니다.
+ `ggc-log-level` – 테스트 실행에 대한 Greengrass nucleus 로그 수준을 설정합니다. 기본값은 ‘INFO’입니다.
+ `ggc-tes-rolename` – AWS IoT Greengrass 코어가 AWS 서비스에 액세스하기 위해 맡을 IAM 역할입니다. 지정된 이름의 역할이 없는 경우 역할이 생성되고 기본 액세스 정책이 생성됩니다.
+ `ggc-trusted-plugins` – Greengrass에 추가되어야 하는 신뢰할 수 있는 플러그인의 경로(호스트)를 쉼표로 구분한 목록입니다. DUT 자체의 경로를 제공하려면 경로에 'dut:' 접두사를 붙입니다.
+ `ggc-user-name` – Greengrass nucleus의 user:group posixUser 값입니다. 기본값은 로그인한 현재 사용자 이름입니다.
+ `ggc-version` - 실행 중인 Greengrass nucleus 구성 요소의 버전을 재정의합니다. 기본값은 ggc.archive에 있는 값입니다.
+ `log-level` – 테스트 실행의 로그 수준입니다. 기본값은 ‘INFO’입니다.
+ `parallel-config` - 배치 인덱스 및 배치 수 세트입니다(JSON 문자열). 배치 인덱스의 기본값은 0이고 배치 수는 1입니다.
+ `proxy-url` - 이 URL을 통해 트래픽을 라우팅하도록 모든 테스트를 구성합니다.
+ `tags` – 특성 태그만 실행합니다. '&' 문자와 교차할 수 있습니다.
+ `test-id-prefix` - AWS 리소스 이름 및 태그를 포함하여 모든 테스트별 리소스에 적용되는 일반 접두사입니다. 기본값은 ‘gg’ 접두사입니다.
+ `test-log-path` - 전체 테스트 실행의 결과를 포함하는 디렉터리입니다. 기본값은 ‘testResults’입니다.
+ `test-results-json` - 결과로 나오는 Cucumber JSON 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-results-log` - 콘솔 출력이 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 false입니다.
+ `test-results-xml` - 결과로 나오는 JUnit XML 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-temp-path` - 로컬 테스트 아티팩트를 생성하는 디렉터리입니다. 기본적으로 gg 테스트 접두사가 붙은 무작위 임시 디렉터리로 설정됩니다.
+ `timeout-multiplier` - 모든 테스트 제한 시간에 제공되는 승수입니다. 기본값은 1.0.

## GDK CLI 구성 파일 예제
<a name="gdk-config-examples"></a>

다음 GDK CLI 구성 파일 예제를 참조하면 Greengrass 구성 요소 환경을 구성하는 데 도움이 됩니다.

### Hello World(Python)
<a name="gdk-config-example-hello-world-python"></a>

다음 GDK CLI 구성 파일은 Python 스크립트를 실행하는 Hello World 구성 요소를 지원합니다. 이 구성 파일은 `zip` 빌드 시스템을 사용하여 구성 요소의 Python 스크립트를 GDK CLI를 통해 아티팩트로 업로드하는 ZIP 파일로 패키징합니다.

```
{
  "component": {
    "com.example.PythonHelloWorld": {
      "author": "Amazon",
      "version": "NEXT_PATCH",
      "build": {
        "build_system" : "zip",
        "options": {
           "excludes": [".*"]
        }
      },
      "publish": {
        "bucket": "greengrass-component-artifacts",
        "region": "us-west-2",
        "options": {
           "file_upload_args": {
              "Metadata": {
                 "some-key": "some-value"
              }
           }
        }
      }
    },
  "test-e2e":{
    "build":{
        "build_system": "maven"
    },
    "gtf_version": "1.1.0",
    "gtf_options": { 
         "tags": "Sample"
     }
  },
  "gdk_version": "1.6.1"
  }
}
```

### Hello World(Java)
<a name="gdk-config-example-hello-world-java"></a>

다음 GDK CLI 구성 파일은 Java 애플리케이션을 실행하는 Hello World 구성 요소를 지원합니다. 이 구성 파일은 `maven` 빌드 시스템을 사용하여 구성 요소의 Java 소스 코드를 GDK CLI를 통해 아티팩트로 업로드하는 JAR 파일로 패키징합니다.

```
{
  "component": {
    "com.example.JavaHelloWorld": {
      "author": "Amazon",
      "version": "NEXT_PATCH",
      "build": {
        "build_system" : "maven"
      },
      "publish": {
        "bucket": "greengrass-component-artifacts",
        "region": "us-west-2",
        "options": {
           "file_upload_args": {
              "Metadata": {
                 "some-key": "some-value"
              }
           }
        }
      }
  },
  "test-e2e":{
    "build":{
        "build_system": "maven"
    },
    "gtf_version": "1.1.0",
    "gtf_options": { 
         "tags": "Sample"
     }
  },
  "gdk_version": "1.6.1"
  }
}
```

### 커뮤니티 구성 요소
<a name="gdk-config-community-component-examples"></a>

[Greengrass 소프트웨어 카탈로그](greengrass-software-catalog.md)의 여러 커뮤니티 구성 요소는 GDK CLI를 사용합니다. 이러한 구성 요소의 리포지토리에서 GDK CLI 구성 파일을 탐색할 수 있습니다.

**커뮤니티 구성 요소의 GDK CLI 구성 파일 보기**

1. 다음 명령을 실행하면 GDK CLI를 사용하는 커뮤니티 구성 요소가 나열됩니다.

   ```
   gdk component list --repository
   ```

   응답에는 GDK CLI를 사용하는 각 커뮤니티 구성 요소에 대한 GitHub 리포지토리 이름이 나열됩니다. 각 리포지토리는 `awslabs` 조직에 존재합니다.

   ```
   [2022-02-22 17:27:31] INFO - Listing all the available component repositories from Greengrass Software Catalog.
   [2022-02-22 17:27:31] INFO - Found '6' component repositories to display.
   1. aws-greengrass-labs-database-influxdb
   2. aws-greengrass-labs-telemetry-influxdbpublisher
   3. aws-greengrass-labs-dashboard-grafana
   4. aws-greengrass-labs-dashboard-influxdb-grafana
   5. aws-greengrass-labs-local-web-server
   6. aws-greengrass-labs-lookoutvision-gstreamer
   ```

1. 다음 URL에서 커뮤니티 구성 요소의 GitHub 리포지토리를 엽니다. *community-component-name*을 이전 단계의 커뮤니티 구성 요소 이름으로 바꿉니다.

   ```
   https://github.com/awslabs/community-component-name
   ```