AWS IoT Greengrass 구성 요소 생성 - AWS IoT Greengrass

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

AWS IoT Greengrass 구성 요소 생성

로컬 개발 컴퓨터 또는 Greengrass 코어 디바이스에서 사용자 지정 AWS IoT Greengrass 구성 요소를 개발할 수 있습니다. AWS IoT Greengrass 는 사전 정의된 구성 요소 템플릿과 커뮤니티 구성 요소에서 구성 요소를 만들고 빌드하고 게시하는 데 도움이 되는 AWS IoT Greengrass 개발 키트 명령줄 인터페이스 (GDK CLI) 를 제공합니다. 또한 내장된 셸 명령을 실행하여 구성 요소를 만들고 빌드하고 게시할 수 있습니다. 다음 옵션 중에서 선택하여 사용자 지정 Greengrass 구성 요소를 생성합니다.

  • 그린그래스 개발 키트 CLI 사용

    GDK CLI를 사용하여 로컬 개발 컴퓨터에서 구성 요소를 개발합니다. GDK CLI는 구성 요소 소스 코드를 서비스에 비공개 구성 요소로 게시할 수 있는 레시피와 아티팩트로 빌드하고 패키징합니다. AWS IoT Greengrass 구성 요소를 게시할 때 구성 요소의 버전과 아티팩트 URI를 자동으로 업데이트하도록 GDK CLI를 구성할 수 있으므로 매번 레시피를 업데이트할 필요가 없습니다. GDK CLI를 사용하여 구성 요소를 개발하려면 Greengrass 소프트웨어 카탈로그의 템플릿 또는 커뮤니티 구성 요소에서 시작할 수 있습니다. 자세한 설명은 AWS IoT Greengrass개발 키트 명령줄 인터페이스 섹션을 참조하세요.

  • 내장된 셸 명령을 실행합니다.

    내장 셸 명령을 실행하여 로컬 개발 컴퓨터 또는 Greengrass 코어 장치에서 구성 요소를 개발할 수 있습니다. 셸 명령을 사용하여 구성 요소 소스 코드를 아티팩트에 복사하거나 빌드할 수 있습니다. 구성 요소의 새 버전을 만들 때마다 새 구성 요소 버전으로 레시피를 만들거나 업데이트해야 합니다. 구성 요소를 AWS IoT Greengrass 서비스에 게시할 때는 레시피의 각 구성 요소 아티팩트에 대한 URI를 업데이트해야 합니다.

구성 요소 생성 (GDK CLI)

이 섹션의 지침에 따라 GDK CLI를 사용하여 구성 요소를 만들고 빌드하십시오.

