4단계: 기기의 구성 요소 개발 및 테스트 - AWS IoT Greengrass

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

4단계: 기기의 구성 요소 개발 및 테스트

구성 요소는 AWS IoT Greengrass 코어 기기에서 실행되는 소프트웨어 모듈입니다. 구성 요소를 사용하면 복잡한 애플리케이션을 하나의 Greengrass 코어 장치에서 다른 Greengrass 코어 장치로 재사용할 수 있는 개별 구성 요소로 만들고 관리할 수 있습니다. 모든 구성 요소는 레시피와 아티팩트로 구성됩니다.

  • 레시피

    모든 구성 요소에는 메타데이터를 정의하는 레시피 파일이 포함되어 있습니다. 레시피는 또한 구성 요소의 구성 매개 변수, 구성 요소 종속성, 수명 주기 및 플랫폼 호환성을 지정합니다. 구성 요소 수명 주기는 구성 요소를 설치, 실행 및 종료하는 명령을 정의합니다. 자세한 설명은 AWS IoT Greengrass 컴포넌트 레시피 참조 섹션을 참조하세요.

    레시피는 JSON 또는 YAML 형식으로 정의할 수 있습니다.

  • 아티팩트

    구성 요소에는 구성 요소 바이너리인 아티팩트가 여러 개 있을 수 있습니다. 아티팩트에는 스크립트, 컴파일된 코드, 정적 리소스 및 구성 요소가 사용하는 기타 모든 파일이 포함될 수 있습니다. 구성 요소는 구성 요소 종속성의 아티팩트를 사용할 수도 있습니다.

를 사용하면 AWS IoT Greengrass Greengrass CLI를 사용하여 클라우드와 상호 작용하지 않고도 Greengrass 코어 디바이스에서 로컬로 구성 요소를 개발하고 테스트할 수 있습니다. AWS 로컬 구성 요소를 완성하면 구성 요소 레시피와 아티팩트를 사용하여 AWS 클라우드의 AWS IoT Greengrass 서비스에 해당 구성 요소를 만든 다음 모든 Greengrass 코어 장치에 배포할 수 있습니다. 구성 요소에 대한 자세한 내용은 AWS IoT Greengrass구성 요소 개발를 참조하세요.

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

기기에서 Hello World 구성 요소를 개발하려면
  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. 다음 레시피를 파일에 붙여넣습니다.

    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 섹션에서는 기본값이 Message 인 매개변수를 정의합니다. worldManifests 섹션에서는 플랫폼에 대한 라이프사이클 지침 및 아티팩트 집합인 매니페스트를 정의합니다. 예를 들어 여러 매니페스트를 정의하여 다양한 플랫폼에 대해 서로 다른 설치 지침을 지정할 수 있습니다. 매니페스트에서 Lifecycle 섹션은 Greengrass 코어 디바이스에 Message 매개변수 값을 인수로 사용하여 Hello World 스크립트를 실행하도록 지시합니다.

  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. 텍스트 편집기를 사용하여 Hello World 구성 요소에 대한 Python 스크립트 아티팩트 파일을 만드십시오.

    예를 들어, 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)
  6. 로컬 AWS IoT Greengrass CLI를 사용하여 Greengrass 코어 디바이스의 구성 요소를 관리합니다.

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

    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 레시피를 사용하고 Python 스크립트를 사용하는 구성 요소를 추가합니다artifacts. --merge옵션은 지정한 구성 요소 및 버전을 추가하거나 업데이트합니다.

  7. AWS IoT Greengrass Core 소프트웨어는 구성 요소 프로세스의 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

    type 명령은 파일 내용을 터미널에 씁니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰하십시오.

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

    다음 예와 비슷한 메시지가 표시될 것입니다.

    Hello, world!
    참고

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

    Linux or Unix
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows Command Prompt (CMD)
    type C:\greengrass\v2\logs\greengrass.log

    type명령은 파일 내용을 터미널에 기록합니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰하십시오.

    PowerShell
    gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
  8. 로컬 구성 요소를 수정하여 코드를 반복하고 테스트하십시오. 텍스트 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)
  9. 다음 명령을 실행하여 구성 요소를 변경 내용으로 업데이트합니다.

    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 구성 요소를 업데이트합니다.

  10. 다음 명령을 실행하여 구성 요소를 다시 시작합니다. 구성 요소를 다시 시작하면 코어 기기는 최신 변경 내용을 사용합니다.

    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"
  11. 로그를 다시 확인하여 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

    type 명령은 파일 내용을 터미널에 기록합니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰하십시오.

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

    다음 예와 비슷한 메시지가 표시될 것입니다.

    Hello, world! Greetings from your first Greengrass component.
  12. 구성 요소의 구성 매개변수를 업데이트하여 다양한 구성을 테스트할 수 있습니다. 구성 요소를 배포할 때 구성 업데이트를 지정할 수 있습니다. 구성 업데이트는 코어 장치에서 구성 요소의 구성을 수정하는 방법을 정의합니다. 기본값으로 재설정할 구성 값과 코어 장치에 병합할 새 구성 값을 지정할 수 있습니다. 자세한 설명은 구성 요소 구성 업데이트 섹션을 참조하세요.

    다음을 따릅니다.

    1. 텍스트 편집기를 사용하여 구성 업데이트를 포함하는 hello-world-config-update.json 파일을 생성하십시오.

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

      nano hello-world-config-update.json
    2. 다음 JSON 객체를 복사하여 파일에 붙여넣습니다. 이 JSON 객체는 값을 Message 매개변수에 friend 병합하여 값을 업데이트하는 구성 업데이트를 정의합니다. 이 구성 업데이트에서는 재설정할 값을 지정하지 않습니다. 병합 업데이트는 기존 값을 대체하므로 Message 파라미터를 재설정할 필요가 없습니다.

      { "com.example.HelloWorld": { "MERGE": { "Message": "friend" } } }
    3. 다음 명령을 실행하여 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
    4. 로그를 다시 확인하여 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

      type 명령은 파일 내용을 터미널에 기록합니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰하십시오.

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

      다음 예와 비슷한 메시지가 표시될 것입니다.

      Hello, friend! Greetings from your first Greengrass component.
  13. 구성 요소 테스트를 마친 후 핵심 장치에서 해당 구성 요소를 제거합니다. 다음 명령을 실행합니다.

    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 클라우드 서비스에 업로드할 수 있습니다. 그런 다음 Greengrass 코어 디바이스에 컴포넌트를 배포할 수 있습니다.