Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisez le Kit SDK des appareils AWS IoT pour communiquer avec le noyau de Greengrass, les autres composants et AWS IoT Core
Les composants exécutés sur votre appareil principal peuvent utiliser la bibliothèque AWS IoT Greengrass Core interprocess communication (IPC) Kit SDK des appareils AWS IoT pour communiquer avec le AWS IoT Greengrass noyau et les autres composants de Greengrass. Pour développer et exécuter des composants personnalisés qui utilisentIPC, vous devez utiliser le Kit SDK des appareils AWS IoT pour vous connecter au IPC service AWS IoT Greengrass Core et effectuer IPC des opérations.
L'IPCinterface prend en charge deux types d'opérations :
-
Demande/réponse
Les composants envoient une demande au IPC service et reçoivent une réponse contenant le résultat de la demande.
-
Abonnement
Les composants envoient une demande d'abonnement au IPC service et attendent un flux de messages d'événement en réponse. Les composants fournissent un gestionnaire d'abonnement qui gère les messages d'événements, les erreurs et les fermetures de flux. Kit SDK des appareils AWS IoT Il inclut une interface de gestion avec les types de réponse et d'événement appropriés pour chaque IPC opération. Pour de plus amples informations, veuillez consulter Abonnez-vous aux diffusions IPC d'événements.
Rubriques
- IPCversions du client
- Pris en charge SDKs pour la communication interprocessus
- Connectez-vous au IPC service AWS IoT Greengrass principal
- Autoriser les composants à effectuer des IPC opérations
- Abonnez-vous aux diffusions IPC d'événements
- IPCmeilleures pratiques
- Publier/souscrire des messages locaux
- Publier/souscrire AWS IoT Core MQTT des messages
- Interagir avec le cycle de vie des composants
- Interagir avec la configuration des composants
- Récupérez les valeurs secrètes
- Interagissez avec les ombres locales
- Gérez les déploiements et les composants locaux
- Authentifier et autoriser les appareils clients
IPCversions du client
Dans les versions ultérieures de Java et PythonSDKs, AWS IoT Greengrass fournit une version améliorée du IPC client, appelée IPC client V2. IPCclient V2 :
-
Réduit la quantité de code que vous devez écrire pour utiliser les IPC opérations et permet d'éviter les erreurs courantes susceptibles de se produire avec IPC le client V1.
-
Appelle les rappels du gestionnaire d'abonnement dans un thread séparé. Vous pouvez donc désormais exécuter du code de blocage, y compris des appels de IPC fonction supplémentaires, dans les rappels du gestionnaire d'abonnement. IPCle client V1 utilise le même thread pour communiquer avec le IPC serveur et appeler les rappels du gestionnaire d'abonnement.
-
Permet d'appeler des opérations d'abonnement à l'aide d'expressions Lambda (Java) ou de fonctions (Python). IPCle client V1 vous oblige à définir des classes de gestionnaire d'abonnement.
-
Fournit des versions synchrones et asynchrones de chaque opération. IPC IPCle client V1 fournit uniquement des versions asynchrones de chaque opération.
Nous vous recommandons d'utiliser IPC le client V2 pour bénéficier de ces améliorations. Cependant, de nombreux exemples présentés dans cette documentation et dans certains contenus en ligne montrent uniquement comment utiliser IPC le client V1. Vous pouvez utiliser les exemples et didacticiels suivants pour découvrir des exemples de composants utilisant IPC le client V2 :
Actuellement, la version Kit SDK des appareils AWS IoT pour C++ v2 ne prend en charge que IPC le client V1.
Pris en charge SDKs pour la communication interprocessus
Les IPC bibliothèques AWS IoT Greengrass Core sont incluses dans les Kit SDK des appareils AWS IoT versions suivantes.
SDK | Version minimale | Utilisation |
---|---|---|
v1.6.0 |
Consultez Utilisation Kit SDK des appareils AWS IoT pour Java v2 (IPCclient V2). |
|
v1.9.0 |
Consultez Utilisation Kit SDK des appareils AWS IoT pour Python v2 (IPCclient V2). |
|
v1.17.0 |
Consultez Utilisation Kit SDK des appareils AWS IoT pour C++ v2. |
|
v1.12.0 |
Consultez Utilisation Kit SDK des appareils AWS IoT pour la JavaScript version 2 (IPCclient V1). |
Connectez-vous au IPC service AWS IoT Greengrass principal
Pour utiliser la communication interprocessus dans votre composant personnalisé, vous devez créer une connexion à un socket IPC serveur exécuté par le logiciel AWS IoT Greengrass Core. Effectuez les tâches suivantes pour télécharger et utiliser le Kit SDK des appareils AWS IoT dans la langue de votre choix.
Pour utiliser le Kit SDK des appareils AWS IoT pour Java v2 (IPCclient V2)
-
Téléchargez le Kit SDK des appareils AWS IoT pour Java v2
(v1.6.0 ou version ultérieure). -
Procédez de l'une des manières suivantes pour exécuter votre code personnalisé dans votre composant :
-
Créez votre composant sous la forme d'un JAR fichier qui inclut le Kit SDK des appareils AWS IoT, et exécutez ce JAR fichier dans votre recette de composant.
-
Kit SDK des appareils AWS IoT JARDéfinissez-le en tant qu'artefact de composant et ajoutez-le au chemin de classe lorsque vous exécutez votre application dans votre recette de composant.
-
-
Utilisez le code suivant pour créer le IPC client.
try (GreengrassCoreIPCClientV2 ipcClient = GreengrassCoreIPCClientV2.builder().build()) { // Use client. } catch (Exception e) { LOGGER.log(Level.SEVERE, "Exception occurred when using IPC.", e); System.exit(1); }
Pour utiliser le Kit SDK des appareils AWS IoT for Python v2 (IPCclient V2)
-
Téléchargez le Kit SDK des appareils AWS IoT pour Python
(v1.9.0 ou version ultérieure). -
Ajoutez les étapes SDK d'installation
au cycle de vie de l'installation dans la recette de votre composant. -
Créez une connexion au IPC service AWS IoT Greengrass Core. Utilisez le code suivant pour créer le IPC client.
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)
Pour créer la Kit SDK des appareils AWS IoT version 2 pour C++, un périphérique doit disposer des outils suivants :
-
C++ 11 ou version ultérieure
-
CMake3.1 ou version ultérieure
-
L'un des compilateurs suivants :
-
GCC4.8 ou version ultérieure
-
Clang 3.9 ou version ultérieure
-
MSVC2015 ou plus tard
-
Pour utiliser le Kit SDK des appareils AWS IoT pour C++ v2
-
Téléchargez le Kit SDK des appareils AWS IoT pour C++ v2
(v1.17.0 ou version ultérieure). -
Suivez les instructions d'installation du README
pour créer le Kit SDK des appareils AWS IoT pour C++ v2 à partir des sources. -
Dans votre outil de génération C++, liez la IPC bibliothèque Greengrass que vous avez créée à l'étape précédente.
AWS::GreengrassIpc-cpp
L'CMakeLists.txt
exemple suivant lie la IPC bibliothèque Greengrass à un projet que vous utilisez pour créer. 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)
-
Dans le code de votre composant, créez une connexion au IPC service AWS IoT Greengrass Core pour créer un IPC client (
Aws::Greengrass::GreengrassCoreIpcClient
). Vous devez définir un gestionnaire du cycle de vie des IPC connexions qui gère les événements de IPC connexion, de déconnexion et d'erreur. L'exemple suivant crée un IPC client et un gestionnaire de cycle de vie des IPC connexions qui s'imprime lorsque le IPC client se connecte, se déconnecte et rencontre des erreurs.#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; }
-
Pour exécuter votre code personnalisé dans votre composant, créez votre code sous forme d'artefact binaire et exécutez l'artefact binaire dans la recette de votre composant. Définissez l'
Execute
autorisation de l'artefact pourOWNER
permettre au logiciel AWS IoT Greengrass Core d'exécuter l'artefact binaire.La
Manifests
section de la recette de votre composant peut ressembler à l'exemple suivant.
Pour créer le Kit SDK des appareils AWS IoT for JavaScript v2 à utiliser avec NodeJS, un appareil doit disposer des outils suivants :
-
NodeJS 10.0 ou version ultérieure
-
Exécutez
node -v
pour vérifier la version du nœud.
-
-
CMake3.1 ou version ultérieure
Pour utiliser le Kit SDK des appareils AWS IoT for JavaScript v2 (IPCclient V1)
-
Téléchargez le Kit SDK des appareils AWS IoT pour la version JavaScript 2
(v1.12.10 ou version ultérieure). -
Suivez les instructions d'installation du README
pour créer le Kit SDK des appareils AWS IoT for JavaScript v2 à partir des sources. -
Créez une connexion au IPC service AWS IoT Greengrass Core. Procédez comme suit pour créer le IPC client et établir une connexion.
-
Utilisez le code suivant pour créer le IPC client.
import * as greengrascoreipc from 'aws-iot-device-sdk-v2'; let client = greengrascoreipc.createClient();
-
Utilisez le code suivant pour établir une connexion entre votre composant et le noyau de Greengrass.
await client.connect();
Autoriser les composants à effectuer des IPC opérations
Pour permettre à vos composants personnalisés d'utiliser certaines IPC opérations, vous devez définir des politiques d'autorisation qui permettent au composant d'effectuer l'opération sur certaines ressources. Chaque politique d'autorisation définit une liste d'opérations et une liste de ressources autorisées par la politique. Par exemple, le IPC service de messagerie de publication/d'abonnement définit les opérations de publication et d'abonnement pour les ressources thématiques. Vous pouvez utiliser le *
caractère générique pour autoriser l'accès à toutes les opérations ou à toutes les ressources.
Vous définissez les politiques d'autorisation à l'aide du paramètre de accessControl
configuration, que vous pouvez définir dans la recette du composant ou lorsque vous déployez le composant. L'accessControl
objet associe les identifiants IPC de service à des listes de politiques d'autorisation. Vous pouvez définir plusieurs politiques d'autorisation pour chaque IPC service afin de contrôler l'accès. Chaque politique d'autorisation possède un identifiant de politique, qui doit être unique parmi tous les composants.
Astuce
Pour créer une politique uniqueIDs, vous pouvez combiner le nom du composant, le nom du IPC service et un compteur. Par exemple, un composant nommé com.example.HelloWorld
peut définir deux politiques d'autorisation de publication/d'abonnement avec les éléments suivants : IDs
-
com.example.HelloWorld:pubsub:1
-
com.example.HelloWorld:pubsub:2
Les politiques d'autorisation utilisent le format suivant. Cet objet est le paramètre accessControl
de configuration.
Des caractères génériques dans les politiques d'autorisation
Vous pouvez utiliser le *
caractère générique dans l'resources
élément des politiques d'IPCautorisation pour autoriser l'accès à plusieurs ressources dans le cadre d'une seule politique d'autorisation.
-
Dans toutes les versions du noyau Greengrass, vous pouvez spécifier un seul
*
personnage comme ressource pour autoriser l'accès à toutes les ressources. -
Dans Greengrass nucleus v2.6.0 et versions ultérieures, vous pouvez spécifier le
*
personnage d'une ressource pour qu'il corresponde à n'importe quelle combinaison de caractères. Par exemple, vous pouvez autoriserfactory/1/devices/Thermostat*/status
l'accès à une rubrique d'état pour tous les thermostats d'une usine, où le nom de chaque appareil commence parThermostat
.
Lorsque vous définissez des politiques d'autorisation pour le AWS IoT Core MQTT IPC service, vous pouvez également utiliser des MQTT caractères génériques (+
et#
) pour associer plusieurs ressources. Pour plus d'informations, voir les MQTTcaractères génériques dans les politiques AWS IoT Core MQTT IPC d'autorisation.
Variables de recette dans les politiques d'autorisation
Si vous utilisez Greengrass nucleus v2.6.0 ou version ultérieure et que vous définissez l'option de interpolateComponentConfigurationconfiguration du noyau Greengrass sur, vous pouvez utiliser la variable de recette dans les true politiques d'autorisation. {iot:thingName} Lorsque vous avez besoin d'une politique d'autorisation incluant le nom du périphérique principal, par exemple pour les MQTT sujets ou les ombres de périphériques, vous pouvez utiliser cette variable de recette pour configurer une politique d'autorisation unique pour un groupe de périphériques principaux. Par exemple, vous pouvez autoriser un composant à accéder à la ressource suivante pour les IPC opérations parallèles.
$aws/things/{iot:thingName}/shadow/
Caractères spéciaux dans les politiques d'autorisation
Pour spécifier un littéral *
ou un ?
caractère dans une politique d'autorisation, vous devez utiliser une séquence d'échappement. Les séquences d'échappement suivantes indiquent au logiciel AWS IoT Greengrass Core d'utiliser la valeur littérale au lieu de la signification particulière du caractère. Par exemple, le *
caractère est un joker qui correspond à n'importe quelle combinaison de caractères.
Caractère littéral | Séquence d'échappement | Remarques |
---|---|---|
|
|
|
|
|
AWS IoT Greengrass ne prend actuellement pas en charge le |
|
|
Utilisez cette séquence d'échappement pour faire correspondre une ressource contenant |
Exemples de politiques d'autorisation
Vous pouvez vous référer aux exemples de politiques d'autorisation suivants pour vous aider à configurer les politiques d'autorisation pour vos composants.
Exemple de recette de composant avec une politique d'autorisation
L'exemple de recette de composant suivant inclut un accessControl
objet qui définit une politique d'autorisation. Cette politique autorise le com.example.HelloWorld
composant à publier dans le test/topic
sujet.
Exemple de mise à jour de configuration de composant avec une politique d'autorisation
L'exemple de mise à jour de configuration suivant dans un déploiement indique de configurer un composant avec un accessControl
objet qui définit une politique d'autorisation. Cette politique autorise le com.example.HelloWorld
composant à publier dans le test/topic
sujet.
Abonnez-vous aux diffusions IPC d'événements
Vous pouvez utiliser IPC des opérations pour vous abonner à des flux d'événements sur un appareil principal de Greengrass. Pour utiliser une opération d'abonnement, définissez un gestionnaire d'abonnement et créez une demande auprès du IPC service. Ensuite, le IPC client exécute les fonctions du gestionnaire d'abonnement chaque fois que le périphérique principal transmet un message d'événement à votre composant.
Vous pouvez fermer un abonnement pour arrêter le traitement des messages relatifs aux événements. Pour ce faire, appelez closeStream()
(Java), close()
(Python) ou Close()
(C++) sur l'objet d'opération d'abonnement que vous avez utilisé pour ouvrir l'abonnement.
Le IPC service AWS IoT Greengrass Core prend en charge les opérations d'abonnement suivantes :
Définition des gestionnaires d'abonnements
Pour définir un gestionnaire d'abonnement, définissez des fonctions de rappel qui gèrent les messages d'événements, les erreurs et les fermetures de flux. Si vous utilisez IPC le client V1, vous devez définir ces fonctions dans une classe. Si vous utilisez IPC le client V2, disponible dans les versions ultérieures de Java et PythonSDKs, vous pouvez définir ces fonctions sans créer de classe de gestionnaire d'abonnement.
Exemples de gestionnaires d'abonnements
L'exemple suivant montre comment utiliser l'SubscribeToTopicopération et un gestionnaire d'abonnement pour s'abonner à des messages de publication/d'abonnement locaux.
IPCmeilleures pratiques
Les meilleures pratiques d'utilisation IPC dans les composants personnalisés diffèrent entre le IPC client V1 et IPC le client V2. Suivez les meilleures pratiques pour la version du IPC client que vous utilisez.