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

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

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

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

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

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

Java용 스트림 관리자 SDK는 구성 요소를 컴파일하는 데 사용할 수 있는 JAR 파일로 제공됩니다. 그런 다음 Stream Manager SDK가 포함된 응용 프로그램 JAR을 만들고 응용 프로그램 JAR을 구성 요소 아티팩트로 정의한 다음 구성 요소 수명 주기에서 응용 프로그램 JAR을 실행할 수 있습니다.

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

  2. Java 애플리케이션과 스트림 관리자 SDK JAR 파일에서 구성 요소 아티팩트를 만들려면 다음 중 하나를 수행하십시오.

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

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

    구성 요소 레시피는 다음 예제와 같을 수 있습니다. 이 구성 요소는 스트림 관리자 SDK JAR이 StreamManagerS3.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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Java/1.0.0/StreamManagerS3.jar

    구성 요소를 개발하고 테스트하는 방법에 대한 자세한 내용은 을 참조하십시오AWS IoT Greengrass 구성 요소 생성.

Python용 스트림 관리자 SDK는 구성 요소에 포함할 수 있는 소스 코드로 사용할 수 있습니다. Stream Manager 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 Core 소프트웨어가 압축을 푸는 구성 요소 아티팩트로 제공할 수 있습니다. 다음을 따릅니다.

    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. Stream Manager SDK 아티팩트를 구성 요소의 아티팩트 폴더에 복사합니다. 구성 요소는 스트림 관리자 SDK ZIP 파일 외에도 SDK의 파일을 사용하여 스트림 관리자 SDK의 requirements.txt 종속 항목을 설치합니다. ~/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.zip및 를 requirements.txt 아티팩트로 정의합니다.

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

    3. 설치 라이프사이클에서 Stream Manager SDK 요구 사항을 에서 설치하십시오. requirements.txt

    4. 실행 라이프사이클에서 스트림 관리자 SDK를 PYTHONPATH Python 애플리케이션에 추가하고 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://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip", "Unarchive": "ZIP" }, { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py" }, { "URI": "s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip", "Unarchive": "ZIP" }, { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py" }, { "URI": "s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip Unarchive: ZIP - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py - URI: s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip Unarchive: ZIP - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt

    구성 요소를 개발하고 테스트하는 방법에 대한 자세한 내용은 을 참조하십시오AWS IoT Greengrass 구성 요소 생성.

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

스트림 관리자 SDK를 사용하려면 JavaScript
  1. aws-greengrass-stream-manager-sdk-js 저장소를 복제하거나 다운로드하십시오.

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

    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. Stream Manager 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를 설치합니다. stream-manager-sdk.zipnpm install 명령어는 Stream Manager 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://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" } ] } ] }
    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 구성 요소 생성.

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

애플리케이션의 스트림 관리자에 연결하려면 Stream Manager StreamManagerClient SDK에서 인스턴스를 생성하십시오. 이 클라이언트는 기본 포트 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.