그린그래스 컴포넌트 (GDK CLI) 를 개발하려면
  1. 아직 설치하지 않았다면 개발 컴퓨터에 GDK CLI를 설치하세요. 자세한 설명은 AWS IoT Greengrass개발 키트 명령줄 인터페이스 설치 또는 업데이트 섹션을 참조하세요.

  2. 구성 요소 폴더를 생성하려는 폴더로 변경합니다.

    Linux or Unix
    mkdir ~/greengrassv2 cd ~/greengrassv2
    Windows Command Prompt (CMD)
    mkdir %USERPROFILE%\greengrassv2 cd %USERPROFILE%\greengrassv2
    PowerShell
    mkdir ~/greengrassv2 cd ~/greengrassv2
  3. 다운로드할 구성 요소 템플릿 또는 커뮤니티 구성 요소를 선택합니다. GDK CLI는 템플릿 또는 커뮤니티 구성 요소를 다운로드하므로 기능 예제에서 시작할 수 있습니다. 구성 요소 목록 명령을 사용하여 사용 가능한 템플릿 또는 커뮤니티 구성 요소 목록을 검색하십시오.

    • 구성 요소 템플릿을 나열하려면 다음 명령을 실행합니다. 응답의 각 줄에는 템플릿 이름과 프로그래밍 언어가 포함됩니다.

      gdk component list --template
    • 커뮤니티 구성 요소를 나열하려면 다음 명령을 실행합니다.

      gdk component list --repository
  4. GDK CLI가 템플릿 또는 커뮤니티 구성 요소를 다운로드하는 구성 요소 폴더를 만들고 변경합니다. 구성 요소 이름이나 이 구성 요소 폴더를 식별하는 데 도움이 되는 다른 이름으로 HelloWorld바꾸십시오.

    Linux or Unix
    mkdir HelloWorld cd HelloWorld
    Windows Command Prompt (CMD)
    mkdir HelloWorld cd HelloWorld
    PowerShell
    mkdir HelloWorld cd HelloWorld
  5. 템플릿 또는 커뮤니티 구성 요소를 현재 폴더에 다운로드합니다. 구성 요소 init 명령을 사용합니다.

    • 템플릿에서 구성 요소 폴더를 만들려면 다음 명령을 실행합니다. 템플릿 이름으로 바꾸고, python을 프로그래밍 언어 이름으로 바꾸십시오. HelloWorld

      gdk component init --template HelloWorld --language python
    • 커뮤니티 구성 요소에서 구성 요소 폴더를 만들려면 다음 명령을 실행합니다. 커뮤니티 구성 요소의 ComponentName이름으로 바꾸십시오.

      gdk component init --repository ComponentName
    참고

    GDK CLI v1.0.0을 사용하는 경우 빈 폴더에서 이 명령을 실행해야 합니다. GDK CLI는 템플릿 또는 커뮤니티 구성 요소를 현재 폴더에 다운로드합니다.

    GDK CLI v1.1.0 이상을 사용하는 경우 인수를 지정하여 GDK --name CLI가 템플릿 또는 커뮤니티 구성 요소를 다운로드하는 폴더를 지정할 수 있습니다. 이 인수를 사용하는 경우 존재하지 않는 폴더를 지정하십시오. GDK CLI는 폴더를 자동으로 생성합니다. 이 인수를 지정하지 않으면 GDK CLI는 비어 있어야 하는 현재 폴더를 사용합니다.

  6. GDK CLI는 gdk-config.json 이름이 지정된 GDK CLI 구성 파일을 읽고 구성 요소를 빌드하고 게시합니다. 이 구성 파일은 구성 요소 폴더의 루트에 있습니다. 이전 단계에서 이 파일을 자동으로 생성합니다. 이 단계에서는 구성 요소에 대한 gdk-config.json 정보로 업데이트합니다. 다음을 따릅니다.

    1. 텍스트 편집기에서 gdk-config.json을 엽니다.

    2. (선택 사항) 구성 요소 이름을 변경합니다. 구성 요소 이름은 component 개체의 키입니다.

    3. 구성 요소 작성자를 변경합니다.

    4. (선택 사항) 구성 요소의 버전을 변경합니다. 다음 중 하나를 지정하십시오.

      • NEXT_PATCH— 이 옵션을 선택하면 구성 요소를 게시할 때 GDK CLI에서 버전을 설정합니다. GDK CLI는 서비스를 AWS IoT Greengrass 쿼리하여 가장 최근에 게시된 구성 요소 버전을 식별합니다. 그런 다음 버전을 해당 버전 이후의 다음 패치 버전으로 설정합니다. 이전에 구성 요소를 게시한 적이 없는 경우 GDK CLI는 버전을 사용합니다. 1.0.0

        이 옵션을 선택하면 Greengrass CLI를 사용하여 Core 소프트웨어를 실행하는 로컬 개발 컴퓨터에 구성 요소를 로컬로 배포하고 테스트할 수 없습니다. AWS IoT Greengrass 로컬 배포를 활성화하려면 시맨틱 버전을 대신 지정해야 합니다.

      • 시맨틱 버전 (예:. 1.0.0 시맨틱 버전은 메이저를 사용합니다. 마이너. 패치 넘버링 시스템. 자세한 내용은 시맨틱 버전 사양을 참조하십시오.

        구성 요소를 배포하고 테스트하려는 Greengrass 코어 장치에서 구성 요소를 개발하는 경우 이 옵션을 선택합니다. Greengrass CLI로 로컬 배포를 생성하려면 특정 버전으로 구성 요소를 빌드해야 합니다.

    5. (선택 사항) 구성 요소의 빌드 구성을 변경합니다. 빌드 구성은 GDK CLI가 구성 요소 소스를 아티팩트로 빌드하는 방법을 정의합니다. 다음 옵션 중에서 선택하십시오. build_system

      • zip— 구성 요소의 폴더를 ZIP 파일로 패키지하여 구성 요소의 유일한 아티팩트로 정의합니다. 다음 유형의 구성 요소에 대해 이 옵션을 선택합니다.

        • Python 또는 JavaScript 같은 해석된 프로그래밍 언어를 사용하는 컴포넌트

        • 코드가 아닌 파일을 패키징하는 구성 요소 (예: 기계 학습 모델 또는 기타 리소스).

        GDK CLI는 구성 요소 폴더를 구성 요소 폴더와 동일한 이름의 zip 파일로 압축합니다. 예를 들어 구성 요소 폴더 이름이 인 경우 GDK CLI는 HelloWorld 라는 zip 파일을 생성합니다. HelloWorld.zip

        참고

        Windows 디바이스에서 GDK CLI 버전 1.0.0을 사용하는 경우 구성 요소 폴더 및 zip 파일 이름에는 소문자만 포함되어야 합니다.

        GDK CLI는 구성 요소 폴더를 zip 파일로 압축할 때 다음 파일을 건너뛰습니다.

        • gdk-config.json 파일

        • 레시피 파일 (또는) recipe.json recipe.yaml

        • 빌드 폴더 (예: greengrass-build

      • mavenmvn clean package 명령을 실행하여 구성 요소 소스를 아티팩트에 빌드합니다. Java 구성 요소와 같이 Maven을 사용하는 구성 요소에 대해 이 옵션을 선택합니다.

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

      • gradlegradle build 명령을 실행하여 구성 요소의 소스를 아티팩트로 빌드합니다. Gradle을 사용하는 구성 요소에 대해 이 옵션을 선택합니다. 이 기능은 GDK CLI v1.1.0 이상에서 사용할 수 있습니다.

        gradle빌드 시스템은 Kotlin DSL을 빌드 파일로 지원합니다. 이 기능은 GDK CLI v1.2.0 이상에서 사용할 수 있습니다.

      • gradlewgradlew 명령을 실행하여 구성 요소 소스를 아티팩트로 빌드합니다. Gradle 래퍼를 사용하는 구성 요소에 대해 이 옵션을 선택합니다.

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

      • custom— 사용자 지정 명령을 실행하여 구성 요소의 소스를 레시피와 아티팩트로 빌드합니다. custom_build_command파라미터에 사용자 지정 명령을 지정합니다.

    6. 를 지정하는 custom build_system 경우 build 개체에 custom_build_command 를 추가합니다. 에서 custom_build_command 단일 문자열 또는 문자열 목록을 지정합니다. 여기서 각 문자열은 명령의 한 단어입니다. 예를 들어 C++ 구성 요소에 대한 사용자 지정 빌드 명령을 실행하려면 다음을 지정할 ["cmake", "--build", "build", "--config", "Release"] 수 있습니다.

    7. GDK CLI v1.1.0 이상을 사용하는 경우 인수를 지정하여 GDK CLI가 구성 요소의 아티팩트를 업로드하는 S3 버킷을 지정할 --bucket 수 있습니다. 이 인수를 지정하지 않으면 GDK bucket-region-accountId CLI는 이름이 인 S3 버킷에 업로드됩니다. 여기서 버킷과 지역은 지정된 gdk-config.json 값이고 accountID는 ID입니다. AWS 계정 버킷이 없는 경우 GDK CLI에서 버킷을 생성합니다.

      구성 요소의 게시 구성을 변경합니다. 다음을 따릅니다.

      1. 구성 요소 아티팩트를 호스팅하는 데 사용할 S3 버킷의 이름을 지정합니다.

      2. GDK CLI가 구성 요소를 게시하는 AWS 리전 위치를 지정합니다.

    이 단계를 완료하면 gdk-config.json 파일이 다음 예제와 비슷하게 보일 수 있습니다.

    { "component": { "com.example.PythonHelloWorld": { "author": "Amazon", "version": "NEXT_PATCH", "build": { "build_system" : "zip" }, "publish": { "bucket": "greengrass-component-artifacts", "region": "us-west-2" } } }, "gdk_version": "1.0.0" }
  7. 이름이 recipe.yaml or인 부품 레시피 파일을 recipe.json 업데이트하십시오. 다음을 따릅니다.

    1. zip빌드 시스템을 사용하는 템플릿 또는 커뮤니티 구성 요소를 다운로드한 경우 zip 아티팩트 이름이 구성 요소 폴더의 이름과 일치하는지 확인하십시오. GDK CLI는 구성 요소 폴더를 구성 요소 폴더와 이름이 같은 zip 파일로 압축합니다. 레시피에는 구성 요소 아티팩트 목록에 있는 zip 아티팩트 이름과 zip 아티팩트의 파일을 사용하는 라이프 사이클 스크립트에 있는 zip 아티팩트 이름이 포함됩니다. zip 파일 이름이 Lifecycle 구성 요소 폴더의 이름과 일치하도록 Artifacts 및 정의를 업데이트하십시오. 다음 부분 레시피 예제는 ArtifactsLifecycle 정의의 zip 파일 이름을 강조 표시합니다.

      JSON
      { ... "Manifests": [ { "Platform": { "os": "all" }, "Artifacts": [ { "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}" } } ] }
      YAML
      --- ... 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}"
    2. (선택 사항) 구성 요소 설명, 기본 구성, 아티팩트, 라이프사이클 스크립트 및 플랫폼 지원을 업데이트합니다. 자세한 설명은 AWS IoT Greengrass 컴포넌트 레시피 참조 섹션을 참조하세요.

    이 단계를 완료하면 레시피 파일이 다음 예제와 비슷해 보일 수 있습니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "{COMPONENT_NAME}", "ComponentVersion": "{COMPONENT_VERSION}", "ComponentDescription": "This is a simple Hello World component written in Python.", "ComponentPublisher": "{COMPONENT_AUTHOR}", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "World" } }, "Manifests": [ { "Platform": { "os": "all" }, "Artifacts": [ { "URI": "s3://{COMPONENT_NAME}/{COMPONENT_VERSION}/HelloWorld.zip", "Unarchive": "ZIP" } ], "Lifecycle": { "run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}" } } ] }
    YAML
    --- RecipeFormatVersion: "2020-01-25" ComponentName: "{COMPONENT_NAME}" ComponentVersion: "{COMPONENT_VERSION}" ComponentDescription: "This is a simple Hello World component written in Python." ComponentPublisher: "{COMPONENT_AUTHOR}" ComponentConfiguration: DefaultConfiguration: Message: "World" 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}"
  8. Greengrass 구성 요소를 개발하고 빌드합니다. 구성 요소 빌드 명령은 구성 요소 폴더의 greengrass-build 폴더에 레시피와 아티팩트를 생성합니다. 다음 명령을 실행합니다.

    gdk component build

