connecteur SNS - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

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.

connecteur SNS

Le connecteur SNS publie des messages sur une rubrique Amazon SNS. Cela permet aux serveurs Web, aux adresses de messagerie et aux abonnés à d'autres messages de répondre à des événements dans le groupe Greengrass.

Ce connecteur reçoit des informations de message SNS dans une rubrique MQTT, puis envoie le message à une rubrique SNS spécifiée. Vous pouvez éventuellement utiliser des fonctions Lambda personnalisées pour implémenter une logique de filtrage ou de formatage sur les messages avant leur publication sur ce connecteur.

Ce connecteur possède les versions suivantes.

Version

ARN

4

arn:aws:greengrass:region::/connectors/SNS/versions/4

3

arn:aws:greengrass:region::/connectors/SNS/versions/3

2

arn:aws:greengrass:region::/connectors/SNS/versions/2

1

arn:aws:greengrass:region::/connectors/SNS/versions/1

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le Journal des modifications.

Prérequis

Ce connecteur possède les critères suivants :

Version 3 - 4
  • Logiciel AWS IoT Greengrass Core 1.9.3 ou version ultérieure.

  • Python version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.

    Note

    Pour utiliser Python 3.8, exécutez la commande suivante pour créer un lien symbolique entre le dossier d'installation par défaut de Python 3.7 et les fichiers binaires Python 3.8 installés.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Ceci configure votre appareil de sorte qu'il réponde aux exigence de Python pour AWS IoT Greengrass.

  • Rubrique SNS configurée. Pour plus d'informations, consultez Création d'une rubrique Amazon SNS dans le Guide du développeur Amazon Simple Notification Service.

  • Le rôle de groupe Greengrass est configuré pour autoriser l'sns:Publishaction sur l'Amazon SNSTopic cible, comme illustré dans l'exemple de politique IAM suivant.

    { "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1528133056761", "Action":[ "sns:Publish" ], "Effect":"Allow", "Resource":[ "arn:aws:sns:region:account-id:topic-name" ] } ] }

    Ce connecteur vous permet de remplacer la rubrique par défaut de façon dynamique dans la charge utile des messages d'entrée. Si votre implémentation utilise cette fonctionnalité, la politique IAM doit sns:Publish autoriser l'accès à tous les sujets cibles. Vous pouvez octroyer un accès précis ou conditionnel aux ressources (par exemple, en utilisant un schéma d'attribution de nom avec caractère générique *).

    Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d’informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).

Versions 1 - 2
  • AWS IoT GreengrassLogiciel principal v1.7 ou version ultérieure.

  • Python version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.

  • Rubrique SNS configurée. Pour plus d'informations, consultez Création d'une rubrique Amazon SNS dans le Guide du développeur Amazon Simple Notification Service.

  • Le rôle de groupe Greengrass est configuré pour autoriser l'sns:Publishaction sur l'Amazon SNSTopic cible, comme illustré dans l'exemple de politique IAM suivant.

    { "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1528133056761", "Action":[ "sns:Publish" ], "Effect":"Allow", "Resource":[ "arn:aws:sns:region:account-id:topic-name" ] } ] }

    Ce connecteur vous permet de remplacer la rubrique par défaut de façon dynamique dans la charge utile des messages d'entrée. Si votre implémentation utilise cette fonctionnalité, la politique IAM doit sns:Publish autoriser l'accès à tous les sujets cibles. Vous pouvez octroyer un accès précis ou conditionnel aux ressources (par exemple, en utilisant un schéma d'attribution de nom avec caractère générique *).

    Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d’informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).

Paramètres du connecteur

Ce connecteur fournit les paramètres suivants :

Version 4
DefaultSNSArn

ARN de la rubrique SNS par défaut vers lequel publier les messages. La rubrique de destination peut être remplacée par la propriété sns_topic_arn dans la charge utile du message d'entrée.

Note

Le rôle de groupe doit permettre l'autorisation sns:Publish à toutes les rubriques cibles. Pour plus d’informations, consultez Prérequis.

Nom affiché dans la AWS IoT console : ARN de la rubrique SNS par défaut

Nécessaire : true

Type : string

Modèle valide : arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$

