Creación de componentes personalizados que usen el administrador de flujos
Utilice el administrador de flujos en componentes personalizados de Greengrass para almacenar, procesar y exportar datos de dispositivos IoT. Utilice los procedimientos y ejemplos de esta sección para crear recetas de componentes, artefactos y aplicaciones que funcionen con el administrador de flujos. Para obtener más información sobre cómo desarrollar y probar componentes, consulte Creación de componentes de AWS IoT Greengrass.
Definición de las recetas de componentes que utilizan el administrador de flujos
Para usar el administrador de flujos en un componente personalizado, debe definir el componente aws.greengrass.StreamManager
como una dependencia. También debe proporcionar el SDK del administrador de flujos. Complete las siguientes tareas para descargar y usar el SDK del administrador de flujos en el lenguaje que prefiera.
El SDK del administrador de flujos para Java está disponible como un archivo JAR que puede usar para compilar su componente. A continuación, puede crear un JAR de aplicación que incluya el SDK del administrador de flujos, definir el JAR de aplicación como un artefacto de componente y ejecutar el JAR de aplicación en el ciclo de vida del componente.
Uso del SDK del administrador de flujos para Java
-
Descargue el archivo JAR del SDK del administrador de flujos para Java.
-
Realice una de las siguientes acciones para crear artefactos componentes a partir de su aplicación Java y el archivo JAR del SDK del administrador de flujos:
-
Cree su aplicación como un archivo JAR que incluya el JAR del SDK del administrador de flujos y ejecute este archivo JAR en la receta de su componente.
-
Defina el JAR del SDK del administrador de flujos como un artefacto componente. Agregue ese artefacto a la ruta de clases cuando ejecute su aplicación en la receta de su componente.
La receta de su componente podría parecerse al siguiente ejemplo. Este componente ejecuta una versión modificada del ejemplo de StreamManagerS3.java, en el que StreamManagerS3.jar
incluye el JAR del SDK del administrador de flujos.
- 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
Para obtener más información sobre cómo desarrollar y probar componentes, consulte Creación de componentes de AWS IoT Greengrass.
El SDK del administrador de flujos para Python está disponible como código de origen que puede incluir en su componente. Cree un archivo ZIP del SDK del administrador de flujo, defina el archivo ZIP como un artefacto de un componente e instale los requisitos del SDK en el ciclo de vida del componente.
Uso del SDK del administrador de flujos para Python
-
Clone o descargue el repositorio aws-greengrass-stream-manager-sdk-python.
git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-python.git
-
Cree un archivo ZIP que contenga la carpeta stream_manager
, que incluye el código de origen del SDK del administrador de flujos para Python. Puede proporcionar este archivo ZIP como un artefacto componente que el software AWS IoT Greengrass Core descomprimirá cuando instale su componente. Haga lo siguiente:
-
Abra la carpeta que contiene el repositorio que clonó o descargó en el paso anterior.
cd aws-greengrass-stream-manager-sdk-python
-
Comprima la carpeta stream_manager
en un archivo ZIP llamado 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
-
Compruebe que el archivo stream_manager_sdk.zip
contiene la carpeta stream_manager
y su contenido. Ejecute el siguiente comando para hacer una lista del contenido del archivo ZIP.
- Linux or Unix
-
unzip -l stream_manager_sdk.zip
- Windows Command Prompt (CMD)
-
tar -tf stream_manager_sdk.zip
El resultado de debería parecerse al siguiente.
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
-
Copie los artefactos del SDK del administrador de flujos a la carpeta de artefactos de su componente. Además del archivo ZIP del SDK del administrador de flujos, su componente utiliza el archivo requirements.txt
del SDK para instalar las dependencias del SDK del administrador de flujos. Sustituya ~/greengrass-components
por la ruta a la carpeta que utiliza para el desarrollo local.
- 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\
-
Cree su receta de componentes. En la receta, haga lo siguiente:
-
Defina stream_manager_sdk.zip
y requirements.txt
como artefactos.
-
Defina su aplicación de Python como un artefacto.
-
En el ciclo de vida de la instalación, instale los requisitos del SDK del administrador de flujos desde requirements.txt
.
-
En el ciclo de vida de ejecución, agregue el SDK del administrador de flujos a PYTHONPATH
y ejecute la aplicación Python.
La receta de su componente podría parecerse al siguiente ejemplo. Este componente ejecuta el ejemplo de 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
Para obtener más información sobre cómo desarrollar y probar componentes, consulte Creación de componentes de AWS IoT Greengrass.
El SDK del administrador de flujos para JavaScript está disponible como código de origen que puede incluir en su componente. Cree un archivo ZIP del SDK del administrador de flujo, defina el archivo ZIP como un artefacto de un componente e instale el SDK en el ciclo de vida del componente.
Uso del SDK del administrador de flujos para JavaScript
-
Clone o descargue el repositorio aws-greengrass-stream-manager-sdk-js.
git clone git@github.com:aws-greengrass/aws-greengrass-stream-manager-sdk-js.git
-
Cree un archivo ZIP que contenga la carpeta aws-greengrass-stream-manager-sdk
, que incluye el código de origen del SDK del administrador de flujos para JavaScript. Puede proporcionar este archivo ZIP como un artefacto componente que el software AWS IoT Greengrass Core descomprimirá cuando instale su componente. Haga lo siguiente:
-
Abra la carpeta que contiene el repositorio que clonó o descargó en el paso anterior.
cd aws-greengrass-stream-manager-sdk-js
-
Comprima la carpeta aws-greengrass-stream-manager-sdk
en un archivo ZIP llamado 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
-
Compruebe que el archivo stream-manager-sdk.zip
contiene la carpeta aws-greengrass-stream-manager-sdk
y su contenido. Ejecute el siguiente comando para hacer una lista del contenido del archivo ZIP.
- Linux or Unix
-
unzip -l stream-manager-sdk.zip
- Windows Command Prompt (CMD)
-
tar -tf stream-manager-sdk.zip
El resultado de debería parecerse al siguiente.
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
-
Copie el artefacto del SDK del administrador de flujos a la carpeta de artefactos de su componente. Sustituya ~/greengrass-components
por la ruta a la carpeta que utiliza para el desarrollo local.
- 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\
-
Cree su receta de componentes. En la receta, haga lo siguiente:
-
Defina stream-manager-sdk.zip
como un artefacto.
-
Defina su aplicación de JavaScript como un artefacto.
-
En el ciclo de vida de la instalación, instale el SDK del administrador de flujos desde el artefacto stream-manager-sdk.zip
. Este comando npm
install
crea una carpeta node_modules
que contiene el SDK del administrador de flujos y sus dependencias.
-
En el ciclo de vida de ejecución, agregue la carpeta node_modules
a NODE_PATH
y ejecute la aplicación JavaScript.
La receta de su componente podría parecerse al siguiente ejemplo. Este componente ejecuta el ejemplo de 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
Para obtener más información sobre cómo desarrollar y probar componentes, consulte Creación de componentes de AWS IoT Greengrass.
Conexión al administrador de flujos en el código de la aplicación
Para conectarse al administrador de flujos de su aplicación, cree una instancia StreamManagerClient
desde el SDK del administrador de flujos. Este cliente se conecta al componente del administrador de flujos en su puerto predeterminado 8088 o en el puerto que especifique. Para obtener más información sobre cómo usar StreamManagerClient
después de crear una instancia, consulte Utilizar StreamManagerClient para trabajar con secuencias.
ejemplo Ejemplo: conectarse al administrador de flujos con el puerto predeterminado
- 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.
}
ejemplo Ejemplo: conectarse al administrador de flujos con un puerto no predeterminado
Si configura el administrador de flujos con un puerto distinto del predeterminado, debe utilizar la comunicación entre procesos para recuperar el puerto de la configuración del componente.
El parámetro port
de configuración contiene el valor que se especifica en STREAM_MANAGER_SERVER_PORT
al implementar el administrador de flujos.
- 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.