

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

# 코어 디바이스에 배포할 구성 요소를 게시하세요.
<a name="publish-components"></a>

구성 요소의 버전을 빌드하거나 완료한 후 AWS IoT Greengrass 서비스에 게시할 수 있습니다. 그런 다음 Greengrass 코어 디바이스에 배포할 수 있습니다.

[Greengrass 개발 키트 CLI(GDK CLI)](greengrass-development-kit-cli.md)를 사용하여 [구성 요소를 개발하고 빌드하는 경우](create-components.md) [GDK CLI를 사용](#publish-component-gdk-cli)하여 구성 요소를 AWS 클라우드에 게시할 수 있습니다. 그렇지 않으면 [기본 제공 쉘 명령과 AWS CLI를 사용](#publish-component-shell-commands)하여 구성 요소를 게시합니다.

또한 AWS CloudFormation을 사용하여 템플릿에서 구성 요소 및 기타 AWS 리소스를 생성할 수도 있습니다. 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [AWS CloudFormation이란?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 및 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html)을 참조하세요.

**Topics**
+ [구성 요소 게시(GDK CLI)](#publish-component-gdk-cli)
+ [구성 요소 게시(쉘 명령)](#publish-component-shell-commands)

## 구성 요소 게시(GDK CLI)
<a name="publish-component-gdk-cli"></a>

이 섹션의 지침에 따라 GDK CLI를 사용하여 구성 요소를 게시합니다. GDK CLI는 빌드 아티팩트를 S3 버킷에 업로드하고, 레시피에서 아티팩트 URI를 업데이트하고, 레시피에서 구성 요소를 생성합니다. [GDK CLI 구성 파일](gdk-cli-configuration-file.md)에서 사용할 S3 버킷 및 리전을 지정합니다.

<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는 버킷이 없는 경우 버킷을 생성합니다.

**중요**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
코어 디바이스 역할에서는 기본적으로 S3 버킷에 대한 액세스를 허용하지 않습니다. 이 S3 버킷을 처음 사용하는 경우 코어 디바이스가 이 S3 버킷에서 구성 요소 아티팩트를 검색하도록 허용하는 권한을 역할에 추가해야 합니다. 자세한 내용은 [구성 요소 아티팩트에 대한 S3 버킷 액세스 허용](device-service-role.md#device-service-role-access-s3-bucket) 섹션을 참조하세요.

**Greengrass 구성 요소를 게시하려면(GDK CLI)**

1. 명령 프롬프트 또는 터미널에서 구성 요소 폴더를 엽니다.

1. 아직 하지 않은 경우 Greengrass 구성 요소를 빌드합니다. [구성 요소 빌드](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-build) 명령에서는 구성 요소 폴더의 `greengrass-build` 폴더에 레시피와 아티팩트가 생성됩니다. 다음 명령을 실행합니다.

   ```
   gdk component build
   ```

1. 구성 요소를 AWS 클라우드에 게시합니다. [component publish](greengrass-development-kit-cli-component.md#greengrass-development-kit-cli-component-publish) 명령은 구성 요소의 아티팩트를 Amazon S3에 업로드하고 각 아티팩트의 URI로 구성 요소의 레시피를 업데이트합니다. 그런 다음 AWS IoT Greengrass 서비스에서 구성 요소를 생성합니다.
**참고**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass는 구성 요소를 생성할 때 각 아티팩트의 다이제스트를 계산합니다. 따라서 구성 요소를 생성한 후에는 S3 버킷에서 아티팩트 파일을 수정할 수 없습니다. 수정하는 경우 파일 다이제스트가 일치하지 않게 되므로 이 구성 요소가 포함된 배포가 실패합니다. 아티팩트 파일을 수정하는 경우 구성 요소의 새 버전을 생성해야 합니다.

   GDK CLI 구성 파일에서 구성 요소 버전에 `NEXT_PATCH`를 지정하는 경우 GDK CLI는 AWS IoT Greengrass 서비스에 아직 없는 다음 패치 버전을 사용합니다.

   다음 명령을 실행합니다.

   ```
   gdk component publish
   ```

   출력에서는 GDK CLI가 생성한 구성 요소의 버전을 알려줍니다.

   구성 요소를 게시한 후 코어 디바이스에 구성 요소를 배포할 수 있습니다. 자세한 내용은 [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md) 섹션을 참조하세요.

## 구성 요소 게시(쉘 명령)
<a name="publish-component-shell-commands"></a>

다음 절차에 따라 쉘 명령과 AWS Command Line Interface(AWS CLI)를 사용하여 구성 요소를 게시합니다. 구성 요소를 게시할 때 다음을 수행합니다.

1. 구성 요소 아티팩트를 S3 버킷에 게시합니다.

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

1. AWS IoT Greengrass에서 구성 요소 레시피를 통해 구성 요소 버전을 생성합니다.

**참고**  <a name="component-version-uniqueness-note"></a>
<a name="component-version-uniqueness-para"></a>업로드하는 각 구성 요소 버전은 고유해야 합니다. 업로드한 후에는 편집할 수 없으므로 올바른 구성 요소 버전을 업로드해야 합니다.

다음 단계에 따라 개발 컴퓨터 또는 Greengrass 코어 디바이스에서 구성 요소를 게시할 수 있습니다.

**구성 요소를 게시하려면(쉘 명령)**

1. 구성 요소가 AWS IoT Greengrass 서비스에 있는 버전을 사용하는 경우 구성 요소의 버전을 변경해야 합니다. 텍스트 편집기에서 레시피를 열고 버전을 늘리고 파일을 저장합니다. 구성 요소에 대해 변경한 사항을 반영하는 새 버전을 선택합니다.
**참고**  <a name="semver-note"></a>
<a name="semver-para"></a>AWS IoT Greengrass에서는 구성 요소에 의미 체계 버전이 사용됩니다. *시맨틱 버전은 메이저*.*마이너*.*패치* 번호 시스템을 따릅니다. 예를 들어 `1.0.0` 버전은 구성 요소의 첫 번째 주요 릴리스를 나타냅니다. 자세한 내용은 [의미 체계 버전 사양](https://semver.org/)을 참조하세요.

1. 구성 요소에 아티팩트가 있는 경우 다음을 수행합니다.

   1. 구성 요소의 아티팩트를 AWS 계정의 S3 버킷에 게시합니다.
**작은 정보**  <a name="artifact-path-tip"></a>
S3 버킷의 아티팩트 경로에 구성 요소 이름과 버전을 포함하는 것이 좋습니다. 이 이름 지정 체계는 이전 버전의 구성 요소가 사용하는 아티팩트를 유지 관리하는 데 도움이 될 수 있으므로 이전 구성 요소 버전을 계속 지원할 수 있습니다.

      다음 명령을 실행하여 아티팩트 파일을 S3 버킷에 게시합니다. amzn-s3-demo-bucket을 버킷 이름으로 바꾸고 *artifacts/com.example.HelloWorld /1.0.0/artifact.py*를 아티팩트 파일의 경로로 바꿉니다.

      ```
      aws s3 cp artifacts/com.example.HelloWorld/1.0.0/artifact.py s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/artifact.py
      ```
**중요**  <a name="publish-component-s3-bucket-token-exchange-role-permissions"></a>
코어 디바이스 역할에서는 기본적으로 S3 버킷에 대한 액세스를 허용하지 않습니다. 이 S3 버킷을 처음 사용하는 경우 코어 디바이스가 이 S3 버킷에서 구성 요소 아티팩트를 검색하도록 허용하는 권한을 역할에 추가해야 합니다. 자세한 내용은 [구성 요소 아티팩트에 대한 S3 버킷 액세스 허용](device-service-role.md#device-service-role-access-s3-bucket) 섹션을 참조하세요.

   1. 없는 경우 `Artifacts`라는 목록을 구성 요소 레시피에 추가합니다. `Artifacts` 목록은 구성 요소가 지원하는 각 플랫폼에서 구성 요소의 요구 사항(또는 모든 플랫폼에 대한 구성 요소의 기본 요구 사항)을 정의하는 각 매니페스트에 표시됩니다.

   1. 아티팩트 목록에 각 아티팩트를 추가하거나 기존 아티팩트의 URI를 업데이트합니다. Amazon S3 URI는 버킷 이름과 버킷의 아티팩트 객체 경로로 구성되어 있습니다. 아티팩트의 Amazon S3 URI는 다음 예와 비슷해야 합니다.

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

   이 단계를 완료한 후 레시피에는 다음 `Artifacts` 목록이 있어야 합니다.

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

   ```
   {
     ...
     "Manifests": [
       {
         "Lifecycle": {
           ...
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py",
             "Unarchive": "NONE"
           }
         ]
       }
     ]
   }
   ```

**참고**  
ZIP 아티팩트에 대한 `"Unarchive": "ZIP"` 옵션을 추가하여 구성 요소가 배포될 때 아티팩트의 압축을 풀도록 AWS IoT Greengrass 코어 소프트웨어를 구성할 수 있습니다.

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

   ```
   ...
   Manifests:
     - Lifecycle:
         ...
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/MyGreengrassComponent/1.0.0/artifact.py
           Unarchive: NONE
   ```

**참고**  
`Unarchive: ZIP` 옵션을 사용하여 구성 요소가 배포될 때 ZIP 아티팩트의 압축을 풀도록 AWS IoT Greengrass 코어 소프트웨어를 구성할 수 있습니다. 구성 요소에서 ZIP 아티팩트를 사용하는 방법에 대한 자세한 내용은 [artifacts:decompressedPath 레시피 변수](component-recipe-reference.md#component-recipe-artifacts-decompressed-path)를 참조하세요.

------

   레시피에 대한 자세한 내용은 [AWS IoT Greengrass 구성 요소 레시피 참조](component-recipe-reference.md) 단원을 참조하세요.

1. AWS IoT Greengrass 콘솔을 사용하여 레시피 파일에서 구성 요소를 생성합니다.

   다음 명령을 실행하여 레시피 파일에서 구성 요소를 생성합니다. 이 명령은 구성 요소를 생성하고 AWS 계정의 프라이빗 AWS IoT Greengrass 구성 요소로 게시합니다. *path/to/recipeFile*을 레시피 파일의 경로로 바꿉니다.

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://path/to/recipeFile
   ```

   응답에서 `arn`를 복사하여 다음 단계에서 구성 요소의 상태를 확인합니다.
**참고**  <a name="publish-component-s3-bucket-artifact-digest-warning"></a>
AWS IoT Greengrass는 구성 요소를 생성할 때 각 아티팩트의 다이제스트를 계산합니다. 따라서 구성 요소를 생성한 후에는 S3 버킷에서 아티팩트 파일을 수정할 수 없습니다. 수정하는 경우 파일 다이제스트가 일치하지 않게 되므로 이 구성 요소가 포함된 배포가 실패합니다. 아티팩트 파일을 수정하는 경우 구성 요소의 새 버전을 생성해야 합니다.

1. AWS IoT Greengrass 서비스의 각 구성 요소에는 상태가 있습니다. 다음 명령을 실행하여 이 절차에서 게시하는 구성 요소 버전의 상태를 확인합니다. *com.example.HelloWorld* 및 *1.0.0*을 쿼리할 구성 요소 버전으로 바꿉니다. `arn`을 이전 단계의 ARN으로 바꿉니다.

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

   이 작업은 구성 요소의 메타데이터가 포함된 응답을 반환합니다. 메타데이터에는 구성 요소 상태와 해당하는 경우 오류를 포함하는 `status` 객체가 포함되어 있습니다.

   구성 요소 상태가 `DEPLOYABLE`이면 구성 요소를 디바이스에 배포할 수 있습니다. 자세한 내용은 [디바이스에 AWS IoT Greengrass 구성 요소 배포](manage-deployments.md) 섹션을 참조하세요.