IsolationMode

Mode conteneurisation de ce connecteur. La valeur par défaut est GreengrassContainer, ce qui signifie que le connecteur s'exécute dans un environnement d'exécution isolé à l'intérieur du conteneur AWS IoT Greengrass.

Note

Le paramètre de conteneurisation par défaut pour le groupe ne s'applique pas aux connecteurs.

Nom affiché dans la AWS IoT console : mode d'isolation du conteneur

Nécessaire : false

Type : string

Valeurs valides : GreengrassContainer ou NoContainer

Modèle valide : ^NoContainer$|^GreengrassContainer$

Versions 1 - 3
DefaultSNSArn

ARN de la rubrique SNS par défaut vers lequel publier les messages. La rubrique de destination peut être remplacée par la propriété sns_topic_arn dans la charge utile du message d'entrée.

Note

Le rôle de groupe doit permettre l'autorisation sns:Publish à toutes les rubriques cibles. Pour plus d’informations, consultez Prérequis.

Nom affiché dans la AWS IoT console : ARN de la rubrique SNS par défaut

Nécessaire : true

Type : string

Modèle valide : arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$

Exemple de création de connecteur (AWS CLI)

La commande CLI suivante crée un ConnectorDefinition avec une version initiale contenant le connecteur SNS.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MySNSConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/SNS/versions/4", "Parameters": { "DefaultSNSArn": "arn:aws:sns:region:account-id:topic-name", "IsolationMode" : "GreengrassContainer" } } ] }'

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page Connecteurs du groupe. Pour plus d’informations, consultez Mise en route avec les connecteurs Greengrass (console).

Données d'entrée

Ce connecteur accepte les informations des messages SNS sur un sujet MQTT, puis publie le message tel quel sur le sujet SNS cible. Les messages d'entrée doivent être au format JSON.

Filtre de rubrique dans l'abonnement

sns/message

Propriétés des messages
request

Informations sur le message à envoyer à la rubrique SNS.

Nécessaire : true

Type : object qui inclut les propriétés suivantes :

message

Contenu du message sous forme de chaîne ou au format JSON. Pour obtenir des exemples, consultez Exemple d'entrée.

Pour envoyer le fichier JSON, la propriété message_structure doit être définie sur json et le message doit être un objet JSON encodé en chaîne qui contient une clé default.

Nécessaire : true

Type : string

Modèle valide : .*

subject

Objet du message.

Nécessaire : false

Type : texte ASCII, 100 caractères maximum. Il doit commencer par une lettre, un nombre ou un signe de ponctuation. Il ne doit pas inclure de sauts de ligne ou de caractères de contrôle.

Modèle valide : .*

sns_topic_arn

ARN de la rubrique SNS vers lequel publier les messages. S'il est spécifié, le connecteur publie dans cette rubrique au lieu de la rubrique par défaut.

Note

Le rôle de groupe doit permettre l'autorisation sns:Publish à n'importe quelles rubriques cibles. Pour plus d’informations, consultez Prérequis.

Nécessaire : false

Type : string

Modèle valide : arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$

message_structure

Structure du message.

Obligatoire : false. Cela doit être spécifié pour envoyer un message JSON.

Type : string

Valeurs valides : json

id

ID arbitraire de la demande. Cette propriété est utilisée pour mapper une demande d'entrée à une réponse de sortie. Lorsque spécifiée, la propriété id dans l'objet de réponse est définie sur cette valeur. Si vous n'utilisez pas cette fonctionnalité, vous pouvez omettre cette propriété ou spécifier une chaîne vide.

Nécessaire : false

Type : string

Modèle valide : .*

Restrictions

La taille du message est délimitée par la taille maximale d'un message SNS de 256 Ko.

Exemple d'entrée : message de type chaîne

Cet exemple envoie un message de type chaîne. Il spécifie la propriété sns_topic_arn facultative, qui remplace la rubrique de destination par défaut.

{ "request": { "subject": "Message subject", "message": "Message data", "sns_topic_arn": "arn:aws:sns:region:account-id:topic2-name" }, "id": "request123" }
Exemple d'entrée : message JSON

