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

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

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

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

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

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

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

SDKJava용 스트림 관리자를 사용하려면
  1. SDKJava용 스트림 관리자 JAR 파일을 다운로드하십시오.

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

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

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

    구성 요소 레시피는 다음 예제와 같을 수 있습니다. 이 구성 요소는 스트림 관리자를 StreamManagerS3.jar 포함하는 StreamManagerS3.java 예제의 수정된 버전을 실행합니다 SDKJAR.

    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 구성 요소 생성.

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

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

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

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

      cd aws-greengrass-stream-manager-sdk-python
    2. stream_manager폴더를 이름이 지정된 ZIP stream_manager_sdk.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's requirements.txt 파일을 사용하여 스트림 관리자의 종속 항목을 설치합니다. SDK Replace ~/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 Python 애플리케이션에 추가하고 Python 애플리케이션을 실행합니다. PYTHONPATH

    구성 요소 레시피는 다음 예제와 같을 수 있습니다. 이 구성 요소는 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 구성 요소 생성.

의 스트림 관리자는 SDK 구성요소에 포함할 수 있는 소스 코드로 사용할 수 있습니다. JavaScript Stream Manager의 ZIP 파일을 만들고SDK, 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. 스트림 관리자의 소스 코드가 들어 있는 aws-greengrass-stream-manager-sdk 폴더를 포함하는 ZIP 파일을 생성하십시오. SDK JavaScript 이 ZIP 파일을 구성 요소 아티팩트로 제공할 수 있습니다. 구성 요소를 설치할 때 AWS IoT Greengrass Core 소프트웨어가 압축을 푸는 구성 요소 아티팩트입니다. 다음을 따릅니다.

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

      cd aws-greengrass-stream-manager-sdk-js
    2. aws-greengrass-stream-manager-sdk폴더를 이름이 지정된 ZIP stream-manager-sdk.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 아티팩트를 구성 요소의 아티팩트 폴더에 복사합니다. Replace ~/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. 설치 라이프사이클에서 SDK stream-manager-sdk.zip 아티팩트에서 Stream Manager를 설치합니다. 이 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.