스트림 관리자를 사용하는 사용자 지정 구성 요소 생성 - AWS IoT Greengrass

스트림 관리자를 사용하는 사용자 지정 구성 요소 생성

사용자 지정 Greengrass 구성 요소의 스트림 관리자를 사용하여 IoT 디바이스 데이터를 저장하고 처리하고 내보낼 수 있습니다. 이 섹션의 절차와 예제를 사용하여 스트림 관리자와 함께 작동하는 구성 요소 레시피, 아티팩트, 애플리케이션을 생성합니다. 구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.

스트림 관리자를 사용하는 구성 요소 레시피 정의

사용자 지정 구성 요소에서 스트림 관리자를 사용하려면 aws.greengrass.StreamManager 구성 요소를 종속성으로 정의해야 합니다. 스트림 관리자 SDK도 제공해야 합니다. 다음 태스크를 완료하여 원하는 언어로 스트림 관리자 SDK를 다운로드하고 사용하세요.

Java용 스트림 관리자 SDK는 구성 요소를 컴파일하는 데 사용할 수 있는 JAR 파일로 제공됩니다. 그런 다음 스트림 관리자 SDK가 포함된 애플리케이션 JAR을 생성하고, 애플리케이션 JAR을 구성 요소 아티팩트로 정의하고, 구성 요소 수명 주기에서 애플리케이션 JAR을 실행할 수 있습니다.

Java용 스트림 관리자 SDK를 사용하려면
  1. Java JAR용 스트림 관리자 SDK 파일을 다운로드합니다.

  2. 다음 중 하나를 수행하여 Java 애플리케이션과 스트림 관리자 SDK JAR 파일에서 구성 요소 아티팩트를 생성합니다.

    • 애플리케이션을 스트림 관리자 SDK JAR이 포함된 JAR 파일로 빌드하고 구성 요소 레시피에서 해당 JAR 파일을 실행합니다.

    • 스트림 관리자 SDK JAR을 구성 요소 아티팩트로 정의합니다. 구성 요소 레시피에서 애플리케이션을 실행할 때 해당 아티팩트를 클래스 경로에 추가합니다.

    구성 요소 레시피는 다음 예제와 유사할 수 있습니다. 이 구성 요소는 StreamManagerS3.jar에 스트림 관리자 SDK JAR이 포함된 StreamManagerS3.java 예제의 수정된 버전을 실행합니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.StreamManagerS3Java", "ComponentVersion": "1.0.0", "ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.StreamManager": { "VersionRequirement": "^2.0.0" } }, "Manifests": [ { "Lifecycle": { "run": "java -jar {artifacts:path}/StreamManagerS3.jar" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Java/1.0.0/StreamManagerS3.jar" } ] } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.StreamManagerS3Java ComponentVersion: 1.0.0 ComponentDescription: Uses stream manager to upload a file to an S3 bucket. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.StreamManager: VersionRequirement: "^2.0.0" Manifests: - Lifecycle: run: java -jar {artifacts:path}/StreamManagerS3.jar Artifacts: - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Java/1.0.0/StreamManagerS3.jar

    구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.

Python용 스트림 관리자 SDK는 구성 요소에 포함할 수 있는 소스 코드로 사용할 수 있습니다. 스트림 관리자 SDK의 ZIP 파일을 생성하고 ZIP 파일을 구성 요소 아티팩트로 정의한 다음 구성 요소 수명 주기에 SDK의 요구 사항을 설치합니다.

