Erstellen Sie benutzerdefinierte Komponenten, die den Stream-Manager verwenden - AWS IoT Greengrass

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen Sie benutzerdefinierte Komponenten, die den Stream-Manager verwenden

Verwenden Sie Stream Manager in benutzerdefinierten Greengrass-Komponenten, um IoT-Gerätedaten zu speichern, zu verarbeiten und zu exportieren. Verwenden Sie die Verfahren und Beispiele in diesem Abschnitt, um Komponentenrezepte, Artefakte und Anwendungen zu erstellen, die mit dem Stream Manager funktionieren. Weitere Informationen zum Entwickeln und Testen von Komponenten finden Sie unterErstellen von AWS IoT Greengrass Komponenten.

Definieren Sie Komponentenrezepte, die den Stream-Manager verwenden

Um den Stream-Manager in einer benutzerdefinierten Komponente zu verwenden, müssen Sie die aws.greengrass.StreamManager Komponente als Abhängigkeit definieren. Sie müssen auch den Stream Manager bereitstellenSDK. Führen Sie die folgenden Aufgaben aus, um den Stream Manager SDK in der Sprache Ihrer Wahl herunterzuladen und zu verwenden.

Der Stream Manager SDK für Java ist als JAR Datei verfügbar, mit der Sie Ihre Komponente kompilieren können. Anschließend können Sie eine Anwendung erstellenJAR, die den Stream Manager enthältSDK, die Anwendung JAR als Komponentenartefakt definieren und die Anwendung JAR im Komponentenlebenszyklus ausführen.

Um den Stream Manager SDK für Java zu verwenden
  1. Laden Sie die Stream JAR Manager-Datei SDK für Java herunter.

  2. Gehen Sie wie folgt vor, um Komponentenartefakte aus Ihrer Java-Anwendung und der Stream SDK JAR Manager-Datei zu erstellen:

    • Erstellen Sie Ihre Anwendung als JAR Datei, die den Stream Manager enthält SDKJAR, und führen Sie diese JAR Datei in Ihrem Komponentenrezept aus.

    • Definieren Sie den Stream Manager SDK JAR als Komponentenartefakt. Fügen Sie dieses Artefakt dem Klassenpfad hinzu, wenn Sie Ihre Anwendung in Ihrem Komponentenrezept ausführen.

    Ihr Komponentenrezept könnte wie das folgende Beispiel aussehen. Diese Komponente führt eine modifizierte Version des Beispiels StreamManagerS3.java aus, das den Stream Manager StreamManagerS3.jar enthält 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

    Weitere Informationen zum Entwickeln und Testen von Komponenten finden Sie unterErstellen von AWS IoT Greengrass Komponenten.

Der Stream Manager SDK für Python ist als Quellcode verfügbar, den Sie in Ihre Komponente aufnehmen können. Erstellen Sie eine ZIP Datei des Stream ManagersSDK, definieren Sie die ZIP Datei als Komponentenartefakt und installieren Sie die SDK Anforderungen im Komponentenlebenszyklus.

Um den Stream Manager SDK für Python zu verwenden
  1. Klonen Sie das aws-greengrass-stream-manager-sdk-python-Repository oder laden Sie es herunter.

    git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-python.git
  2. Erstellen Sie eine ZIP Datei, die den stream_manager Ordner enthält, der den Quellcode des Stream Managers SDK für Python enthält. Sie können diese ZIP Datei als Komponentenartefakt bereitstellen, das die AWS IoT Greengrass Core-Software bei der Installation Ihrer Komponente entpackt. Gehen Sie wie folgt vor:

    1. Öffnen Sie den Ordner, der das Repository enthält, das Sie im vorherigen Schritt geklont oder heruntergeladen haben.

      cd aws-greengrass-stream-manager-sdk-python
    2. Komprimieren Sie den stream_manager Ordner in eine ZIP Datei mit dem Namenstream_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. Stellen Sie sicher, dass die stream_manager_sdk.zip Datei den stream_manager Ordner und seinen Inhalt enthält. Führen Sie den folgenden Befehl aus, um den Inhalt der ZIP Datei aufzulisten.

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

      Die Ausgabe sollte in etwa folgendermaßen aussehen:

      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. Kopieren Sie die Stream SDK Manager-Artefakte in den Artefaktordner Ihrer Komponente. Zusätzlich zur Stream SDK ZIP Manager-Datei verwendet Ihre Komponente die SDK requirements.txt s-Datei, um die Abhängigkeiten des Stream Managers zu installierenSDK. Ersetzen ~/greengrass-components mit dem Pfad zu dem Ordner, den Sie für die lokale Entwicklung verwenden.

    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. Erstellen Sie Ihr Komponentenrezept. Gehen Sie im Rezept wie folgt vor:

    1. Definieren Sie stream_manager_sdk.zip und requirements.txt als Artefakte.

    2. Definieren Sie Ihre Python-Anwendung als Artefakt.

    3. Installieren Sie im Installationszyklus die Stream SDK Manager-Anforderungen vonrequirements.txt.

    4. Fügen Sie im Run-Lebenszyklus den Stream Manager SDK an Ihre Python-Anwendung an PYTHONPATH und führen Sie sie aus.

    Ihr Komponentenrezept könnte wie das folgende Beispiel aussehen. Diese Komponente führt das Beispiel stream_manager_s3.py aus.

    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

    Weitere Informationen zum Entwickeln und Testen von Komponenten finden Sie unterErstellen von AWS IoT Greengrass Komponenten.

