ストリームマネージャーを使用するカスタムコンポーネントを作成する - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ストリームマネージャーを使用するカスタムコンポーネントを作成する

IoT デバイスデータを保存、処理、エクスポートするため、カスタム Greengrass コンポーネントのストリームマネージャーを使用します。このセクションの手順と例を使用して、ストリームマネージャーと連携するコンポーネントレシピ、アーティファクト、アプリケーションを作成します。コンポーネントを開発してテストする方法の詳細については、「AWS IoT Greengrass コンポーネントの作成」を参照してください。

ストリームマネージャーを使用するコンポーネントレシピの定義

カスタムコンポーネントでストリームマネージャーを使用するには、aws.greengrass.StreamManager コンポーネントを従属関係として定義する必要があります。ストリームマネージャー も指定する必要がありますSDK。選択した言語で Stream Manager をダウンロードして使用するSDKには、次のタスクを実行します。

Stream Manager SDK for Java は、コンポーネントのコンパイルに使用できるJARファイルとして使用できます。次に、Stream Manager JARを含むアプリケーションを作成しSDK、そのアプリケーションをコンポーネントアーティファクトJARとして定義し、コンポーネントのライフサイクルJARでアプリケーションを実行できます。

Stream Manager SDK for Java を使用するには
  1. Stream Manager SDK for Java JAR ファイル をダウンロードします。

  2. 次のいずれかを実行して、Java アプリケーションと Stream Manager SDK JAR ファイルからコンポーネントアーティファクトを作成します。

    • Stream Manager を含むJARファイルとしてアプリケーションを構築しJAR、コンポーネント recipe SDK でこのJARファイルを実行します。

    • ストリームマネージャーをコンポーネントアーティファクトSDKJARとして定義します。コンポーネントレシピでアプリケーションを実行するとき、そのアーティファクトをクラスパスに追加します。

    コンポーネントレシピは、次の例のようになります。このコンポーネントは StreamManagerS3.java の例の修正バージョンを実行します。 には Stream Manager StreamManagerS3.jarが含まれます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 コンポーネントの作成」を参照してください。

Stream Manager SDK for Python は、コンポーネントに含めることができるソースコードとして使用できます。Stream Manager のZIPファイルを作成しSDK、そのZIPファイルをコンポーネントアーティファクトとして定義し、コンポーネントのライフサイクルに SDKの要件をインストールします。

Stream Manager SDK for Python を使用するには
  1. aws-greengrass-stream-manager-sdk-python リポジトリのクローンを作成するか、ダウンロードします。

    git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-python.git
  2. Stream Manager SDK for Python のソースコードを含む 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ティファクトをコンポーネントのアーティファクトフォルダにコピーします。Stream Manager SDK ZIP ファイルに加えて、コンポーネントは の SDK requirements.txt ファイルを使用して Stream Manager の依存関係をインストールします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. インストールライフサイクルで、 から Stream Manager SDKの要件をインストールしますrequirements.txt

    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 コンポーネントの作成」を参照してください。

SDK の Stream Manager JavaScript は、コンポーネントに含めることができるソースコードとして使用できます。Stream Manager のZIPファイルを作成しSDK、そのZIPファイルをコンポーネントアーティファクトとして定義し、コンポーネントのライフサイクルSDKに をインストールします。

で Stream Manager を使用するには SDK JavaScript
  1. aws-greengrass-stream-manager-sdk-js リポジトリのクローンを作成するか、ダウンロードします。

    git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-js.git
  2. SDK 用の Stream Manager のソースコードを含む 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 フォルダを という名前の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アーティファクトをコンポーネントのアーティファクトフォルダにコピーします。置換 ~/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から 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 コンポーネントの作成」を参照してください。

アプリケーションコードでストリームマネージャーに接続

アプリケーションのストリームマネージャーに接続するには、ストリームマネージャー 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.