Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Úselo SDK para dispositivos con AWS IoT para comunicarse con el núcleo de Greengrass, otros componentes y AWS IoT Core
Los componentes que se ejecutan en su dispositivo principal pueden utilizar la biblioteca AWS IoT Greengrass Core interprocess communication (IPC) del SDK para dispositivos con AWS IoT para comunicarse con el AWS IoT Greengrass núcleo y otros componentes de Greengrass. Para desarrollar y ejecutar los componentes personalizados que se utilizanIPC, debe utilizarlos SDK para dispositivos con AWS IoT para conectarse al IPC servicio AWS IoT Greengrass Core y realizar IPC las operaciones.
La IPC interfaz admite dos tipos de operaciones:
-
Solicitud/respuesta
Los componentes envían una solicitud al IPC servicio y reciben una respuesta que contiene el resultado de la solicitud.
-
Suscripción
Los componentes envían una solicitud de suscripción al IPC servicio y esperan recibir un flujo de mensajes de eventos como respuesta. Los componentes proporcionan un gestor de suscripciones que gestiona los mensajes de eventos, los errores y el cierre de la transmisión. SDK para dispositivos con AWS IoT Incluye una interfaz de controlador con la respuesta y los tipos de eventos correctos para cada IPC operación. Para obtener más información, consulte Suscríbase a las transmisiones de IPC eventos.
Temas
- IPCversiones de cliente
- Compatible con SDKs la comunicación entre procesos
- Conéctese al IPC servicio AWS IoT Greengrass principal
- Autorice a los componentes a realizar operaciones IPC
- Suscríbase a las transmisiones de IPC eventos
- IPCmejores prácticas
- Publicar/suscribir mensajes locales
- Publicar/suscribir mensajes AWS IoT Core MQTT
- Interactúe con el ciclo de vida del componente
- Interactúa con la configuración de los componentes
- Recuperar valores secretos
- Interactúa con las sombras locales
- Gestione las implementaciones y los componentes locales
- Autenticar y autorizar los dispositivos cliente
IPCversiones de cliente
En versiones posteriores de Java y PythonSDKs, AWS IoT Greengrass proporciona una versión mejorada del IPC cliente, denominada IPC cliente V2. IPCcliente V2:
-
Reduce la cantidad de código que hay que escribir para utilizar IPC las operaciones y ayuda a evitar los errores habituales que pueden producirse con el IPC cliente V1.
-
Realiza llamadas a los controladores de suscripciones en un hilo independiente, por lo que ahora puede ejecutar código de bloqueo, incluidas las llamadas a IPC funciones adicionales, en las devoluciones de llamadas a los controladores de suscripciones. IPCel cliente V1 utiliza el mismo hilo para comunicarse con el IPC servidor y para llamar a los gestores de suscripciones.
-
Permite llamar a las operaciones de suscripción mediante expresiones Lambda (Java) o funciones (Python). IPCel cliente V1 requiere que defina las clases de controladores de suscripciones.
-
Proporciona versiones síncronas y asíncronas de cada operación. IPC IPCel cliente V1 solo proporciona versiones asíncronas de cada operación.
Le recomendamos que utilice el IPC cliente V2 para aprovechar estas mejoras. Sin embargo, muchos ejemplos de esta documentación y de algunos contenidos en línea muestran únicamente cómo utilizar el IPC cliente V1. Puede utilizar los siguientes ejemplos y tutoriales para ver ejemplos de componentes que utilizan el IPC cliente V2:
Actualmente, la versión 2 SDK para dispositivos con AWS IoT para C++ solo es compatible con el IPC cliente V1.
Compatible con SDKs la comunicación entre procesos
IPCLas bibliotecas AWS IoT Greengrass principales se incluyen en las siguientes SDK para dispositivos con AWS IoT versiones.
SDK | Versión mínima | Uso |
---|---|---|
v1.6.0 |
Consulte SDK para dispositivos con AWS IoT Úselo para Java v2 (IPCcliente V2) |
|
v1.9.0 |
Consulte Uso SDK para dispositivos con AWS IoT para Python v2 (IPCcliente V2) |
|
v1.17.0 |
Consulte Úselo SDK para dispositivos con AWS IoT para C++ v2 |
|
v1.12.0 |
Consulte Úselo SDK para dispositivos con AWS IoT para la JavaScript versión 2 (IPCcliente V1) |
Conéctese al IPC servicio AWS IoT Greengrass principal
Para utilizar la comunicación entre procesos en su componente personalizado, debe crear una conexión a un socket de IPC servidor que ejecute el software AWS IoT Greengrass Core. Realice las siguientes tareas para descargarlo y usarlo SDK para dispositivos con AWS IoT en el idioma que prefiera.
Para usar la versión 2 SDK para dispositivos con AWS IoT para Java (IPCcliente V2)
-
Descargue la versión SDK para dispositivos con AWS IoT para Java v2
(v1.6.0 o posterior). -
Realice una de las siguientes acciones para ejecutar el código personalizado en el componente:
-
Cree el componente como un JAR archivo que incluya la SDK para dispositivos con AWS IoT receta del componente y ejecútelo JAR en ella.
-
Defina el SDK para dispositivos con AWS IoT JAR como un artefacto de componente y añada ese artefacto a la ruta de clases cuando ejecute la aplicación en la receta de su componente.
-
-
Usa el siguiente código para crear el cliente. IPC
try (GreengrassCoreIPCClientV2 ipcClient = GreengrassCoreIPCClientV2.builder().build()) { // Use client. } catch (Exception e) { LOGGER.log(Level.SEVERE, "Exception occurred when using IPC.", e); System.exit(1); }
Para usar SDK para dispositivos con AWS IoT para Python v2 (IPCcliente V2)
-
Descargue el SDK para dispositivos con AWS IoT para Python
(v1.9.0 o posterior). -
Añada los pasos SDK de instalación
al ciclo de vida de la instalación en la receta de su componente. -
Cree una conexión con el IPC servicio AWS IoT Greengrass principal. Use el siguiente código para crear el IPC cliente.
from awsiot.greengrasscoreipc.clientv2 import GreengrassCoreIPCClientV2 try: ipc_client = GreengrassCoreIPCClientV2() # Use IPC client. except Exception: print('Exception occurred when using IPC.', file=sys.stderr) traceback.print_exc() exit(1)
Para compilar la SDK para dispositivos con AWS IoT versión 2 para C++, un dispositivo debe tener las siguientes herramientas:
-
C++ 1.1 o posterior
-
CMake3.1 o posterior
-
Uno de los siguientes compiladores:
-
GCC4.8 o posterior
-
Clang 3.9 o posterior
-
MSVC2015 o posterior
-
Para usar la versión 2 SDK para dispositivos con AWS IoT para C++
-
Descargue la versión SDK para dispositivos con AWS IoT para C++ (
v1.17.0 o posterior). -
Siga las instrucciones de instalación incluidas en README para compilar la
versión 2 para C++ a SDK para dispositivos con AWS IoT partir del código fuente. -
En la herramienta de compilación de C++, vincula la IPC biblioteca Greengrass que creaste en el paso anterior.
AWS::GreengrassIpc-cpp
En el siguienteCMakeLists.txt
ejemplo, se vincula la IPC biblioteca de Greengrass a un proyecto con el que se crea. CMakecmake_minimum_required(VERSION 3.1) project (greengrassv2_pubsub_subscriber) file(GLOB MAIN_SRC "*.h" "*.cpp" ) add_executable(${PROJECT_NAME} ${MAIN_SRC}) set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX CXX_STANDARD 11) find_package(aws-crt-cpp PATHS ~/sdk-cpp-workspace/build) find_package(EventstreamRpc-cpp PATHS ~/sdk-cpp-workspace/build) find_package(GreengrassIpc-cpp PATHS ~/sdk-cpp-workspace/build) target_link_libraries(${PROJECT_NAME} AWS::GreengrassIpc-cpp)
-
En el código del componente, cree una conexión con el IPC servicio AWS IoT Greengrass Core para crear un IPC cliente (
Aws::Greengrass::GreengrassCoreIpcClient
). Debe definir un controlador del ciclo de vida de la IPC conexión que gestione los eventos de IPC conexión, desconexión y error. El siguiente ejemplo crea un IPC cliente y un controlador del ciclo de vida de la IPC conexión que se imprime cuando el IPC cliente se conecta, se desconecta y encuentra errores.#include <iostream> #include <aws/crt/Api.h> #include <aws/greengrass/GreengrassCoreIpcClient.h> using namespace Aws::Crt; using namespace Aws::Greengrass; class IpcClientLifecycleHandler : public ConnectionLifecycleHandler { void OnConnectCallback() override { std::cout << "OnConnectCallback" << std::endl; } void OnDisconnectCallback(RpcError error) override { std::cout << "OnDisconnectCallback: " << error.StatusToString() << std::endl; exit(-1); } bool OnErrorCallback(RpcError error) override { std::cout << "OnErrorCallback: " << error.StatusToString() << std::endl; return true; } }; int main() { // Create the IPC client. ApiHandle apiHandle(g_allocator); Io::EventLoopGroup eventLoopGroup(1); Io::DefaultHostResolver socketResolver(eventLoopGroup, 64, 30); Io::ClientBootstrap bootstrap(eventLoopGroup, socketResolver); IpcClientLifecycleHandler ipcLifecycleHandler; GreengrassCoreIpcClient ipcClient(bootstrap); auto connectionStatus = ipcClient.Connect(ipcLifecycleHandler).get(); if (!connectionStatus) { std::cerr << "Failed to establish IPC connection: " << connectionStatus.StatusToString() << std::endl; exit(-1); } // Use the IPC client to create an operation request. // Activate the operation request. auto activate = operation.Activate(request, nullptr); activate.wait(); // Wait for Greengrass Core to respond to the request. auto responseFuture = operation.GetResult(); if (responseFuture.wait_for(std::chrono::seconds(timeout)) == std::future_status::timeout) { std::cerr << "Operation timed out while waiting for response from Greengrass Core." << std::endl; exit(-1); } // Check the result of the request. auto response = responseFuture.get(); if (response) { std::cout << "Successfully published to topic: " << topic << std::endl; } else { // An error occurred. std::cout << "Failed to publish to topic: " << topic << std::endl; auto errorType = response.GetResultType(); if (errorType == OPERATION_ERROR) { auto *error = response.GetOperationError(); std::cout << "Operation error: " << error->GetMessage().value() << std::endl; } else { std::cout << "RPC error: " << response.GetRpcError() << std::endl; } exit(-1); } return 0; }
-
Para ejecutar el código personalizado en el componente, cree el código como un artefacto binario y ejecute el artefacto binario en la receta del componente. Defina el
Execute
permiso del artefacto paraOWNER
permitir que el software AWS IoT Greengrass principal ejecute el artefacto binario.La
Manifests
sección de la receta de tus componentes podría tener un aspecto similar al siguiente ejemplo.
Para compilar la JavaScript versión 2 SDK para dispositivos con AWS IoT para usarla con Nodejs, un dispositivo debe tener las siguientes herramientas:
-
Nodejs 10.0 o posterior
-
Ejecute
node -v
para comprobar la versión de Node.
-
-
CMake3.1 o posterior
Para usar el SDK para dispositivos con AWS IoT para la JavaScript versión 2 (IPCcliente V1)
-
Descargue el SDK para dispositivos con AWS IoT para la JavaScript versión 2 (versión
1.12.10 o posterior). -
Siga las instrucciones de instalación del README para compilar la
versión 2 a partir del SDK para dispositivos con AWS IoT código fuente JavaScript. -
Cree una conexión al IPC servicio AWS IoT Greengrass principal. Complete los siguientes pasos para crear el IPC cliente y establecer una conexión.
-
Utilice el siguiente código para crear el IPC cliente.
import * as greengrascoreipc from 'aws-iot-device-sdk-v2'; let client = greengrascoreipc.createClient();
-
Utilice el siguiente código para establecer una conexión entre el componente y el núcleo de Greengrass.
await client.connect();
Autorice a los componentes a realizar operaciones IPC
Para permitir que sus componentes personalizados utilicen algunas IPC operaciones, debe definir políticas de autorización que permitan al componente realizar la operación en determinados recursos. Cada política de autorización define una lista de operaciones y una lista de recursos que permite la política. Por ejemplo, el IPC servicio de mensajería de publicación/suscripción define las operaciones de publicación y suscripción de los recursos temáticos. Puede utilizar el *
comodín para permitir el acceso a todas las operaciones o a todos los recursos.
Las políticas de autorización se definen con el parámetro de accessControl
configuración, que se puede establecer en la receta del componente o al implementar el componente. El accessControl
objeto asigna los identificadores de IPC servicio a listas de políticas de autorización. Puede definir varias políticas de autorización para cada IPC servicio a fin de controlar el acceso. Cada política de autorización tiene un identificador de política, que debe ser único entre todos los componentes.
sugerencia
Para crear una política únicaIDs, puede combinar el nombre del componente, el nombre del IPC servicio y un contador. Por ejemplo, un componente denominado com.example.HelloWorld
podría definir dos políticas de autorización de publicación o suscripción con lo siguiente: IDs
-
com.example.HelloWorld:pubsub:1
-
com.example.HelloWorld:pubsub:2
Las políticas de autorización utilizan el siguiente formato. Este objeto es el parámetro accessControl
de configuración.
Comodín en las políticas de autorización
Puede utilizar el *
comodín en el resources
elemento de las políticas de IPC autorización para permitir el acceso a varios recursos en una única política de autorización.
-
En todas las versiones del núcleo de Greengrass, puede especificar un solo
*
carácter como recurso para permitir el acceso a todos los recursos. -
En Greengrass nucleus v2.6.0 y versiones posteriores, puede especificar el
*
carácter de un recurso para que coincida con cualquier combinación de caracteres. Por ejemplo, puede especificar que se permita el accesofactory/1/devices/Thermostat*/status
a un tema de estado para todos los dispositivos de termostato de una fábrica, donde comience el nombre de cada dispositivo.Thermostat
Al definir las políticas de autorización para el AWS IoT Core MQTT IPC servicio, también puede utilizar MQTT caracteres comodín (+
y#
) para hacer coincidir varios recursos. Para obtener más información, consulte los MQTTcaracteres comodín en las políticas de AWS IoT Core MQTT IPC autorización.
Variables de receta en las políticas de autorización
Si usa Greengrass nucleus v2.6.0 o posterior y establece la opción de interpolateComponentConfigurationconfiguración del núcleo de Greengrass entrue, puede usar la variable de receta en las políticas de autorización. {iot:thingName} Cuando necesite una política de autorización que incluya el nombre del dispositivo principal, como en el caso de MQTT temas o dispositivos ocultos, puede utilizar esta variable de receta para configurar una política de autorización única para un grupo de dispositivos principales. Por ejemplo, puede permitir que un componente acceda al siguiente recurso para IPC realizar operaciones ocultas.
$aws/things/{iot:thingName}/shadow/
Caracteres especiales en las políticas de autorización
Para especificar un literal *
o un ?
carácter en una política de autorización, debe utilizar una secuencia de escape. Las siguientes secuencias de escape indican al software AWS IoT Greengrass Core que utilice el valor literal en lugar del significado especial del carácter. Por ejemplo, el *
carácter es un comodín que coincide con cualquier combinación de caracteres.
Carácter literal | Secuencia de escape | Notas |
---|---|---|
|
|
|
|
|
AWS IoT Greengrass actualmente no admite el |
|
|
Usa esta secuencia de escape para hacer coincidir un recurso que contenga |
Ejemplos de políticas de autorización
Puede hacer referencia a los siguientes ejemplos de políticas de autorización para ayudarle a configurar las políticas de autorización para sus componentes.
ejemplo Ejemplo de receta de componentes con una política de autorización
El siguiente ejemplo de receta de componentes incluye un accessControl
objeto que define una política de autorización. Esta política autoriza al com.example.HelloWorld
componente a publicar en el test/topic
tema.
ejemplo Ejemplo de actualización de la configuración de un componente con una política de autorización
El siguiente ejemplo de actualización de configuración en una implementación especifica la configuración de un componente con un accessControl
objeto que define una política de autorización. Esta política autoriza al com.example.HelloWorld
componente a publicar en el test/topic
tema.
Suscríbase a las transmisiones de IPC eventos
Puede usar IPC las operaciones para suscribirse a las transmisiones de eventos en un dispositivo principal de Greengrass. Para utilizar una operación de suscripción, defina un gestor de suscripciones y cree una solicitud al IPC servicio. A continuación, el IPC cliente ejecuta las funciones del controlador de suscripciones cada vez que el dispositivo principal transmite un mensaje de evento a su componente.
Puede cerrar una suscripción para dejar de procesar los mensajes de eventos. Para ello, llame a closeStream()
(Java), close()
(Python) o Close()
(C++) al objeto de operación de suscripción que utilizó para abrir la suscripción.
El IPC servicio AWS IoT Greengrass principal admite las siguientes operaciones de suscripción:
Defina los gestores de suscripciones
Para definir un gestor de suscripciones, defina las funciones de devolución de llamada que gestionen los mensajes de eventos, los errores y el cierre de transmisiones. Si usa el IPC cliente V1, debe definir estas funciones en una clase. Si usa el IPC cliente V2, que está disponible en versiones posteriores de Java y PythonSDKs, puede definir estas funciones sin crear una clase de controlador de suscripciones.
Ejemplos de gestores de suscripciones
En el siguiente ejemplo, se muestra cómo utilizar la SubscribeToTopic operación y un controlador de suscripciones para suscribirse a los mensajes locales de publicación/suscripción.
IPCmejores prácticas
Las prácticas recomendadas para su uso IPC en componentes personalizados difieren entre el IPC cliente V1 y el IPC cliente V2. Siga las prácticas recomendadas para la versión de IPC cliente que utilice.