Der Stream Manager SDK für JavaScript ist als Quellcode verfügbar, den Sie in Ihre Komponente aufnehmen können. Erstellen Sie eine ZIP Datei des Stream ManagersSDK, definieren Sie die ZIP Datei als Komponentenartefakt und installieren Sie sie SDK im Komponentenlebenszyklus.

Um den Stream Manager SDK zu verwenden für JavaScript
  1. Klonen Sie das aws-greengrass-stream-manager-sdk-js-Repository oder laden Sie es herunter.

    git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-js.git
  2. Erstellen Sie eine ZIP Datei, die den aws-greengrass-stream-manager-sdk Ordner enthält, der den Quellcode des Stream Managers für enthält. SDK JavaScript Sie können diese ZIP Datei als Komponentenartefakt bereitstellen, das die AWS IoT Greengrass Core-Software bei der Installation Ihrer Komponente entpackt. Gehen Sie wie folgt vor:

    1. Öffnen Sie den Ordner, der das Repository enthält, das Sie im vorherigen Schritt geklont oder heruntergeladen haben.

      cd aws-greengrass-stream-manager-sdk-js
    2. Komprimieren Sie den aws-greengrass-stream-manager-sdk Ordner in eine ZIP Datei mit dem Namenstream-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. Stellen Sie sicher, dass die stream-manager-sdk.zip Datei den aws-greengrass-stream-manager-sdk Ordner und seinen Inhalt enthält. Führen Sie den folgenden Befehl aus, um den Inhalt der ZIP Datei aufzulisten.

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

      Die Ausgabe sollte in etwa folgendermaßen aussehen:

      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. Kopieren Sie das Stream SDK Manager-Artefakt in den Ordner Artifacts Ihrer Komponente. Ersetzen ~/greengrass-components mit dem Pfad zu dem Ordner, den Sie für die lokale Entwicklung verwenden.

    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. Erstellen Sie Ihr Komponentenrezept. Gehen Sie im Rezept wie folgt vor:

    1. Definiere stream-manager-sdk.zip als Artefakt.

    2. Definieren Sie Ihre JavaScript Anwendung als Artefakt.

    3. Installieren Sie im Installationszyklus den Stream Manager SDK vom stream-manager-sdk.zip Artefakt aus. npm installMit diesem Befehl wird ein node_modules Ordner erstellt, der den Stream Manager SDK und seine Abhängigkeiten enthält.

    4. Fügen Sie im Run-Lebenszyklus den node_modules Ordner an NODE_PATH und führen Sie Ihre JavaScript Anwendung aus.

    Ihr Komponentenrezept könnte wie das folgende Beispiel aussehen. Diese Komponente führt das StreamManagerS3-Beispiel aus.

    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

    Weitere Informationen zum Entwickeln und Testen von Komponenten finden Sie unterErstellen von AWS IoT Greengrass Komponenten.

Stellen Sie im Anwendungscode eine Connect zum Stream Manager her

Um eine Verbindung zum Stream Manager in Ihrer Anwendung herzustellen, erstellen Sie im Stream Manager eine Instanz StreamManagerClient vonSDK. Dieser Client stellt über seinen Standardport 8088 oder den von Ihnen angegebenen Port eine Verbindung zur Stream Manager-Komponente her. Weitere Informationen zur Verwendung StreamManagerClient nach dem Erstellen einer Instanz finden Sie unterVerwenden von StreamManagerClient für die Arbeit mit Streams.

Beispiel: Connect zum Stream-Manager mit Standardport herstellen
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. }
Beispiel: Connect zum Stream-Manager mit einem nicht standardmäßigen Port her

Wenn Sie den Stream-Manager mit einem anderen Port als dem Standardport konfigurieren, müssen Sie die Interprozesskommunikation verwenden, um den Port aus der Komponentenkonfiguration abzurufen.

Anmerkung

Der port Konfigurationsparameter enthält den Wert, den Sie STREAM_MANAGER_SERVER_PORT bei der Bereitstellung von Stream Manager angeben.

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.