Cet exemple envoie un message sous forme d'objet JSON encodé en chaîne incluant la clé default.

{ "request": { "subject": "Message subject", "message": "{ \"default\": \"Message data\" }", "message_structure": "json" }, "id": "request123" }

Données de sortie

Ce connecteur publie des informations d'état sous forme de données de sortie dans une rubrique MQTT.

Filtre de rubrique dans l'abonnement

sns/message/status

Exemple de sortie : réussite
{ "response": { "sns_message_id": "f80a81bc-f44c-56f2-a0f0-d5af6a727c8a", "status": "success" }, "id": "request123" }
Exemple de sortie : échec
{ "response" : { "error": "InvalidInputException", "error_message": "SNS Topic Arn is invalid", "status": "fail" }, "id": "request123" }

Exemple d'utilisation

Suivez les étapes de haut niveau suivantes pour configurer un exemple de fonction Lambda en Python 3.7 que vous pouvez utiliser pour tester le connecteur.

Note
  1. Veillez à répondre aux conditions requises pour le connecteur.

    Pour l'exigence de rôle de groupe, vous devez configurer le rôle de manière à accorder les autorisations requises et à vous assurer que le rôle a été ajouté au groupe. Pour plus d’informations, consultez Gestion du rôle de groupe Greengrass (console) ou Gestion du rôle de groupe Greengrass (interface de ligne de commande).

  2. Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

    Enregistrez l'exemple de code en tant que fichier PY. Téléchargez et décompressez le SDK AWS IoT Greengrass principal pour Python. Ensuite, créez un package zip contenant le fichier PY et le dossier greengrasssdk au niveau racine. Ce package zip est le package de déploiement vers lequel vous effectuez le téléchargementAWS Lambda.

    Après avoir créé la fonction Lambda Python 3.7, publiez une version de la fonction et créez un alias.

  3. Configurez votre groupe Greengrass.

    1. Ajoutez la fonction Lambda par son alias (recommandé). Configurez le cycle de vie Lambda comme étant de longue durée (ou dans "Pinned": true la CLI).

    2. Ajoutez le connecteur et configurez ses paramètres.

    3. Ajoutez des abonnements qui permettent au connecteur de recevoir des données d'entrée et d'envoyer des données de sortie sur des filtres de rubrique pris en charge.

      • Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.

      • Définissez le connecteur en tant que source, AWS IoT Core en tant que cible et utilisez un filtre de rubrique de sortie pris en charge. Vous utilisez cet abonnement pour afficher les messages d'état dans la AWS IoT console.

  4. Déployez le groupe.

  5. Dans la AWS IoT console, sur la page Test, abonnez-vous à la rubrique des données de sortie pour consulter les messages d'état du connecteur. L'exemple de fonction Lambda a une longue durée de vie et commence à envoyer des messages immédiatement après le déploiement du groupe.

    Lorsque vous avez terminé les tests, vous pouvez définir le cycle de vie Lambda à la demande (ou "Pinned": false dans la CLI) et déployer le groupe. Cela empêche la fonction d'envoyer des messages.

Exemple

L'exemple suivant de fonction Lambda envoie un message d'entrée au connecteur.

import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'sns/message' def create_request_with_all_fields(): return { "request": { "message": "Message from SNS Connector Test" }, "id" : "req_123" } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print("Message To Publish: ", messageToPublish) iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def lambda_handler(event, context): return

Licences

Le connecteur SNS inclut les logiciels/licences tiers suivants :

Ce connecteur est publié dans le cadre du contrat de licence logicielle Greengrass Core.

Journal des modifications

Le tableau suivant décrit les modifications apportées à chaque version du connecteur.

Version

Modifications

4

Ajout du paramètre IsolationMode pour configurer le mode de conteneurisation du connecteur.

3

Mise à niveau de l'environnement d'exécution Lambda vers Python 3.7, ce qui modifie les exigences d'exécution.

2

Correctif pour réduire la journalisation excessive.

1

Première version.

Un groupe Greengrass ne peut contenir qu'une seule version du connecteur à la fois. Pour de plus amples informations sur la mise à niveau d'une version de connecteur, veuillez consulter Mise à niveau des versions du connecteur.

Consultez aussi