Python용 스트림 관리자 SDK를 사용하려면
  1. aws-greengrass-stream-manager-sdk-python 리포지토리를 복제하거나 다운로드합니다.

    git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-python.git
  2. Python용 스트림 관리자 SDK의 소스 코드를 포함하는 stream_manager 폴더를 포함한 ZIP 파일을 생성합니다. 이 ZIP 파일을 구성 요소 아티팩트로 제공하면 AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 설치할 때 압축을 해제합니다. 다음을 따릅니다.

    1. 이전 단계에서 복제하거나 다운로드한 리포지토리가 포함된 폴더를 엽니다.

      cd aws-greengrass-stream-manager-sdk-python
    2. stream_manager 폴더를 stream_manager_sdk.zip이라는 이름의 ZIP 파일로 압축합니다.

      Linux or Unix
      zip -rv stream_manager_sdk.zip stream_manager
      Windows Command Prompt (CMD)
      tar -acvf stream_manager_sdk.zip stream_manager
      PowerShell
      Compress-Archive stream_manager stream_manager_sdk.zip
    3. stream_manager_sdk.zip 파일에 stream_manager 폴더와 해당 콘텐츠가 포함되어 있는지 확인합니다. 다음 명령을 실행하여 ZIP 파일의 내용을 나열합니다.

      Linux or Unix
      unzip -l stream_manager_sdk.zip
      Windows Command Prompt (CMD)
      tar -tf stream_manager_sdk.zip

      출력은 다음과 유사합니다.

      Archive: aws-greengrass-stream-manager-sdk-python/stream_manager.zip Length Date Time Name --------- ---------- ----- ---- 0 02-24-2021 20:45 stream_manager/ 913 02-24-2021 20:45 stream_manager/__init__.py 9719 02-24-2021 20:45 stream_manager/utilinternal.py 1412 02-24-2021 20:45 stream_manager/exceptions.py 1004 02-24-2021 20:45 stream_manager/util.py 0 02-24-2021 20:45 stream_manager/data/ 254463 02-24-2021 20:45 stream_manager/data/__init__.py 26515 02-24-2021 20:45 stream_manager/streammanagerclient.py --------- ------- 294026 8 files
  3. 스트림 관리자 SDK 아티팩트를 구성 요소의 아티팩트 폴더에 복사합니다. 구성 요소는 스트림 관리자 SDK ZIP 파일 외에도 SDK의 requirements.txt 파일을 사용하여 스트림 관리자 SDK의 종속성을 설치합니다. ~/greengrass-components를 로컬 개발에 사용하는 폴더의 경로로 바꿉니다.

    Linux or Unix
    cp {stream_manager_sdk.zip,requirements.txt} ~/greengrass-components/artifacts/com.example.StreamManagerS3Python/1.0.0/
    Windows Command Prompt (CMD)
    robocopy . %USERPROFILE%\greengrass-components\artifacts\com.example.StreamManagerS3Python\1.0.0 stream_manager_sdk.zip robocopy . %USERPROFILE%\greengrass-components\artifacts\com.example.StreamManagerS3Python\1.0.0 requirements.txt
    PowerShell
    cp .\stream_manager_sdk.zip,.\requirements.txt ~\greengrass-components\artifacts\com.example.StreamManagerS3Python\1.0.0\
  4. 구성 요소 레시피를 생성합니다. 레시피에서 다음을 수행합니다.

    1. stream_manager_sdk.ziprequirements.txt를 아티팩트로 정의합니다.

    2. Python 애플리케이션을 아티팩트로 정의합니다.

    3. 설치 수명 주기에서 requirements.txt의 스트림 관리자 SDK 요구 사항을 설치합니다.

    4. 실행 수명 주기에서 스트림 관리자 SDK를 PYTHONPATH에 추가하고 Python 애플리케이션을 실행합니다.

    구성 요소 레시피는 다음 예제와 유사할 수 있습니다. 이 구성 요소는 stream_manager_s3.py 예제를 실행합니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.StreamManagerS3Python", "ComponentVersion": "1.0.0", "ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.StreamManager": { "VersionRequirement": "^2.0.0" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": "pip3 install --user -r {artifacts:path}/requirements.txt", "run": "export PYTHONPATH=$PYTHONPATH:{artifacts:decompressedPath}/stream_manager_sdk; python3 {artifacts:path}/stream_manager_s3.py" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip", "Unarchive": "ZIP" }, { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py" }, { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt" } ] }, { "Platform": { "os": "windows" }, "Lifecycle": { "install": "pip3 install --user -r {artifacts:path}/requirements.txt", "run": "set \"PYTHONPATH=%PYTHONPATH%;{artifacts:decompressedPath}/stream_manager_sdk\" & py -3 {artifacts:path}/stream_manager_s3.py" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip", "Unarchive": "ZIP" }, { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py" }, { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt" } ] } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.StreamManagerS3Python ComponentVersion: 1.0.0 ComponentDescription: Uses stream manager to upload a file to an S3 bucket. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.StreamManager: VersionRequirement: "^2.0.0" Manifests: - Platform: os: linux Lifecycle: install: pip3 install --user -r {artifacts:path}/requirements.txt run: | export PYTHONPATH=$PYTHONPATH:{artifacts:decompressedPath}/stream_manager_sdk python3 {artifacts:path}/stream_manager_s3.py Artifacts: - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip Unarchive: ZIP - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt - Platform: os: windows Lifecycle: install: pip3 install --user -r {artifacts:path}/requirements.txt run: | set "PYTHONPATH=%PYTHONPATH%;{artifacts:decompressedPath}/stream_manager_sdk" py -3 {artifacts:path}/stream_manager_s3.py Artifacts: - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip Unarchive: ZIP - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt

    구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.

JavaScript용 스트림 관리자 SDK는 구성 요소에 포함할 수 있는 소스 코드로 사용할 수 있습니다. 스트림 관리자 SDK의 ZIP 파일을 생성하고, ZIP 파일을 구성 요소 아티팩트로 정의한 다음, 구성 요소 수명 주기에 SDK를 설치합니다.

JavaScript용 스트림 관리자 SDK를 사용하려면
  1. aws-greengrass-stream-manager-sdk-js 리포지토리를 복제하거나 다운로드합니다.

    git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-js.git
  2. JavaScript용 스트림 관리자 SDK의 소스 코드를 포함하는 aws-greengrass-stream-manager-sdk 폴더를 포함한 ZIP 파일을 생성합니다. 이 ZIP 파일을 구성 요소 아티팩트로 제공하면 AWS IoT Greengrass 코어 소프트웨어가 구성 요소를 설치할 때 압축을 해제합니다. 다음을 따릅니다.

    1. 이전 단계에서 복제하거나 다운로드한 리포지토리가 포함된 폴더를 엽니다.

      cd aws-greengrass-stream-manager-sdk-js
    2. aws-greengrass-stream-manager-sdk 폴더를 stream-manager-sdk.zip이라는 이름의 ZIP 파일로 압축합니다.

      Linux or Unix
      zip -rv stream-manager-sdk.zip aws-greengrass-stream-manager-sdk
      Windows Command Prompt (CMD)
      tar -acvf stream-manager-sdk.zip aws-greengrass-stream-manager-sdk
      PowerShell
      Compress-Archive aws-greengrass-stream-manager-sdk stream-manager-sdk.zip
    3. stream-manager-sdk.zip 파일에 aws-greengrass-stream-manager-sdk 폴더와 해당 콘텐츠가 포함되어 있는지 확인합니다. 다음 명령을 실행하여 ZIP 파일의 내용을 나열합니다.

      Linux or Unix
      unzip -l stream-manager-sdk.zip
      Windows Command Prompt (CMD)
      tar -tf stream-manager-sdk.zip

      출력은 다음과 유사합니다.

      Archive: stream-manager-sdk.zip Length Date Time Name --------- ---------- ----- ---- 0 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/ 369 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/package.json 1017 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/util.js 8374 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/utilInternal.js 1937 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/exceptions.js 0 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/data/ 353343 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/data/index.js 22599 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/client.js 216 02-24-2021 22:36 aws-greengrass-stream-manager-sdk/index.js --------- ------- 387855 9 files
  3. 스트림 관리자 SDK 아티팩트를 구성 요소의 아티팩트 폴더에 복사합니다. ~/greengrass-components를 로컬 개발에 사용하는 폴더의 경로로 바꿉니다.

    Linux or Unix
    cp stream-manager-sdk.zip ~/greengrass-components/artifacts/com.example.StreamManagerS3JS/1.0.0/
    Windows Command Prompt (CMD)
    robocopy . %USERPROFILE%\greengrass-components\artifacts\com.example.StreamManagerS3JS\1.0.0 stream-manager-sdk.zip
    PowerShell
    cp .\stream-manager-sdk.zip ~\greengrass-components\artifacts\com.example.StreamManagerS3JS\1.0.0\
  4. 구성 요소 레시피를 생성합니다. 레시피에서 다음을 수행합니다.

    1. stream-manager-sdk.zip을 아티팩트로 정의합니다.

    2. JavaScript 애플리케이션을 아티팩트로 정의합니다.

    3. 설치 수명 주기에서 stream-manager-sdk.zip 아티팩트의 스트림 관리자 SDK를 설치합니다. 이 npm install 명령은 스트림 관리자 SDK와 해당 종속 항목을 포함한 node_modules 폴더를 생성합니다.

    4. 실행 수명 주기에서 node_modules 폴더를 NODE_PATH에 추가하고 JavaScript 애플리케이션을 실행합니다.

    구성 요소 레시피는 다음 예제와 유사할 수 있습니다. 이 구성 요소는 StreamManagerS3 예제를 실행합니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.StreamManagerS3JS", "ComponentVersion": "1.0.0", "ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.StreamManager": { "VersionRequirement": "^2.0.0" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": "npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk", "run": "export NODE_PATH=$NODE_PATH:{work:path}/node_modules; node {artifacts:path}/index.js" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip", "Unarchive": "ZIP" }, { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js" } ] }, { "Platform": { "os": "windows" }, "Lifecycle": { "install": "npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk", "run": "set \"NODE_PATH=%NODE_PATH%;{work:path}/node_modules\" & node {artifacts:path}/index.js" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip", "Unarchive": "ZIP" }, { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js" } ] } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.StreamManagerS3JS ComponentVersion: 1.0.0 ComponentDescription: Uses stream manager to upload a file to an S3 bucket. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.StreamManager: VersionRequirement: "^2.0.0" Manifests: - Platform: os: linux Lifecycle: install: npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk run: | export NODE_PATH=$NODE_PATH:{work:path}/node_modules node {artifacts:path}/index.js Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip Unarchive: ZIP - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js - Platform: os: windows Lifecycle: install: npm install {artifacts:decompressedPath}/stream-manager-sdk/aws-greengrass-stream-manager-sdk run: | set "NODE_PATH=%NODE_PATH%;{work:path}/node_modules" node {artifacts:path}/index.js Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/stream-manager-sdk.zip Unarchive: ZIP - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3JS/1.0.0/index.js

    구성 요소 개발 및 테스트 방법에 대한 자세한 내용은 AWS IoT Greengrass 구성 요소 생성 섹션을 참조하세요.