구성 요소를 테스트할 준비가 되면 GDK CLI를 사용하여 서비스에 게시하십시오. AWS IoT Greengrass 그런 다음 Greengrass 코어 디바이스에 컴포넌트를 배포할 수 있습니다. 자세한 설명은 코어 디바이스에 배포할 구성 요소를 게시하세요. 섹션을 참조하세요.

구성 요소 생성 (셸 명령)

이 섹션의 지침에 따라 여러 구성 요소의 소스 코드와 아티팩트가 포함된 레시피 및 아티팩트 폴더를 만드십시오.

Greengrass 구성 요소를 개발하려면 (셸 명령)
  1. 레시피와 아티팩트를 위한 하위 폴더가 있는 컴포넌트 폴더를 만드세요. Greengrass 코어 디바이스에서 다음 명령을 실행하여 이러한 폴더를 생성하고 구성 요소 폴더로 변경합니다. ~/greengrassv2 또는 %USERPROFILE%\ greengrassv2를 로컬 개발에 사용할 폴더 경로로 바꾸십시오.

    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
  2. 텍스트 편집기를 사용하여 구성요소의 메타데이터, 매개변수, 종속성, 수명 주기 및 플랫폼 기능을 정의하는 레시피 파일을 만드십시오. 레시피 파일 이름에 구성 요소 버전을 포함하면 어떤 레시피가 어떤 구성 요소 버전을 반영하는지 식별할 수 있습니다. 레시피에 YAML 또는 JSON 형식을 선택할 수 있습니다.

    예를 들어 Linux 기반 시스템에서는 다음 명령을 실행하여 GNU nano를 사용하여 파일을 생성할 수 있습니다.

    JSON
    nano recipes/com.example.HelloWorld-1.0.0.json
    YAML
    nano recipes/com.example.HelloWorld-1.0.0.yaml
    참고

    AWS IoT Greengrass 구성 요소에 시맨틱 버전을 사용합니다. 시맨틱 버전은 메이저.마이너.패치 번호 시스템을 따릅니다. 예를 들어 버전은 구성 1.0.0 요소의 첫 번째 주요 릴리스를 나타냅니다. 자세한 내용은 시맨틱 버전 사양을 참조하십시오.

  3. 구성 요소의 레시피를 정의하십시오. 자세한 설명은 AWS IoT Greengrass 컴포넌트 레시피 참조 섹션을 참조하세요.

    레시피는 다음 Hello World 예제 레시피와 비슷할 수 있습니다.

    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}"

    이 레시피는 Hello World Python 스크립트를 실행합니다. 이 스크립트는 다음 예제 스크립트와 비슷할 수 있습니다.

    import sys message = "Hello, %s!" % sys.argv[1] # Print the message to stdout, which Greengrass saves in a log file. print(message)
  4. 개발할 구성 요소 버전을 위한 폴더를 생성합니다. 각 구성 요소 버전의 아티팩트를 식별할 수 있도록 각 구성 요소 버전의 아티팩트에 별도의 폴더를 사용하는 것이 좋습니다. 다음 명령을 실행합니다.

    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
    중요

    아티팩트 폴더 경로에는 다음 형식을 사용해야 합니다. 레시피에 지정한 구성 요소 이름과 버전을 포함하십시오.

    artifacts/componentName/componentVersion/
  5. 이전 단계에서 생성한 폴더에 구성 요소의 아티팩트를 생성합니다. 아티팩트에는 소프트웨어, 이미지 및 구성 요소가 사용하는 기타 바이너리가 포함될 수 있습니다.

    구성 요소가 준비되면 구성 요소를 테스트하십시오.