애플리케이션 코드에서 스트림 관리자에 연결

애플리케이션의 스트림 관리자에 연결하려면 스트림 관리자 SDK에서 StreamManagerClient의 인스턴스를 생성합니다. 이 클라이언트는 기본 포트 8088의 스트림 관리자 구성 요소 또는 지정한 포트에 연결합니다. 인스턴스를 생성한 후 StreamManagerClient를 사용하는 방법에 대한 자세한 내용은 StreamManagerClient를 사용하여 스트림 작업 섹션을 참조하세요.

예: 기본 포트를 사용하여 스트림 관리자에 연결
Java
import com.amazonaws.greengrass.streammanager.client.StreamManagerClient; public class MyStreamManagerComponent { void connectToStreamManagerWithDefaultPort() { StreamManagerClient client = StreamManagerClientFactory.standard().build(); // Use the client. } }
Python
from stream_manager import ( StreamManagerClient ) def connect_to_stream_manager_with_default_port(): client = StreamManagerClient() # Use the client.
JavaScript
const { StreamManagerClient } = require('aws-greengrass-stream-manager-sdk'); function connectToStreamManagerWithDefaultPort() { const client = new StreamManagerClient(); // Use the client. }
예: 기본값이 아닌 포트를 사용하여 스트림 관리자에 연결

기본 포트가 아닌 포트로 스트림 관리자를 구성하는 경우 프로세스 간 통신을 사용하여 구성 요소 구성에서 포트를 검색해야 합니다.

참고

port 구성 파라미터에는 스트림 관리자를 배포할 때 STREAM_MANAGER_SERVER_PORT에서 지정하는 값이 포함되어 있습니다.

Java
void connectToStreamManagerWithCustomPort() { EventStreamRPCConnection eventStreamRpcConnection = IPCUtils.getEventStreamRpcConnection(); GreengrassCoreIPCClient greengrassCoreIPCClient = new GreengrassCoreIPCClient(eventStreamRpcConnection); List<String> keyPath = new ArrayList<>(); keyPath.add("port"); GetConfigurationRequest request = new GetConfigurationRequest(); request.setComponentName("aws.greengrass.StreamManager"); request.setKeyPath(keyPath); GetConfigurationResponse response = greengrassCoreIPCClient.getConfiguration(request, Optional.empty()).getResponse().get(); String port = response.getValue().get("port").toString(); System.out.print("Stream Manager is running on port: " + port); final StreamManagerClientConfig config = StreamManagerClientConfig.builder() .serverInfo(StreamManagerServerInfo.builder().port(Integer.parseInt(port)).build()).build(); StreamManagerClient client = StreamManagerClientFactory.standard().withClientConfig(config).build(); // Use the client. }
Python
import awsiot.greengrasscoreipc from awsiot.greengrasscoreipc.model import ( GetConfigurationRequest ) from stream_manager import ( StreamManagerClient ) TIMEOUT = 10 def connect_to_stream_manager_with_custom_port(): # Use IPC to get the port from the stream manager component configuration. ipc_client = awsiot.greengrasscoreipc.connect() request = GetConfigurationRequest() request.component_name = "aws.greengrass.StreamManager" request.key_path = ["port"] operation = ipc_client.new_get_configuration() operation.activate(request) future_response = operation.get_response() response = future_response.result(TIMEOUT) stream_manager_port = str(response.value["port"]) # Use port to create a stream manager client. stream_client = StreamManagerClient(port=stream_manager_port) # Use the client.