

Avis de fin de support : le 7 octobre 2026, AWS le support de. AWS IoT Greengrass Version 1 Après le 7 octobre 2026, vous ne pourrez plus accéder aux AWS IoT Greengrass V1 ressources. Pour plus d'informations, rendez-vous sur [Migrer depuis AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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.

# Intégrer à des services et protocoles à l'aide de connecteurs Greengrass
<a name="connectors"></a>

Cette fonctionnalité est disponible pour AWS IoT Greengrass Core v1.7 et versions ultérieures.

Les connecteurs intégrés AWS IoT Greengrass sont des modules prédéfinis qui permettent d'interagir plus efficacement avec l'infrastructure locale, les protocoles des appareils et les autres services cloud. AWS En utilisant des connecteurs, vous pouvez passer moins de temps à apprendre de nouveaux protocoles APIs et plus de temps à vous concentrer sur la logique qui compte pour votre entreprise.

Le schéma suivant montre où les connecteurs peuvent s'intégrer dans le AWS IoT Greengrass  paysage.

![\[Les connecteurs se connectent aux appareils, services et ressources locales.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/connectors/connectors-arch.png)


De nombreux connecteurs utilisent des messages MQTT pour communiquer avec les appareils clients et les fonctions Greengrass Lambda du groupe, AWS IoT ou avec le service fantôme local. Dans l'exemple suivant, le connecteur Twilio Notifications reçoit des messages MQTT d'une fonction Lambda définie par l'utilisateur, utilise une référence locale d'un secret AWS Secrets Manager de et appelle l'API Twilio.

![\[Connecteur recevant un message MQTT d'une fonction Lambda et appelant un service.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/connectors/twilio-solution.png)


Pour accéder aux didacticiel permettant de créer cette solution, consultez [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md) et [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md).

Les connecteurs Greengrass peuvent vous aider à étendre les capacités des appareils ou à créer des appareils à usage unique. À l'aide de connecteurs, vous pouvez :
+ Mettre en œuvre une logique métier réutilisable.
+ Interagissez avec le cloud et les services locaux, y compris AWS les services tiers.
+ Intégrer et traiter des données d'appareil.
+ Activez device-to-device les appels à l'aide d'abonnements à des rubriques MQTT et de fonctions Lambda définies par l'utilisateur.

AWS fournit un ensemble de connecteurs Greengrass qui simplifient les interactions avec les services et les sources de données courants. Ces modules réutilisables prédéfinis activent des scénarios pour la journalisation et les diagnostics, le réapprovisionnement, le traitement des données industrielles, l'alarme et la messagerie. Pour de plus amples informations, veuillez consulter [AWS- connecteurs Greengrass fournis](connectors-list.md).

## Prérequis
<a name="connectors-reqs"></a>

Pour utiliser des connecteurs, tenez compte des points suivants :
+ Chaque connecteur que vous utilisez comporte des exigences que vous devez respecter. Ces exigences peuvent inclure la version minimale du logiciel AWS IoT Greengrass Core, les exigences relatives à l'appareil, les autorisations requises et les limites. Pour de plus amples informations, veuillez consulter [AWS- connecteurs Greengrass fournis](connectors-list.md).
+ Un groupe Greengrass ne peut contenir qu'une seule instance configurée d'un connecteur donné. Toutefois, vous pouvez utiliser l'instance dans plusieurs abonnements. Pour de plus amples informations, veuillez consulter [Paramètres de configuration](#connectors-parameters).
+ Lorsque la conteneurisation par défaut du groupe Greengrass est définie sur [No container (Aucun conteneur)](lambda-group-config.md#lambda-containerization-groupsettings), les **connecteurs** du groupe doivent s'exécuter sans conteneurisation. Pour rechercher des connecteurs prenant en charge le mode **No container (Aucun conteneur)** veuillez consulter [AWS- connecteurs Greengrass fournis](connectors-list.md).

## Utilisation des connecteurs Greengrass
<a name="use-applications"></a>

Un connecteur est un type de composant de groupe. Comme les autres composants du groupe, tels que les appareils clients et les fonctions Lambda définies par l'utilisateur, vous ajoutez des connecteurs aux groupes, vous configurez leurs paramètres et vous les déployez sur le cœur. AWS IoT Greengrass Connecteurs utilisés dans l'environnement principal.

Vous pouvez déployer certains connecteurs sous forme de simples applications autonomes. Par exemple, le connecteur Device Defender lit les métriques du système depuis le périphérique principal et les envoie à des AWS IoT Device Defender fins d'analyse.

Vous pouvez ajouter d'autres connecteurs comme éléments de base dans des solutions de plus grande envergure. L'exemple de solution suivant utilise le connecteur de l'adaptateur de protocole Modbus-RTU pour traiter les messages des capteurs et le connecteur Twilio Notifications pour initier les messages Twilio.

![\[Flux de données de la fonction Lambda vers le connecteur de l'adaptateur de protocole Modbus-RTU, de la fonction Lambda vers le connecteur Twilio Notifications vers Twilio.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/connectors/modbus-twilio-solution.png)


Les solutions incluent souvent des fonctions Lambda définies par l'utilisateur qui se trouvent à côté des connecteurs et traitent les données que le connecteur envoie ou reçoit. Dans cet exemple, la TempMonitor fonction reçoit des données de l'adaptateur de protocole Modbus-RTU, exécute une certaine logique métier, puis envoie des données à Twilio Notifications.

Pour créer et déployer une solution, vous suivez cette procédure générale :

1. Mappez les flux de données de haut niveau. Identifiez les sources de données, les canaux de données, les services, les protocoles et les ressources dont vous avez besoin. Dans l'exemple de solution, cela inclut les données sur le protocole Modbus RTU, le port série physique Modbus et Twilio.

1. Identifiez les connecteurs à inclure dans la solution, et ajoutez-les à votre groupe. L'exemple de solution utilise l'adaptateur de protocole Modbus-RTU et les notifications Twilio. Pour vous aider à trouver les connecteurs qui s'appliquent à votre scénario, et pour en savoir plus sur leurs besoins individuels, consultez [AWS- connecteurs Greengrass fournis](connectors-list.md).

1. Identifiez si des fonctions Lambda, des appareils clients ou des ressources définis par l'utilisateur sont nécessaires, puis créez-les et ajoutez-les au groupe. Cela peut inclure des fonctions qui contiennent une logique métier ou traitent des données dans un format requis par une autre entité dans la solution. L'exemple de solution utilise des fonctions pour envoyer des requêtes Modbus RTU et lancer des notifications Twilio. Il inclut également une ressource d'appareil local pour le port série Modbus RTU et une ressource de secret pour le jeton d'authentification de Twilio.
**Note**  
Les ressources de secret référencent des mots de passe, des jetons et d'autres secrets de AWS Secrets Manager. Les secrets peuvent être utilisés par les connecteurs et les fonctions Lambda pour s'authentifier auprès des services et des applications. Par défaut, AWS IoT Greengrass vous pouvez accéder aux secrets dont le nom commence par « *greengrass-* ». Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

1. Créez des abonnements qui autorisent les entités de la solution à échanger des messages MQTT. Si un connecteur est utilisé dans un abonnement, le connecteur et la source ou la cible du message doivent utiliser la syntaxe de rubriques prédéfinie prise en charge par le connecteur. Pour de plus amples informations, veuillez consulter [Entrées et sorties](#connectors-inputs-outputs).

1. Déployer le groupe vers le noyau Greengrass.

Pour plus d'informations sur la création et le déploiement d'un connecteur, consultez les didacticiels suivants :
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

## Paramètres de configuration
<a name="connectors-parameters"></a>

Beaucoup de connecteurs fournissent des paramètres qui vous permettent de personnaliser le comportement ou la sortie. Ces paramètres sont utilisés lors de l'initialisation, de l'exécution, ou à d'autres moments dans le cycle de vie du connecteur.

Les types de paramètres et leur utilisation varient en fonction du connecteur. Par exemple, le connecteur SNS possède un paramètre qui configure la rubrique SNS par défaut, et Device Defender possède un paramètre qui configure le taux d'échantillonnage des données.

Une version de groupe peut contenir plusieurs connecteurs, mais une seule instance d'un connecteur donné à la fois. Cela signifie que chaque connecteur du groupe ne peut avoir qu'une seule configuration active. Cependant, l'instance de connecteur peut être utilisée dans plusieurs abonnements dans le groupe. Par exemple, vous pouvez créer des abonnements qui permettent à de nombreux appareils d'envoyer des données au connecteur Kinesis Firehose.

### Paramètres utilisés pour accéder aux ressources d'un groupe
<a name="connectors-parameters-resources"></a>

Les connecteurs Greengrass utilisent des ressources de groupe pour accéder au système de fichiers, aux ports, aux périphériques et aux autres ressources locales sur l'appareil principal. Si un connecteur nécessite l'accès à une ressource de groupe, il fournit alors des paramètres de configuration associés.

Les ressources de groupe comprennent :
+ [Des ressources locales](access-local-resources.md). Répertoires, fichiers, ports, connecteurs et périphériques qui sont présents sur l'appareil principal Greengrass.
+ [Des ressources de Machine Learning](ml-inference.md). Modèles de machine Learning qui sont formés dans le cloud et déployés sur le noyau pour l'inférence locale.
+ [Des ressources de secret](secrets.md). Copies locales cryptées de mots de passe, de clés, de jetons ou de texte arbitraire provenant de AWS Secrets Manager. Les connecteurs peuvent accéder en toute sécurité à ces secrets locaux et les utiliser pour s'authentifier auprès des services ou de l'infrastructure locale.

Par exemple, les paramètres de Device Defender permettent d'accéder aux métriques du système dans le `/proc` répertoire hôte, et les paramètres des notifications Twilio permettent d'accéder à un jeton d'authentification Twilio stocké localement.

### Mise à jour des paramètres du connecteur
<a name="update-application-parameters-"></a>

Les paramètres sont configurés lorsque le connecteur est ajouté à un groupe Greengrass. Vous pouvez modifier les valeurs des paramètres après l'ajout du connecteur.
+ Dans la console : à partir de la page de configuration de groupe, ouvrez **Connecteurs** et, dans le menu contextuel du connecteur, choisissez **Modifier**.
**Note**  
Si le connecteur utilise une ressource de secret qui est ultérieurement modifiée pour référencer un autre secret, vous devez modifier les paramètres du connecteur et confirmer la modification.
+ Dans l'API : Créer une autre version du connecteur qui définit la nouvelle configuration.

  L' AWS IoT Greengrass API utilise des versions pour gérer les groupes. Les versions étant immuables, pour ajouter ou modifier des composants de groupe (par exemple, les appareils clients, les fonctions et les ressources du groupe), vous devez créer des versions de composants nouveaux ou mis à jour. Ensuite, vous créez et déployez une version de groupe contenant la version cible de chaque composant.

Lorsque vous apportez des modifications à la configuration du connecteur, vous devez déployer le groupe pour propager les modifications au noyau.

## Entrées et sorties
<a name="connectors-inputs-outputs"></a>

De nombreux connecteurs Greengrass peuvent communiquer avec d'autres entités par l'envoi et la réception de messages MQTT. La communication MQTT est contrôlée par des abonnements qui permettent à un connecteur d'échanger des données avec des fonctions Lambda, des appareils clients et d'autres connecteurs du groupe Greengrass, ou AWS IoT avec le service parallèle local. Pour autoriser cette communication, vous devez créer des abonnements dans le groupe auquel le connecteur appartient. Pour de plus amples informations, veuillez consulter [Abonnements gérés dans le flux de travail de messagerie MQTT](gg-sec.md#gg-msg-workflow).

Les connecteurs peuvent être des abonnés aux messages, des éditeurs de messages ou les deux. Chaque connecteur définit les rubriques MQTT qu'il publie ou auquel il s'abonne. Ces rubriques prédéfinies doivent être utilisées dans les abonnements où le connecteur est une source ou une cible de message. Pour les didacticiels qui incluent des étapes pour la configuration d'abonnements d'un connecteur, consultez [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md) et [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md).

**Note**  
De nombreux connecteurs intègrent également des modes de communication pour interagir avec les services de cloud ou locaux. Ils varient selon le connecteur et peuvent exiger que vous configuriez des paramètres ou que vous ajoutiez des autorisations au [rôle de groupe](group-role.md). Pour plus d'informations sur les exigences de connecteur, consultez [AWS- connecteurs Greengrass fournis](connectors-list.md).

### Rubriques d'entrée
<a name="connectors-multiple-topics"></a>

La plupart des connecteurs reçoivent des données en entrée sur les rubriques MQTT. Certains connecteurs s'abonnent à plusieurs rubriques pour les données d'entrée. Par exemple, le connecteur Serial Stream prend en charge deux sujets :
+ `serial/+/read/#`
+ `serial/+/write/#`

Pour ce connecteur, les demandes de lecture et écriture sont envoyées à la rubrique correspondante. Lorsque vous créez des abonnements, assurez-vous d'utiliser la rubrique qui correspond à votre implémentation.

Les caractères `+` et `#` des exemples précédents sont des caractères génériques. Ces caractères génériques autorisent les abonnés à recevoir des messages sur plusieurs rubriques et les éditeurs à personnaliser les rubriques dans lesquelles ils publient.
+ Le caractère générique `+` peut apparaître n'importe où dans la hiérarchie des rubriques. Il peut être remplacé par un élément de la hiérarchie.

  Par exemple, pour la rubrique `sensor/+/input`, les messages peuvent être publiés dans les rubriques `sensor/id-123/input`, mais pas dans `sensor/group-a/id-123/input`.
+ Le caractère générique `#` peut apparaître uniquement à la fin de la hiérarchie des rubriques. Il peut être remplacé par un zéro ou plusieurs éléments de hiérarchie.

  Par exemple, pour une rubrique `sensor/#`, les messages peuvent être publiés dans `sensor/`, `sensor/id-123` et `sensor/group-a/id-123` mais pas dans `sensor`.

Les caractères génériques sont valides uniquement lorsque vous vous abonnez à des rubriques. Les messages ne peuvent pas être publiés dans des rubriques qui contiennent des caractères génériques. Consultez la documentation du connecteur pour plus d'informations sur ses exigences en matière d'entrée ou de sortie. Pour de plus amples informations, veuillez consulter [AWS- connecteurs Greengrass fournis](connectors-list.md).

## Prise en charge de la conteneurisation
<a name="connector-containerization"></a>

Par défaut, la plupart des connecteurs s'exécutent sur le noyau Greengrass dans un environnement d'exécution isolé géré par AWS IoT Greengrass. Ces environnements d'exécution, appelés *conteneurs*, assurent l'isolement entre les connecteurs et le système hôte, ce qui offre plus de sécurité pour l'hôte et le connecteur.

Cependant, cette conteneurisation Greengrass n'est pas prise en charge dans certains environnements, par exemple lorsque vous l'exécutez AWS IoT Greengrass dans un conteneur Docker ou sur d'anciens noyaux Linux sans cgroups. Dans ces environnements, les connecteurs doivent s'exécuter en mode **Aucun conteneur**. Pour rechercher des connecteurs prenant en charge le mode **No container (Aucun conteneur)** veuillez consulter [AWS- connecteurs Greengrass fournis](connectors-list.md). Certains connecteurs s'exécutent en mode natif et certains connecteurs vous permettent de définir le mode d'isolement.

Vous pouvez également définir le mode d'isolement sur **Aucun conteneur** dans les environnements prenant en charge la conteneurisation Greengrass, mais nous vous recommandons d'utiliser le mode **conteneur Greengrass** lorsque cela est possible.

**Note**  
Le paramètre de conteneurisation par défaut pour le groupe Greengrass ne s'applique pas aux [connecteurs](lambda-group-config.md#lambda-containerization-groupsettings).

## Mise à niveau des versions du connecteur
<a name="upgrade-connector-versions"></a>

Les fournisseurs de connecteurs peuvent publier de nouvelles versions d'un connecteur qui ajoutent des fonctions, corrigent des problèmes ou améliorent les performances. Pour de plus amples informations sur les versions disponibles et les modifications associées, veuillez consulter la [documentation de chaque connecteur](connectors-list.md).

Dans la AWS IoT console, vous pouvez vérifier les nouvelles versions des connecteurs de votre groupe Greengrass.

1. <a name="console-gg-groups"></a>Dans le volet de navigation de la AWS IoT console, sous **Gérer**, développez les **appareils Greengrass**, puis choisissez **Groups (V1)**.

1. Dans la **section Groupes Greengrass**, choisissez votre groupe.

1. Choisissez **Connectors (Connecteurs)** pour afficher les connecteurs du groupe.

   Si une nouvelle version est disponible pour un connecteur, un bouton **Available (Disponible)** apparaît dans la colonne **Upgrade (Mise à niveau)**.

1. Pour mettre à niveau la version du connecteur :

   1. À partir de la page **Connectors (Connecteurs)**, dans la colonne **Upgrade (Mise à niveau)**, choisissez **Available (Disponible)**. La page **Upgrade connector (Mettre à niveau le connecteur)** s'ouvre et affiche les paramètres actuels, le cas échéant.

      Choisissez la nouvelle version du connecteur, définissez les paramètres selon vos besoins, puis choisissez **Upgrade (Mettre à niveau)**.

   1. Sur la page **Subscriptions (Abonnements)**, ajoutez de nouveaux abonnements dans le groupe pour remplacer ceux qui utilisent le connecteur en tant que source ou cible. Ensuite, supprimez les anciens abonnements.

      Les abonnements font référence aux connecteurs par version, de sorte qu'ils deviennent non valides si vous modifiez la version du connecteur dans le groupe.

   1. Dans le menu **Actions** choisissez **Deploy (Déployer)** pour déployer vos modifications sur le noyau.

Pour mettre à niveau un connecteur depuis l' AWS IoT Greengrass API, créez et déployez une version de groupe incluant le connecteur et les abonnements mis à jour. Utilisez le même processus que lorsque vous ajoutez un connecteur à un groupe. Pour les étapes détaillées qui vous montrent comment utiliser le connecteur Twilio Notifications AWS CLI pour configurer et déployer un exemple, consultez[Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md).

## Journalisation des connecteurs
<a name="connectors-logging"></a>

Les connecteurs Greengrass contiennent des fonctions Lambda qui écrivent des événements et des erreurs dans les journaux Greengrass. Selon les paramètres de votre groupe, les journaux sont écrits dans CloudWatch Logs, dans le système de fichiers local, ou dans les deux. Les journaux des connecteurs incluent l'ARN de la fonction correspondante. L'exemple d'ARN suivant provient du connecteur Kinesis Firehose :

```
arn:aws:lambda:aws-region:account-id:function:KinesisFirehoseClient:1
```

Par défaut, la configuration de la journalisation écrit des journaux de niveau information dans le système de fichiers à l'aide de la structure de répertoire suivante :

```
greengrass-root/ggc/var/log/user/region/aws/function-name.log
```

Pour plus d'informations sur la journalisation de Greengrass, consultez. [Surveillance à l'aide de AWS IoT Greengrass journaux](greengrass-logs-overview.md)

# AWS- connecteurs Greengrass fournis
<a name="connectors-list"></a>

AWS fournit les connecteurs suivants qui prennent en charge les AWS IoT Greengrass scénarios courants. Pour plus d'information sur le fonctionnement des connecteurs, consultez la documentation suivante :
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Démarrer avec les connecteurs (console)](connectors-console.md) ou [Démarrer avec les connecteurs (CLI)](connectors-cli.md)


| Connecteur | Description | Runtimes Lambda pris en charge | Prend en charge le mode **No container (Aucun conteneur)** | 
| --- | --- | --- | --- | 
| [CloudWatch Métriques](cloudwatch-metrics-connector.md) | Publie des statistiques personnalisées sur Amazon CloudWatch. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Défenseur de l'appareil](device-defender-connector.md) | Envoie les métriques du système à AWS IoT Device Defender. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [Déploiement de l'application Docker](docker-app-connector.md) | Exécute un fichier Docker Compose pour démarrer une application Docker sur l'appareil principal (noyau). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [IoT Analytics](iot-analytics-connector.md) | Envoie les données des appareils et des capteurs à AWS IoT Analytics. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Adaptateur de protocole IP Ethernet IoT](ethernet-ip-connector.md) | Collecte les données des appareils EtherNet/IP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [IoT SiteWise](iot-sitewise-connector.md) | Envoie les données d'appareils et de capteurs vers des propriétés de ressources dans AWS IoT SiteWise. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Kinesis Firehose](kinesis-firehose-connector.md) | Envoie des données aux flux de livraison Amazon Data Firehose. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Commentaires sur le ML](ml-feedback-connector.md) | Publie l'entrée du modèle d'apprentissage automatique dans le cloud et la sortie dans une rubrique MQTT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [Classification des images ML](image-classification-connector.md) | Exécute un service d'inférence de classification de l'image locale. Ce connecteur fournit des versions pour plusieurs plateformes. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [Détection d'objets ML](obj-detection-connector.md) | Exécute un service local d'inférence de détection d'objets. Ce connecteur fournit des versions pour plusieurs plateformes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [Adaptateur de protocole Modbus-RTU](modbus-protocol-adapter-connector.md) | Envoie des requêtes aux appareils Modbus RTU. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [Adaptateur de protocole Modbus-TCP](modbus-tcp-connector.md) | Collecte les données des appareils ModbusTCP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Raspberry Pi GPIO](raspberrypi-gpio-connector.md) | Contrôle les broches GPIO sur un appareil principal Raspberry Pi. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [Stream en série](serial-stream-connector.md) | Lit et écrit dans un port série sur l'appareil principal. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Non | 
| [ServiceNow MetricBase Integration](servicenow-connector.md) | Publie les statistiques des séries chronologiques sur ServiceNow MetricBase. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [SNS](sns-connector.md) | Envoie des messages à une rubrique Amazon SNS. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Intégration à Splunk](splunk-connector.md) | Publie des données dans Splunk HEC. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 
| [Notifications Twilio](twilio-notifications-connector.md) | Lance un message texte ou vocal Twilio. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-list.html) | Oui | 

\$1 Pour utiliser les environnements d'exécution Python 3.8, vous devez 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. Pour plus d'informations, consultez les exigences spécifiques au connecteur.

**Note**  
Nous vous recommandons de [mettre à jour les versions de connecteur](connectors.md#upgrade-connector-versions) de Python 2.7 vers Python 3.7. La prise en charge continue des connecteurs Python 2.7 dépend de la prise en charge de l' AWS Lambda exécution. Pour plus d'informations, consultez la [politique de support en matière d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) dans le *guide du AWS Lambda développeur*.

# CloudWatch Connecteur Metrics
<a name="cloudwatch-metrics-connector"></a>

Le [connecteur CloudWatch ](connectors.md) Metrics publie sur Amazon des métriques personnalisées provenant des appareils Greengrass. CloudWatch Le connecteur fournit une infrastructure centralisée pour publier CloudWatch des métriques, que vous pouvez utiliser pour surveiller et analyser l'environnement principal de Greengrass et agir en fonction des événements locaux. Pour plus d'informations, consultez la section [Utilisation CloudWatch des métriques Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) dans le *guide de CloudWatch l'utilisateur Amazon*.

Ce connecteur reçoit les données des métriques en tant que messages MQTT. Le connecteur regroupe les métriques qui se trouvent dans le même espace de noms et les publie à CloudWatch intervalles réguliers.

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#cloudwatch-metrics-connector-changelog).

## Exigences
<a name="cloudwatch-metrics-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 - 5 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-cloudwatch-metrics-req-iam-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`cloudwatch:PutMetricData`action, comme illustré dans l'exemple de politique Gestion des identités et des accès AWS (IAM) suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "cloudwatch:PutMetricData"
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

  Pour plus d'informations sur CloudWatch les autorisations, consultez la [référence CloudWatch des autorisations Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/permissions-reference-cw.html) dans le *guide de l'utilisateur IAM*.

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-cloudwatch-metrics-req-iam-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`cloudwatch:PutMetricData`action, comme illustré dans l'exemple de politique Gestion des identités et des accès AWS (IAM) suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "cloudwatch:PutMetricData"
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

  Pour plus d'informations sur CloudWatch les autorisations, consultez la [référence CloudWatch des autorisations Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/permissions-reference-cw.html) dans le *guide de l'utilisateur IAM*.

------

## Paramètres du connecteur
<a name="cloudwatch-metrics-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Versions 4 - 5 ]

`PublishInterval`  <a name="cw-metrics-PublishInterval"></a>
Le nombre maximum de secondes à attendre avant de publier les métriques par lot pour un espace de nom donné. La valeur maximale est 900. Pour configurer le connecteur afin qu'il publie les métriques au fur et à mesure qu'elles sont reçues (sans traitement par lot), spécifiez 0.  
Le connecteur publie CloudWatch après avoir reçu 20 métriques dans le même espace de noms ou après l'intervalle spécifié.  
Le connecteur ne garantit pas l'ordre de publier des événements.
Nom d'affichage dans la AWS IoT console : **Intervalle de publication**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `0 - 900`  
Modèle valide : `[0-9]|[1-9]\d|[1-9]\d\d|900`

`PublishRegion`  <a name="cw-metrics-PublishRegion"></a>
Le Région AWS vers lequel publier CloudWatch les statistiques. Cette valeur remplace la région de métriques Greengrass par défaut. Elle est obligatoire uniquement lors de la publication de métriques entre régions.  
Nom d'affichage dans la AWS IoT console : **Région de publication**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^$|([a-z]{2}-[a-z]+-\d{1})`

`MemorySize`  <a name="cw-metrics-MemorySize"></a>
La mémoire (en Ko) à allouer au connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`MaxMetricsToRetain`  <a name="cw-metrics-MaxMetricsToRetain"></a>
Nombre maximal de métriques sur tous les espaces de noms à enregistrer en mémoire avant qu'elles ne soient remplacées par de nouvelles métriques. La valeur minimale est de 2000.  
Cette limite s'applique lorsqu'il n'y a aucune connexion à Internet et que le connecteur démarre pour mettre en tampon les métriques à publier ultérieurement. Lorsque le tampon est plein, les métriques les plus anciennes sont remplacées par de nouvelles métriques. Les métriques d'un espace de nom donné sont remplacées uniquement par des métriques du même espace de nom.  
Les métriques ne sont pas enregistrées si le processus hôte du connecteur est interrompu. Par exemple, cette interruption peut se produire pendant le déploiement du groupe ou lorsque le périphérique redémarre.
Nom affiché dans la AWS IoT console : **nombre maximum de mesures à conserver**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^([2-9]\d{3}|[1-9]\d{4,})$`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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 ]

`PublishInterval`  <a name="cw-metrics-PublishInterval"></a>
Le nombre maximum de secondes à attendre avant de publier les métriques par lot pour un espace de nom donné. La valeur maximale est 900. Pour configurer le connecteur afin qu'il publie les métriques au fur et à mesure qu'elles sont reçues (sans traitement par lot), spécifiez 0.  
Le connecteur publie CloudWatch après avoir reçu 20 métriques dans le même espace de noms ou après l'intervalle spécifié.  
Le connecteur ne garantit pas l'ordre de publier des événements.
Nom d'affichage dans la AWS IoT console : **Intervalle de publication**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `0 - 900`  
Modèle valide : `[0-9]|[1-9]\d|[1-9]\d\d|900`

`PublishRegion`  <a name="cw-metrics-PublishRegion"></a>
Le Région AWS vers lequel publier CloudWatch les statistiques. Cette valeur remplace la région de métriques Greengrass par défaut. Elle est obligatoire uniquement lors de la publication de métriques entre régions.  
Nom d'affichage dans la AWS IoT console : **Région de publication**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^$|([a-z]{2}-[a-z]+-\d{1})`

`MemorySize`  <a name="cw-metrics-MemorySize"></a>
La mémoire (en Ko) à allouer au connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`MaxMetricsToRetain`  <a name="cw-metrics-MaxMetricsToRetain"></a>
Nombre maximal de métriques sur tous les espaces de noms à enregistrer en mémoire avant qu'elles ne soient remplacées par de nouvelles métriques. La valeur minimale est de 2000.  
Cette limite s'applique lorsqu'il n'y a aucune connexion à Internet et que le connecteur démarre pour mettre en tampon les métriques à publier ultérieurement. Lorsque le tampon est plein, les métriques les plus anciennes sont remplacées par de nouvelles métriques. Les métriques d'un espace de nom donné sont remplacées uniquement par des métriques du même espace de nom.  
Les métriques ne sont pas enregistrées si le processus hôte du connecteur est interrompu. Par exemple, cette interruption peut se produire pendant le déploiement du groupe ou lorsque le périphérique redémarre.
Nom affiché dans la AWS IoT console : **nombre maximum de mesures à conserver**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^([2-9]\d{3}|[1-9]\d{4,})$`

------

### Exemple de création de connecteur (AWS CLI)
<a name="cloudwatch-metrics-connector-create"></a>

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

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyCloudWatchMetricsConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/4",
            "Parameters": {
                "PublishInterval" : "600",
                "PublishRegion" : "us-west-2",
                "MemorySize" : "16",
                "MaxMetricsToRetain" : "2500",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d’entrée
<a name="cloudwatch-metrics-connector-data-input"></a>

Ce connecteur accepte les métriques relatives à un sujet MQTT et les publie sur. CloudWatch Les messages d'entrée doivent être au format JSON.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`cloudwatch/metric/put`

**Propriétés des messages**    
`request`  
Informations sur la métrique dans ce message.  
L'objet de la demande contient les données de métrique à publier dans CloudWatch. Les valeurs métriques doivent répondre aux spécifications de l'[https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html)API. Seules les propriétés `namespace`, `metricData.metricName` et `metricData.value` sont obligatoires.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`namespace`  
L'espace de noms défini par l'utilisateur pour les données métriques de cette demande. CloudWatch utilise des espaces de noms comme conteneurs pour les points de données métriques.  
Vous ne pouvez pas spécifier un espace de noms commençant par la chaîne `AWS/` réservée.
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[^:].*`  
`metricData`  
Les données pour la métrique.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`metricName`  
Le nom de la métrique.  
Nécessaire : `true`  
Type : `string`  
`dimensions`  
Les dimensions qui sont associées à la métrique. Les dimensions fournissent des informations supplémentaires sur la métrique et ses données. Une métrique peut définir jusqu'à 10 dimensions.  
Ce connecteur inclut automatiquement une dimension nommée`coreName`, dont la valeur est le nom du noyau.  
Nécessaire : `false`  
Type : `array` d'objets de dimension qui incluent les propriétés suivantes :    
`name`  
Nom de la dimension.  
Nécessaire : `false`  
Type : `string`  
`value`  
Valeur de la dimension.  
Nécessaire : `false`  
Type : `string`  
`timestamp`  
Heure à laquelle les données métriques ont été reçues, exprimée en nombre de secondes écoulées depuis`Jan 1, 1970 00:00:00 UTC`. Si cette valeur n'est pas spécifiée, le connecteur utilise l'heure à laquelle il a reçu le message.  
Nécessaire : `false`  
Type : `timestamp`  
Si vous utilisez entre les versions 1 et 4 de ce connecteur, nous vous recommandons de récupérer l'horodatage séparément pour chaque métrique lorsque vous envoyez plusieurs métriques à partir d'une seule source. N'utilisez pas de variable pour enregistrer l'horodatage.  
`value`  
Valeur de la métrique.  
CloudWatch rejette les valeurs trop petites ou trop grandes. Ces valeurs doivent être dans la plage de `8.515920e-109` à `1.174271e+108` (Base 10) ou `2e-360` à `2e360` (Base 2). Les valeurs spéciales (par exemple, `NaN`, `+Infinity`, `-Infinity`) ne sont pas prises en charge.
Nécessaire : `true`  
Type : `double`  
`unit`  
Unité de la métrique.  
Nécessaire : `false`  
Type : `string`  
Valeurs valides : `Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None`

Restrictions  
Toutes les limites imposées par l' CloudWatch [https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html)API s'appliquent aux métriques lors de l'utilisation de ce connecteur. Les limites suivantes sont particulièrement importantes :  
+ Limite de 40 Ko pour la charge utile d'API
+ 20 métriques par requête d'API
+ 150 transactions par seconde (TPS) pour l'API `PutMetricData`
Pour plus d'informations, consultez [CloudWatch les limites](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html) dans le *guide de CloudWatch l'utilisateur Amazon*.

**Exemple d'entrée**  

```
{
   "request": {
       "namespace": "Greengrass",
       "metricData":
           {
               "metricName": "latency",
               "dimensions": [
                   {
                       "name": "hostname",
                       "value": "test_hostname"
                   }
               ],
               "timestamp": 1539027324,
               "value": 123.0,
               "unit": "Seconds"
            }
    }
}
```

## Données de sortie
<a name="cloudwatch-metrics-connector-data-output"></a>

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

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`cloudwatch/metric/put/status`

**Exemple de sortie : réussite**  
La réponse inclut l'espace de noms des données métriques et le `RequestId` champ de la CloudWatch réponse.  

```
{
   "response": {
        "cloudwatch_rid":"70573243-d723-11e8-b095-75ff2EXAMPLE",
        "namespace": "Greengrass",
        "status":"success"
    }
}
```

**Exemple de sortie : échec**  

```
{
   "response" : {
        "namespace": "Greengrass",
        "error": "InvalidInputException",
        "error_message":"cw metric is invalid",
        "status":"fail"
   }
}
```
Si le connecteur détecte une erreur réessayable (par exemple, des erreurs de connexion), il réessaie de publier dans le lot suivant.

## Exemple d'utilisation
<a name="cloudwatch-metrics-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#cloudwatch-metrics-connector-req) pour le connecteur.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#cloudwatch-metrics-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Ajoutez le connecteur et configurez ses [paramètres](#cloudwatch-metrics-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#cloudwatch-metrics-connector-data-input) et d'envoyer des [données de sortie](#cloudwatch-metrics-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>Dans la AWS IoT console, sur la page **Test**, abonnez-vous à la rubrique relative aux données de sortie pour consulter les messages d'état provenant 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
<a name="cloudwatch-metrics-connector-usage-example"></a>

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 = 'cloudwatch/metric/put'

def create_request_with_all_fields():
    return  {
        "request": {
            "namespace": "Greengrass_CW_Connector",
            "metricData": {
                "metricName": "Count1",
                "dimensions": [
                    {
                        "name": "test",
                        "value": "test"
                    }
                ],
                "value": 1,
                "unit": "Seconds",
                "timestamp": time.time()
            }
        }
    }

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
<a name="cloudwatch-metrics-connector-license"></a>

Le connecteur CloudWatch Metrics inclut les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="cloudwatch-metrics-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 5 | Correctif pour ajouter la prise en charge des horodatages dupliqués dans les données d'entrée. | 
| 4 | <a name="isolation-mode-changelog"></a>Ajout du paramètre `IsolationMode` pour configurer le mode de conteneurisation du connecteur. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="cloudwatch-metrics-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [Utilisation des CloudWatch métriques Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) dans le *guide de CloudWatch l'utilisateur Amazon*
+ [ PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html)dans le *Amazon CloudWatch API Reference*

# Connecteur Device Defender
<a name="device-defender-connector"></a>

Le [connecteur](connectors.md) Device Defender informe les administrateurs des modifications de l'état d'un appareil principal Greengrass. Cela peut permettre d'identifier un comportement inhabituel qui pourrait indiquer un appareil compromis.

Ce connecteur lit les métriques du système depuis le `/proc` répertoire du périphérique principal, puis les publie dans AWS IoT Device Defender. Pour plus de détails sur les rapports sur les mesures, consultez les [spécifications du document relatif aux métriques de l'appareil](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html#DetectMetricsMessagesSpec) dans le *guide du AWS IoT développeur*.

Ce connecteur possède les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/DeviceDefender/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/DeviceDefender/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/DeviceDefender/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#device-defender-connector-changelog).

## Prérequis
<a name="device-defender-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-device-defender-req-itdd-config"></a>AWS IoT Device Defender configuré pour utiliser la fonction de détection afin de suivre les violations. Pour plus d'informations, consultez la section [Detect](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html) dans le *guide du AWS IoT développeur*.
+ <a name="conn-device-defender-req-proc-dir-resource"></a>Une [ressource de volume locale](access-local-resources.md) du groupe Greengrass qui pointe vers le `/proc` répertoire. La ressource doit utiliser les propriétés suivantes :
  + Chemin source : `/proc`
  + Chemin de destination : `/host_proc` (ou une valeur qui correspond au modèle [valide](#param-ProcDestinationPath))
  + AutoAddGroupOwner: `true`
+ <a name="conn-device-defender-req-psutil-v3"></a>La bibliothèque [psutil](https://pypi.org/project/psutil/) installée sur le noyau Greengrass. La version 5.7.0 est la dernière version vérifiée pour fonctionner avec le connecteur.
+ <a name="conn-device-defender-req-cbor-v3"></a>La bibliothèque [cbor](https://pypi.org/project/cbor/) installée sur le noyau Greengrass. La version 1.0.0 est la dernière version vérifiée pour fonctionner avec le connecteur.

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-device-defender-req-itdd-config"></a>AWS IoT Device Defender configuré pour utiliser la fonction de détection afin de suivre les violations. Pour plus d'informations, consultez la section [Detect](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html) dans le *guide du AWS IoT développeur*.
+ <a name="conn-device-defender-req-proc-dir-resource"></a>Une [ressource de volume locale](access-local-resources.md) du groupe Greengrass qui pointe vers le `/proc` répertoire. La ressource doit utiliser les propriétés suivantes :
  + Chemin source : `/proc`
  + Chemin de destination : `/host_proc` (ou une valeur qui correspond au modèle [valide](#param-ProcDestinationPath))
  + AutoAddGroupOwner: `true`
+ <a name="conn-device-defender-req-psutil"></a>La bibliothèque [psutil](https://pypi.org/project/psutil/) installée sur le noyau Greengrass.
+ <a name="conn-device-defender-req-cbor"></a>La bibliothèque [cbor](https://pypi.org/project/cbor/) installée sur le noyau Greengrass.

------

## Paramètres du connecteur
<a name="device-defender-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

`SampleIntervalSeconds`  
Le nombre de secondes entre chaque cycle de collecte et de présentation des métriques. La valeur minimale est de 300 secondes (5 minutes).  
Nom affiché dans la AWS IoT console : **Intervalle entre les rapports des métriques**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]*(?:3[0-9][0-9]|[4-9][0-9]{2}|[1-9][0-9]{3,})$`

`ProcDestinationPath-ResourceId`  
ID de la ressource de volume de `/proc`.  
Ce connecteur bénéficie d'un accès en lecture seule à la ressource.
Nom affiché dans la AWS IoT console : **Ressource pour le répertoire /proc**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[a-zA-Z0-9_-]+`

`ProcDestinationPath`  <a name="param-ProcDestinationPath"></a>
Chemin de destination de la ressource de volume `/proc`.  
Nom affiché dans la AWS IoT console : **chemin de destination de la ressource /proc**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `\/[a-zA-Z0-9_-]+`

### Exemple de création de connecteur (AWS CLI)
<a name="device-defender-connector-create"></a>

La commande CLI suivante crée une `ConnectorDefinition` version initiale contenant le connecteur Device Defender.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyDeviceDefenderConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/DeviceDefender/versions/3",
            "Parameters": {
                "SampleIntervalSeconds": "600",
                "ProcDestinationPath": "/host_proc",
                "ProcDestinationPath-ResourceId": "my-proc-resource"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="device-defender-connector-data-input"></a>

Ce connecteur n'accepte pas les messages MQTT comme données d'entrée.

## Données de sortie
<a name="device-defender-connector-data-output"></a>

Ce connecteur publie les mesures de sécurité AWS IoT Device Defender sous forme de données de sortie.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`$aws/things/+/defender/metrics/json`  
Il s'agit de la syntaxe de rubrique AWS IoT Device Defender attendue. Le connecteur remplace le caractère générique `+` par le nom du périphérique (par exemple, `$aws/things/thing-name/defender/metrics/json`).

**Exemple de sortie**  
Pour plus de détails sur les rapports sur les mesures, consultez les [spécifications du document relatif aux métriques de l'appareil](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html#DetectMetricsMessagesSpec) dans le *guide du AWS IoT développeur*.  

```
{
    "header": {
        "report_id": 1529963534,
        "version": "1.0"
    },
    "metrics": {
        "listening_tcp_ports": {
            "ports": [
                {
                    "interface": "eth0",
                    "port": 24800
                },
                {
                    "interface": "eth0",
                    "port": 22
                },
                {
                    "interface": "eth0",
                    "port": 53
                }
            ],
            "total": 3
        },
        "listening_udp_ports": {
            "ports": [
                {
                    "interface": "eth0",
                    "port": 5353
                },
                {
                    "interface": "eth0",
                    "port": 67
                }
            ],
            "total": 2
        },
        "network_stats": {
            "bytes_in": 1157864729406,
            "bytes_out": 1170821865,
            "packets_in": 693092175031,
            "packets_out": 738917180
        },
        "tcp_connections": {
            "established_connections":{
                "connections": [
                    {
                    "local_interface": "eth0",
                    "local_port": 80,
                    "remote_addr": "192.168.0.1:8000"
                    },
                    {
                    "local_interface": "eth0",
                    "local_port": 80,
                    "remote_addr": "192.168.0.1:8000"
                    }
                ],
                "total": 2
            }
        }
    }
}
```

## Licences
<a name="device-defender-connector-license"></a>

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="device-defender-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="device-defender-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [Device Defender](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html) dans le *guide du AWS IoT développeur*

# Connecteur de déploiement d'applications Docker
<a name="docker-app-connector"></a>

Le connecteur de déploiement d'applications Greengrass Docker facilite l'exécution de vos images Docker sur un noyau. AWS IoT Greengrass Le connecteur utilise Docker Compose pour démarrer une application Docker multi-conteneur à partir d'un fichier `docker-compose.yml`. Plus précisément, le connecteur exécute des commandes `docker-compose` pour gérer les conteneurs Docker sur un appareil principal (noyau) unique. Pour de plus amples informations, veuillez consulter [Overview of Docker Composer](https://docs.docker.com/compose/) dans la documentation Docker. Le connecteur peut accéder aux images Docker stockées dans des registres de conteneurs Docker, tels qu'Amazon Elastic Container Registry (Amazon ECR), Docker Hub et des registres Docker sécurisés privés.

Après avoir déployé le groupe Greengrass, le connecteur extrait les dernières images et démarre les conteneurs Docker. Il exécute la `docker-compose up` commande `docker-compose pull` et. Le connecteur publie ensuite l'état de la commande dans une [rubrique MQTT en sortie](#docker-app-connector-data-output). Il enregistre également des informations d'état concernant l'exécution des conteneurs Docker. Cela vous permet de surveiller les journaux de vos applications sur Amazon CloudWatch. Pour de plus amples informations, veuillez consulter [Surveillance à l'aide de AWS IoT Greengrass journaux](greengrass-logs-overview.md). Le connecteur démarre également les conteneurs Docker à chaque redémarrage du démon Greengrass. Le nombre de conteneurs Docker pouvant s'exécuter sur le noyau dépend de votre matériel.

Les conteneurs Docker s'exécutent en dehors du domaine Greengrass sur l'appareil principal (noyau), de sorte qu'ils ne peuvent pas accéder à la communication inter-processus (IPC) du noyau. Cependant, vous pouvez configurer certains canaux de communication avec des composants Greengrass, tels que les fonctions Lambda locales. Pour de plus amples informations, veuillez consulter [Communication avec les conteneurs Docker](#docker-app-connector-communicating).

Vous pouvez utiliser le connecteur pour des scénarios tels que l'hébergement d'un serveur web ou d'un serveur MySQL sur votre appareil principal (noyau). Les services locaux de vos applications Docker peuvent communiquer entre eux, avec d'autres processus dans l'environnement local et avec des services cloud. Par exemple, vous pouvez exécuter un serveur Web sur le cœur qui envoie des demandes provenant de fonctions Lambda à un service Web dans le cloud.

Ce connecteur s'exécute en mode d'isolation [No container (Aucun conteneur)](lambda-group-config.md#no-container-mode), de sorte que vous pouvez le déployer dans un groupe Greengrass qui s'exécute sans conteneurisation Greengrass.

Ce connecteur possède les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 7 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/7` | 
| 6 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/6` | 
| 5 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#docker-app-connector-changelog).

## Exigences
<a name="docker-app-connector-req"></a>

Ce connecteur possède les critères suivants :
+ AWS IoT Greengrass Logiciel de base v1.10 ou version ultérieure.
**Note**  
Ce connecteur n'est pas pris en charge sur OpenWrt les distributions.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ Un minimum de 36 Mo de RAM sur le noyau Greengrass pour que le connecteur surveille les conteneurs Docker en cours d'exécution. La mémoire totale requise dépend du nombre de conteneurs Docker qui s'exécutent sur le noyau.
+ [Docker Engine](https://docs.docker.com/install/) 1.1.9.1 ou version ultérieure installé sur le noyau Greengrass. La version 19.0.3 est la dernière version vérifiée pour fonctionner avec le connecteur.

  L'exécutable `docker` doit se trouver dans le répertoire `/usr/local/bin` ou `/usr/bin`.
**Important**  
Nous vous recommandons d'installer un magasin d'informations d'identification pour sécuriser les copies locales de vos informations d'identification Docker. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).

  Pour plus d'informations sur l'installation de Docker sur les distributions Amazon Linux, consultez [les bases de Docker pour Amazon ECS dans le manuel Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) *Elastic Container Service Developer Guide*.
+ [Docker Compose](https://docs.docker.com/compose/install/) installé sur le noyau Greengrass. L'exécutable `docker-compose` doit se trouver dans le répertoire `/usr/local/bin` ou `/usr/bin`.

  Les versions suivantes de Docker Compose sont vérifiées pour fonctionner avec le connecteur.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/docker-app-connector.html)
+ Un seul fichier Docker Compose (par exemple,`docker-compose.yml`), stocké dans Amazon Simple Storage Service (Amazon S3). Le format doit être compatible avec la version de Docker Compose installée sur le noyau. Vous devez tester le fichier avant de l'utiliser sur votre noyau. Si vous modifiez le fichier après avoir déployé le groupe Greengrass, vous devez redéployer le groupe pour mettre à jour votre copie locale sur le noyau.
+ Un utilisateur Linux autorisé à appeler le démon Docker local et à écrire dans le répertoire qui stocke la copie locale de votre fichier Compose. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau](#docker-app-connector-linux-user).
+ [Rôle de groupe Greengrass](group-role.md) configuré pour autoriser l'action `s3:GetObject` sur le compartiment S3 qui contient votre fichier Compose. Cette autorisation est illustrée dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowAccessToComposeFileS3Bucket",
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:s3:::bucket-name/*" 
          }
      ]
  }
  ```

------
**Note**  
Si votre compartiment S3 est activé pour la gestion des versions, le rôle doit être configuré pour autoriser également l'`s3:GetObjectVersion`action. Pour plus d'informations, consultez la section [Utilisation du versionnement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).
+ <a name="docker-app-connector-ecr-perms"></a>Si votre fichier Docker Compose fait référence à une image Docker stockée dans Amazon ECR, le [rôle de groupe Greengrass est configuré pour autoriser](group-role.md) ce qui suit :
  + `ecr:GetDownloadUrlForLayer`et `ecr:BatchGetImage` des actions sur vos référentiels Amazon ECR contenant les images Docker.
  + Action `ecr:GetAuthorizationToken` sur vos ressources.

  Les référentiels doivent se trouver dans le même Compte AWS emplacement Région AWS que le connecteur.
**Important**  
Les autorisations associées au rôle de groupe peuvent être assumées par toutes les fonctions et connecteurs Lambda du groupe Greengrass. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).

  Ces autorisations sont affichées dans l'exemple de stratégie suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowGetEcrRepositories",
              "Effect": "Allow",
              "Action": [
                  "ecr:GetDownloadUrlForLayer",
                  "ecr:BatchGetImage"
              ],
              "Resource": [
                  "arn:aws:ecr:us-east-1:123456789012:repository/repository-name"
              ]	
          },
          {
              "Sid": "AllowGetEcrAuthToken",
              "Effect": "Allow",
              "Action": "ecr:GetAuthorizationToken",
              "Resource": "*"
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez les [exemples de politiques de dépôt Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html) dans le guide de l'*utilisateur Amazon ECR.*

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).
+ Si votre fichier Docker Compose fait référence à une image Docker provenant d'[AWS Marketplace](https://aws.amazon.com/marketplace), le connecteur requiert également le respect des conditions suivantes :
  + Vous devez être abonné aux produits en AWS Marketplace conteneur. Pour de plus amples informations, veuillez consulter [Rechercher et s'abonner à des produits de conteneur](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-finding-and-subscribing-to-container-products.html) dans le *Guide des abonnés AWS Marketplace *.
  + AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs). Le connecteur utilise cette fonctionnalité uniquement pour récupérer vos secrets AWS Secrets Manager, et non pour les stocker.
  + Vous devez créer un secret dans Secrets Manager pour chaque AWS Marketplace registre qui stocke une image Docker référencée dans votre fichier Compose. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).
+ Si votre fichier Docker Compose fait référence à une image Docker provenant de référentiels privés dans des registres autres qu'Amazon ECR, tels que Docker Hub, le connecteur répond également aux exigences suivantes :
  + AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs). Le connecteur utilise cette fonctionnalité uniquement pour récupérer vos secrets AWS Secrets Manager, et non pour les stocker.
  + Vous devez créer un secret dans Secrets Manager pour chaque dépôt privé qui stocke une image Docker référencée dans votre fichier Compose. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).
+ Le démon Docker doit être en cours d'exécution lorsque vous déployez un groupe Greengrass contenant ce connecteur.

### Accès aux images Docker à partir de référentiels privés
<a name="access-private-repositories"></a>

Si vous utilisez des informations d'identification pour accéder à vos images Docker, vous devez autoriser le connecteur à y accéder. La façon dont vous procédez dépend de l'emplacement de l'image Docker.

Pour les images Docker stockées sur Amazon ECR, vous autorisez l'obtention de votre jeton d'autorisation dans le rôle du groupe Greengrass. Pour de plus amples informations, veuillez consulter [Exigences](#docker-app-connector-req).

Pour les images Docker stockées dans d'autres référentiels ou registres privés, vous devez créer un secret AWS Secrets Manager pour stocker vos informations de connexion. Cela inclut les images Docker auxquelles vous vous êtes abonné. AWS Marketplace Créez un secret pour chaque référentiel. Si vous mettez à jour vos secrets dans Secrets Manager, les modifications se répercuteront sur le cœur la prochaine fois que vous déploierez le groupe.

**Note**  
Secrets Manager est un service que vous pouvez utiliser pour stocker et gérer en toute sécurité vos informations d'identification, clés et autres secrets dans le AWS Cloud. Pour plus d'informations, voir [Qu'est-ce que c'est AWS Secrets Manager ?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) dans le *guide de AWS Secrets Manager l'utilisateur*.

Chaque secret doit contenir les clés suivantes :


| Clé | Valeur | 
| --- | --- | 
| `username` | Nom d'utilisateur utilisé pour accéder au référentiel ou au registre. | 
| `password` | Mot de passe utilisé pour accéder au référentiel ou au registre. | 
| `registryUrl` | Point de terminaison du registre. Il doit correspondre à l'URL de registre correspondante dans le fichier Compose. | 

**Note**  
Pour autoriser AWS IoT Greengrass l'accès à un secret par défaut, le nom du secret doit commencer par *greengrass-*. Sinon, c'est votre rôle de service Greengrass qui doit accorder l'accès. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Autoriser l'obtention de valeurs secrètes](secrets.md#secrets-config-service-role).

**Pour obtenir les informations de connexion pour les images Docker à partir d' AWS Marketplace**  

1. Obtenez votre mot de passe pour les images Docker à AWS Marketplace l'aide de la `aws ecr get-login-password` commande. Pour plus d’informations, consultez [get-login-password](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login.html) dans la *Référence des commandes de l’AWS CLI *.

   ```
   aws ecr get-login-password
   ```

1. Récupérez l'URL de registre pour l'image Docker. Ouvrez le AWS Marketplace site Web et ouvrez la page de lancement du produit conteneur. Sous **Images du conteneur**, choisissez **Afficher les détails de l'image du conteneur** pour localiser le nom d'utilisateur et l'URL du registre.
Utilisez le nom d'utilisateur, le mot de passe et l'URL de registre récupérés pour créer un secret pour chaque AWS Marketplace registre qui stocke les images Docker référencées dans votre fichier Compose. 

**Pour créer des secrets (console)**  
Dans la AWS Secrets Manager console, choisissez **Autre type de secrets**. Sous **Spécifiez les paires clé/valeur à stocker pour ce secret**, ajoutez des lignes pour `username`, `password` et `registryUrl`. Pour plus d'informations, consultez la section [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de AWS Secrets Manager l'utilisateur*.  

![\[Création d'un secret avec des clés de nom d'utilisateur (username), de mot de passe (password) et registryUrl.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/connectors/secret-docker-trusted-registry.png)


**Pour créer des secrets (interface de ligne de commande)**  
Dans le AWS CLI, utilisez la `create-secret` commande Secrets Manager, comme indiqué dans l'exemple suivant. Pour plus d'informations, voir [create-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/create-secret.html) dans la référence des *AWS CLI commandes*.  

```
aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
```

**Important**  
Il est de votre responsabilité de sécuriser le répertoire `DockerComposeFileDestinationPath` qui stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).

## Parameters
<a name="docker-app-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Version 7 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Nom du compartiment S3 contenant votre fichier Docker Compose. Lorsque vous créez le bucket, assurez-vous de suivre les [règles relatives aux noms de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) décrites dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Nom d'affichage dans la AWS IoT console : **fichier Docker Compose dans S3**  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clé d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives de dénomination des clés d'objet, consultez la section [Clé d'objet et métadonnées](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileS3Version`  
Version d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives relatives à la dénomination des clés d'objet, consultez la section [Utilisation du versionnement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `false`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileDestinationPath`  
Chemin absolu du répertoire local utilisé pour stocker une copie du fichier Docker Compose. Il doit s'agir d'un répertoire existant. L'utilisateur spécifié pour `DockerUserId` doit avoir l'autorisation de créer un fichier dans ce répertoire. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass](#docker-app-connector-linux-user).  
Ce répertoire stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Il est de votre responsabilité de sécuriser ce répertoire. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).
Nom d'affichage dans la AWS IoT console : **chemin du répertoire pour le fichier Compose local**  
Nécessaire : `true`  
Type : `string`  
Schéma valide `\/.*\/?`  
Exemple : `/home/username/myCompose`

`DockerUserId`  
UID de l'utilisateur Linux sous lequel le connecteur s'exécute. Cet utilisateur doit appartenir au groupe Linux `docker` sur l'appareil principal (noyau) et disposer d'autorisations d'écriture dans le répertoire `DockerComposeFileDestinationPath`. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour de plus amples informations, veuillez consulter [Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
Nom affiché dans la AWS IoT console : ID **utilisateur Docker**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Les Amazon Resource Names (ARNs) des secrets AWS Secrets Manager qui contiennent les informations de connexion utilisées pour accéder à vos images Docker dans des référentiels privés. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).  
Nom affiché dans la AWS IoT console : **Informations d'identification pour les référentiels privés**  
Obligatoire : `false`. Ce paramètre est requis pour accéder aux images Docker stockées dans des référentiels privés.  
Type : `array` de `string`  
Modèle valide : `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
Fréquence (en secondes) à laquelle le connecteur enregistre les informations d'état sur les conteneurs Docker en cours d'exécution sur le noyau. La valeur par défaut est de 300 secondes (5 minutes).  
Nom affiché dans la AWS IoT console : **Fréquence de journalisation**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indique s'il faut forcer le déploiement de Docker en cas d'échec dû au nettoyage incorrect du dernier déploiement. La valeur par défaut est `False`.  
Nom affiché dans la AWS IoT console : **Forcer le déploiement**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

`DockerPullBeforeUp`  
Indique si le déployeur doit s'exécuter `docker-compose pull` avant de s'exécuter en raison `docker-compose up` d'un pull-down-up comportement. La valeur par défaut est `True`.  
Nom affiché dans la AWS IoT console : **Docker Pull Before Up**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

`StopContainersOnNewDeployment`  
Indique si le connecteur doit arrêter les conteneurs docker gérés par Docker Deployer lorsque GGC est arrêté (GGC s'arrête lorsqu'un nouveau groupe est déployé ou que le noyau est arrêté). La valeur par défaut est `True`.  
Nom affiché dans la AWS IoT console : **Docker s'arrête lors d'un nouveau déploiement**  
Nous vous recommandons de conserver la `True` valeur par défaut de ce paramètre. Le paramètre to permet `False` à votre conteneur Docker de continuer à fonctionner même après avoir arrêté le AWS IoT Greengrass noyau ou lancé un nouveau déploiement. Si vous définissez ce paramètre sur`False`, vous devez vous assurer que vos conteneurs Docker sont maintenus si nécessaire en cas de modification ou d'ajout de nom de `docker-compose` service.   
Pour plus d'informations, consultez la documentation `docker-compose` du fichier de composition. 
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

`DockerOfflineMode`  
Indique s'il faut utiliser le fichier Docker Compose existant lors du AWS IoT Greengrass démarrage hors ligne. La valeur par défaut est `False`.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

------
#### [ Version 6 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Nom du compartiment S3 contenant votre fichier Docker Compose. Lorsque vous créez le bucket, assurez-vous de suivre les [règles relatives aux noms de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) décrites dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Nom d'affichage dans la AWS IoT console : **fichier Docker Compose dans S3**  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clé d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives de dénomination des clés d'objet, consultez la section [Clé d'objet et métadonnées](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileS3Version`  
Version d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives relatives à la dénomination des clés d'objet, consultez la section [Utilisation du versionnement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `false`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileDestinationPath`  
Chemin absolu du répertoire local utilisé pour stocker une copie du fichier Docker Compose. Il doit s'agir d'un répertoire existant. L'utilisateur spécifié pour `DockerUserId` doit avoir l'autorisation de créer un fichier dans ce répertoire. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass](#docker-app-connector-linux-user).  
Ce répertoire stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Il est de votre responsabilité de sécuriser ce répertoire. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).
Nom d'affichage dans la AWS IoT console : **chemin du répertoire pour le fichier Compose local**  
Nécessaire : `true`  
Type : `string`  
Schéma valide `\/.*\/?`  
Exemple : `/home/username/myCompose`

`DockerUserId`  
UID de l'utilisateur Linux sous lequel le connecteur s'exécute. Cet utilisateur doit appartenir au groupe Linux `docker` sur l'appareil principal (noyau) et disposer d'autorisations d'écriture dans le répertoire `DockerComposeFileDestinationPath`. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour de plus amples informations, veuillez consulter [Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
Nom affiché dans la AWS IoT console : ID **utilisateur Docker**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Les Amazon Resource Names (ARNs) des secrets AWS Secrets Manager qui contiennent les informations de connexion utilisées pour accéder à vos images Docker dans des référentiels privés. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).  
Nom affiché dans la AWS IoT console : **Informations d'identification pour les référentiels privés**  
Obligatoire : `false`. Ce paramètre est requis pour accéder aux images Docker stockées dans des référentiels privés.  
Type : `array` de `string`  
Modèle valide : `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
Fréquence (en secondes) à laquelle le connecteur enregistre les informations d'état sur les conteneurs Docker en cours d'exécution sur le noyau. La valeur par défaut est de 300 secondes (5 minutes).  
Nom affiché dans la AWS IoT console : **Fréquence de journalisation**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indique s'il faut forcer le déploiement de Docker en cas d'échec dû au nettoyage incorrect du dernier déploiement. La valeur par défaut est `False`.  
Nom affiché dans la AWS IoT console : **Forcer le déploiement**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

`DockerPullBeforeUp`  
Indique si le déployeur doit s'exécuter `docker-compose pull` avant de s'exécuter en raison `docker-compose up` d'un pull-down-up comportement. La valeur par défaut est `True`.  
Nom affiché dans la AWS IoT console : **Docker Pull Before Up**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

`StopContainersOnNewDeployment`  
Indique si le connecteur doit arrêter les conteneurs docker gérés par Docker Deployer lorsque GGC est arrêté (lorsqu'un nouveau déploiement de groupe est effectué ou que le noyau est arrêté). La valeur par défaut est `True`.  
Nom affiché dans la AWS IoT console : **Docker s'arrête lors d'un nouveau déploiement**  
Nous vous recommandons de conserver la `True` valeur par défaut de ce paramètre. Le paramètre to permet `False` à votre conteneur Docker de continuer à fonctionner même après avoir arrêté le AWS IoT Greengrass noyau ou lancé un nouveau déploiement. Si vous définissez ce paramètre sur`False`, vous devez vous assurer que vos conteneurs Docker sont maintenus si nécessaire en cas de modification ou d'ajout de nom de `docker-compose` service.   
 Pour plus d'informations, consultez la documentation `docker-compose` du fichier de composition. 
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

------
#### [ Version 5 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Nom du compartiment S3 contenant votre fichier Docker Compose. Lorsque vous créez le bucket, assurez-vous de suivre les [règles relatives aux noms de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) décrites dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Nom d'affichage dans la AWS IoT console : **fichier Docker Compose dans S3**  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clé d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives de dénomination des clés d'objet, consultez la section [Clé d'objet et métadonnées](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileS3Version`  
Version d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives relatives à la dénomination des clés d'objet, consultez la section [Utilisation du versionnement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `false`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileDestinationPath`  
Chemin absolu du répertoire local utilisé pour stocker une copie du fichier Docker Compose. Il doit s'agir d'un répertoire existant. L'utilisateur spécifié pour `DockerUserId` doit avoir l'autorisation de créer un fichier dans ce répertoire. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass](#docker-app-connector-linux-user).  
Ce répertoire stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Il est de votre responsabilité de sécuriser ce répertoire. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).
Nom d'affichage dans la AWS IoT console : **chemin du répertoire pour le fichier Compose local**  
Nécessaire : `true`  
Type : `string`  
Schéma valide `\/.*\/?`  
Exemple : `/home/username/myCompose`

`DockerUserId`  
UID de l'utilisateur Linux sous lequel le connecteur s'exécute. Cet utilisateur doit appartenir au groupe Linux `docker` sur l'appareil principal (noyau) et disposer d'autorisations d'écriture dans le répertoire `DockerComposeFileDestinationPath`. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour de plus amples informations, veuillez consulter [Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
Nom affiché dans la AWS IoT console : ID **utilisateur Docker**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Les Amazon Resource Names (ARNs) des secrets AWS Secrets Manager qui contiennent les informations de connexion utilisées pour accéder à vos images Docker dans des référentiels privés. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).  
Nom affiché dans la AWS IoT console : **Informations d'identification pour les référentiels privés**  
Obligatoire : `false`. Ce paramètre est requis pour accéder aux images Docker stockées dans des référentiels privés.  
Type : `array` de `string`  
Modèle valide : `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
Fréquence (en secondes) à laquelle le connecteur enregistre les informations d'état sur les conteneurs Docker en cours d'exécution sur le noyau. La valeur par défaut est de 300 secondes (5 minutes).  
Nom affiché dans la AWS IoT console : **Fréquence de journalisation**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indique s'il faut forcer le déploiement de Docker en cas d'échec dû au nettoyage incorrect du dernier déploiement. La valeur par défaut est `False`.  
Nom affiché dans la AWS IoT console : **Forcer le déploiement**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

`DockerPullBeforeUp`  
Indique si le déployeur doit s'exécuter `docker-compose pull` avant de s'exécuter en raison `docker-compose up` d'un pull-down-up comportement. La valeur par défaut est `True`.  
Nom affiché dans la AWS IoT console : **Docker Pull Before Up**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

------
#### [ Versions 2 - 4 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Nom du compartiment S3 contenant votre fichier Docker Compose. Lorsque vous créez le bucket, assurez-vous de suivre les [règles relatives aux noms de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) décrites dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Nom d'affichage dans la AWS IoT console : **fichier Docker Compose dans S3**  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clé d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives de dénomination des clés d'objet, consultez la section [Clé d'objet et métadonnées](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileS3Version`  
Version d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives relatives à la dénomination des clés d'objet, consultez la section [Utilisation du versionnement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `false`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileDestinationPath`  
Chemin absolu du répertoire local utilisé pour stocker une copie du fichier Docker Compose. Il doit s'agir d'un répertoire existant. L'utilisateur spécifié pour `DockerUserId` doit avoir l'autorisation de créer un fichier dans ce répertoire. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass](#docker-app-connector-linux-user).  
Ce répertoire stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Il est de votre responsabilité de sécuriser ce répertoire. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).
Nom d'affichage dans la AWS IoT console : **chemin du répertoire pour le fichier Compose local**  
Nécessaire : `true`  
Type : `string`  
Schéma valide `\/.*\/?`  
Exemple : `/home/username/myCompose`

`DockerUserId`  
UID de l'utilisateur Linux sous lequel le connecteur s'exécute. Cet utilisateur doit appartenir au groupe Linux `docker` sur l'appareil principal (noyau) et disposer d'autorisations d'écriture dans le répertoire `DockerComposeFileDestinationPath`. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour de plus amples informations, veuillez consulter [Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
Nom affiché dans la AWS IoT console : ID **utilisateur Docker**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Les Amazon Resource Names (ARNs) des secrets AWS Secrets Manager qui contiennent les informations de connexion utilisées pour accéder à vos images Docker dans des référentiels privés. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).  
Nom affiché dans la AWS IoT console : **Informations d'identification pour les référentiels privés**  
Obligatoire : `false`. Ce paramètre est requis pour accéder aux images Docker stockées dans des référentiels privés.  
Type : `array` de `string`  
Modèle valide : `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
Fréquence (en secondes) à laquelle le connecteur enregistre les informations d'état sur les conteneurs Docker en cours d'exécution sur le noyau. La valeur par défaut est de 300 secondes (5 minutes).  
Nom affiché dans la AWS IoT console : **Fréquence de journalisation**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indique s'il faut forcer le déploiement de Docker en cas d'échec dû au nettoyage incorrect du dernier déploiement. La valeur par défaut est `False`.  
Nom affiché dans la AWS IoT console : **Forcer le déploiement**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^(true|false)$`

------
#### [ Version 1 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
Nom du compartiment S3 contenant votre fichier Docker Compose. Lorsque vous créez le bucket, assurez-vous de suivre les [règles relatives aux noms de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) décrites dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Nom d'affichage dans la AWS IoT console : **fichier Docker Compose dans S3**  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clé d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives de dénomination des clés d'objet, consultez la section [Clé d'objet et métadonnées](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `true`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileS3Version`  
Version d'objet de votre fichier Docker Compose dans Amazon S3. Pour plus d'informations, notamment les directives relatives à la dénomination des clés d'objet, consultez la section [Utilisation du versionnement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Dans la console, la propriété **Docker Compose file in S3 (Fichier Docker Compose dans S3)** combine les paramètres `DockerComposeFileS3Version`, `DockerComposeFileS3Bucket` et `DockerComposeFileS3Key`.
Nécessaire : `false`  
Type : `string`  
Schéma valide `.+`

`DockerComposeFileDestinationPath`  
Chemin absolu du répertoire local utilisé pour stocker une copie du fichier Docker Compose. Il doit s'agir d'un répertoire existant. L'utilisateur spécifié pour `DockerUserId` doit avoir l'autorisation de créer un fichier dans ce répertoire. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass](#docker-app-connector-linux-user).  
Ce répertoire stocke votre fichier Docker Compose et les informations d'identification de vos images Docker provenant de référentiels privés. Il est de votre responsabilité de sécuriser ce répertoire. Pour de plus amples informations, veuillez consulter [Remarque de sécurité](#docker-app-connector-security).
Nom d'affichage dans la AWS IoT console : **chemin du répertoire pour le fichier Compose local**  
Nécessaire : `true`  
Type : `string`  
Schéma valide `\/.*\/?`  
Exemple : `/home/username/myCompose`

`DockerUserId`  
UID de l'utilisateur Linux sous lequel le connecteur s'exécute. Cet utilisateur doit appartenir au groupe Linux `docker` sur l'appareil principal (noyau) et disposer d'autorisations d'écriture dans le répertoire `DockerComposeFileDestinationPath`. Pour de plus amples informations, veuillez consulter [Configuration de l'utilisateur Docker sur le noyau](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour de plus amples informations, veuillez consulter [Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
Nom affiché dans la AWS IoT console : ID **utilisateur Docker**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Les Amazon Resource Names (ARNs) des secrets AWS Secrets Manager qui contiennent les informations de connexion utilisées pour accéder à vos images Docker dans des référentiels privés. Pour de plus amples informations, veuillez consulter [Accès aux images Docker à partir de référentiels privés](#access-private-repositories).  
Nom affiché dans la AWS IoT console : **Informations d'identification pour les référentiels privés**  
Obligatoire : `false`. Ce paramètre est requis pour accéder aux images Docker stockées dans des référentiels privés.  
Type : `array` de `string`  
Modèle valide : `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
Fréquence (en secondes) à laquelle le connecteur enregistre les informations d'état sur les conteneurs Docker en cours d'exécution sur le noyau. La valeur par défaut est de 300 secondes (5 minutes).  
Nom affiché dans la AWS IoT console : **Fréquence de journalisation**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[1-9]{1}[0-9]{0,3}$`

------

### Exemple de création de connecteur (AWS CLI)
<a name="docker-app-connector-create"></a>

La commande CLI suivante crée une `ConnectorDefinition` version initiale contenant le connecteur de déploiement d'applications Greengrass Docker.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyDockerAppplicationDeploymentConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/5",
            "Parameters": {
                "DockerComposeFileS3Bucket": "amzn-s3-demo-bucket",
                "DockerComposeFileS3Key": "production-docker-compose.yml",
                "DockerComposeFileS3Version": "123",
                "DockerComposeFileDestinationPath": "/home/username/myCompose",
                "DockerUserId": "1000",
                "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret1-hash\",\"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret2-hash\"]",
                "DockerContainerStatusLogFrequency": "30",
                "ForceDeploy": "True",
                "DockerPullBeforeUp": "True"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

## Données d’entrée
<a name="docker-app-connector-data-input"></a>

Ce connecteur ne nécessite ni n'accepte les données d'entrée.

## Données de sortie
<a name="docker-app-connector-data-output"></a>

Ce connecteur publie l'état de la commande `docker-compose up` sous forme de données de sortie.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`dockerapplicationdeploymentconnector/message/status`

**Exemple de sortie : réussite**  

```
{
  "status":"success",
  "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", 
  "S3Bucket":"amzn-s3-demo-bucket",
  "ComposeFileName":"production-docker-compose.yml",
  "ComposeFileVersion":"123"
}
```

**Exemple de sortie : échec**  

```
{
  "status":"fail",
  "error_message":"description of error",
  "error":"InvalidParameter"
}
```
Le type d'erreur peut être `InvalidParameter` ou `InternalError`.

## Configuration de l'utilisateur Docker sur le noyau AWS IoT Greengrass
<a name="docker-app-connector-linux-user"></a>

Le connecteur de déploiement de l'application Greengrass Docker s'exécute sous le nom d'utilisateur que vous spécifiez pour le paramètre. `DockerUserId` Si vous ne spécifiez pas de valeur, le connecteur s'exécute en tant que `ggc_user` (identité d'accès Greengrass par défaut).

Pour que le connecteur puisse interagir avec le démon Docker, l'utilisateur Docker doit appartenir au groupe Linux `docker` sur le noyau. L'utilisateur Docker doit également disposer d'autorisations d'écriture dans le répertoire `DockerComposeFileDestinationPath`. C'est à cet emplacement que le connecteur stocke votre fichier `docker-compose.yml` local et les informations d'identification Docker.

**Note**  
Nous vous recommandons de créer un utilisateur Linux au lieu d'utiliser la valeur par défaut `ggc_user`. Sinon, toute fonction Lambda du groupe Greengrass peut accéder au fichier Compose et aux informations d'identification Docker.
<a name="avoid-running-as-root"></a>Nous vous recommandons d'éviter l'exécution en tant que racine à moins que cela ne soit absolument nécessaire. Si vous spécifiez l'utilisateur root, vous devez autoriser les fonctions Lambda à s'exécuter en tant que root sur le AWS IoT Greengrass noyau. Pour de plus amples informations, veuillez consulter [Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).

1. Créez l’utilisateur. Vous pouvez exécuter la commande `useradd` et inclure l'option facultative `-u` pour attribuer un UID. Par exemple :

   ```
   sudo useradd -u 1234 user-name
   ```

1. Ajoutez l'utilisateur au groupe `docker` sur le noyau. Par exemple :

   ```
   sudo usermod -aG docker user-name
   ```

   Pour de plus amples informations, notamment sur la création du groupe `docker`, veuillez consulter [Manage Docker as a non-root user](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user) dans la documentation Docker.

1. Accordez à l'utilisateur les autorisations en écriture dans le répertoire spécifié pour le paramètre `DockerComposeFileDestinationPath`. Par exemple :

   1. Pour définir l'utilisateur en tant que propriétaire du répertoire Cet exemple utilise l'UID de l'étape 1.

      ```
      chown 1234 docker-compose-file-destination-path
      ```

   1. Pour accorder les autorisations en lecture et en écriture au propriétaire

      ```
      chmod 700 docker-compose-file-destination-path
      ```

      Pour de plus amples informations, veuillez consulter [How To Manage File And Folder Permissions In Linux](https://www.linux.com/tutorials/how-manage-file-and-folder-permissions-linux/) dans la documentation Linux Foundation.

   1. Si vous n'avez pas attribué d'UID lors de la création de l'utilisateur, ou si vous avez utilisé un utilisateur existant, exécutez la commande `id` pour rechercher l'UID.

      ```
      id -u user-name
      ```

      Vous utilisez l'UID pour configurer le paramètre `DockerUserId` pour le connecteur.

## Informations d'utilisation
<a name="docker-app-connector-usage-info"></a>

Lorsque vous utilisez le connecteur de déploiement d'applications Greengrass Docker, vous devez connaître les informations d'utilisation spécifiques à l'implémentation suivantes.
+ **Préfixe fixe pour les noms de projets.** Le connecteur ajoute le préfixe `greengrassdockerapplicationdeployment` aux noms des conteneurs Docker qu'il démarre. Le connecteur utilise ce préfixe comme nom de projet dans les commandes `docker-compose` qu'il exécute.
+ **Comportement de journalisation.** Le connecteur écrit des informations d'état et de dépannage dans un fichier journal. Vous pouvez configurer AWS IoT Greengrass pour envoyer des CloudWatch journaux à Logs et pour écrire des journaux localement. Pour de plus amples informations, veuillez consulter [Journalisation des connecteurs](connectors.md#connectors-logging). Voici le chemin d'accès au journal local du connecteur :

  ```
  /greengrass-root/ggc/var/log/user/region/aws/DockerApplicationDeployment.log
  ```

  Vous devez disposer des autorisations root pour accéder aux journaux locaux.
+ **Mise à jour des images Docker.** Docker met en cache les images sur l'appareil principal (noyau). Si vous mettez à jour une image Docker et que vous souhaitez propager la modification à l'appareil principal (noyau), assurez-vous de modifier la balise de l'image dans le fichier Compose. Les modifications prennent effet après le déploiement du groupe Greengrass.
+ **Délai d'attente de 10 minutes pour les opérations de nettoyage.** Lorsque le daemon Greengrass s'arrête lors d'un redémarrage, la `docker-compose down` commande est lancée. Tous les conteneurs Docker disposent d'un maximum de 10 minutes après `docker-compose down` leur lancement pour effectuer toute opération de nettoyage. Si le nettoyage n'est pas terminé dans les 10 minutes, vous devez nettoyer les conteneurs restants manuellement. Pour de plus amples informations, veuillez consulter [docker rm](https://docs.docker.com/engine/reference/commandline/rm/) dans la documentation de l'interface de ligne de commande Docker.
+ **Exécution de commandes Docker.** Pour résoudre les problèmes, vous pouvez exécuter des commandes Docker dans une fenêtre de terminal sur l'appareil principal (noyau). Par exemple, exécutez la commande suivante pour afficher les conteneurs Docker qui ont été démarrés par le connecteur :

  ```
  docker ps --filter name="greengrassdockerapplicationdeployment"
  ```
+ **ID de ressource réservée.** Le connecteur utilise l'ID `DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_index` pour les ressources Greengrass qu'il crée dans le groupe Greengrass. La ressource IDs doit être unique dans le groupe. N'attribuez donc pas d'ID de ressource susceptible d'entrer en conflit avec cet ID de ressource réservé.
+ **Mode hors ligne.** Lorsque vous définissez le paramètre de `DockerOfflineMode` configuration sur`True`, le connecteur Docker peut fonctionner en *mode hors ligne*. Cela peut se produire lorsqu'un déploiement de groupe Greengrass redémarre alors que l'appareil principal est hors ligne et que le connecteur ne peut pas établir de connexion avec Amazon S3 ou Amazon ECR pour récupérer le fichier Docker Compose.

  Lorsque le mode hors ligne est activé, le connecteur tente de télécharger votre fichier Compose et d'exécuter des `docker login` commandes comme il le ferait pour un redémarrage normal. Si ces tentatives échouent, le connecteur recherche un fichier Compose stocké localement dans le dossier spécifié à l'aide du `DockerComposeFileDestinationPath` paramètre. S'il existe un fichier Compose local, le connecteur suit la séquence normale de `docker-compose` commandes et extrait des images locales. Si le fichier Compose ou les images locales ne sont pas présents, le connecteur échoue. Le comportement des `StopContainersOnNewDeployment` paramètres `ForceDeploy` et reste le même en mode hors ligne. 

## Communication avec les conteneurs Docker
<a name="docker-app-connector-communicating"></a>

AWS IoT Greengrass prend en charge les canaux de communication suivants entre les composants Greengrass et les conteneurs Docker :
+ Les fonctions Greengrass Lambda peuvent utiliser REST APIs pour communiquer avec les processus dans les conteneurs Docker. Vous pouvez configurer un serveur dans un conteneur Docker qui ouvre un port. Les fonctions Lambda peuvent communiquer avec le conteneur sur ce port.
+ Les processus dans les conteneurs Docker peuvent échanger des messages MQTT via le courtier de messages Greengrass local. Vous pouvez configurer le conteneur Docker en tant qu'appareil client dans le groupe Greengrass, puis créer des abonnements pour permettre au conteneur de communiquer avec les fonctions Lambda de Greengrass, les appareils clients et les autres connecteurs du groupe, AWS IoT ou avec le service parallèle local. Pour de plus amples informations, veuillez consulter [Configurer la communication MQTT avec les conteneurs Docker](#docker-app-connector-mqtt-communication).
+ Les fonctions Greengrass Lambda peuvent mettre à jour un fichier partagé pour transmettre des informations aux conteneurs Docker. Vous pouvez utiliser le fichier Compose pour effectuer un montage lié du chemin d'accès du fichier partagé pour un conteneur Docker.

### Configurer la communication MQTT avec les conteneurs Docker
<a name="docker-app-connector-mqtt-communication"></a>

Vous pouvez configurer un conteneur Docker en tant que périphérique client et l'ajouter à un groupe Greengrass. Ensuite, vous pouvez créer des abonnements permettant la communication MQTT entre le conteneur Docker et les composants Greengrass ou AWS IoT. Dans la procédure suivante, vous créez un abonnement qui permet à l'appareil du conteneur Docker de recevoir des messages de mise à jour shadow à partir du service shadow local. Vous pouvez suivre ce modèle pour créer d'autres abonnements.

**Note**  
Cette procédure suppose que vous avez déjà créé un groupe Greengrass et un noyau Greengrass (v1.10 ou version ultérieure). Pour plus d'informations sur la création d'un groupe et d'un noyau Greengrass, consultez. [Commencer avec AWS IoT Greengrass](gg-gs.md)

**Pour configurer un conteneur Docker en tant qu'appareil client et l'ajouter à un groupe Greengrass**

1. Créez un dossier sur l'appareil principal pour stocker les certificats et les clés utilisés pour authentifier l'appareil Greengrass.

   Le chemin d'accès du fichier doit être monté sur le conteneur Docker que vous souhaitez démarrer. L'extrait suivant montre comment monter un chemin d'accès de fichier dans votre fichier Compose. Dans cet exemple, *path-to-device-certs* représente le dossier que vous avez créé à cette étape.

   ```
   version: '3.3'
   services:
     myService:
       image: user-name/repo:image-tag
       volumes:
         -  /path-to-device-certs/:/path-accessible-in-container
   ```

1. <a name="console-gg-groups"></a>Dans le volet de navigation de la AWS IoT console, sous **Gérer**, développez les **appareils Greengrass**, puis choisissez **Groups (V1)**.

1. <a name="group-choose-target-group"></a>Choisissez le groupe cible.

1. <a name="gg-group-add-device"></a>Sur la page de configuration du groupe, choisissez **Appareils clients**, puis sélectionnez **Associer**.

1. <a name="gg-group-create-device"></a>Dans le mode **Associer un appareil client à ce groupe**, choisissez **Create new AWS IoT thing**.

   La page **Créer des objets** s'ouvre dans un nouvel onglet.

1. <a name="gg-group-create-single-thing"></a>Sur la page **Créer des objets**, choisissez **Créer un objet unique**, puis cliquez sur **Suivant**.

1. Sur la page **Spécifier les propriétés de l'objet**, entrez le nom de l'appareil, puis choisissez **Suivant**.

1. <a name="gg-group-create-device-configure-certificate"></a>Sur la page **Configurer le certificat de l'appareil**, choisissez **Next**.

1. <a name="gg-group-create-device-attach-policy"></a>Sur la page **Attacher des politiques au certificat**, effectuez l'une des opérations suivantes :
   + Sélectionnez une politique existante qui accorde les autorisations requises par les appareils clients, puis choisissez **Create thing**.

     Un modal s'ouvre dans lequel vous pouvez télécharger les certificats et les clés que l'appareil utilise pour se connecter au AWS Cloud et au noyau.
   + Créez et joignez une nouvelle politique qui accorde des autorisations aux appareils clients. Procédez comme suit :

     1. Choisissez **Create Policy** (Créer une politique).

        La page **Créer une stratégie** s'ouvre dans un nouvel onglet.

     1. Sur la page **Create policy** (Créer une stratégie), procédez comme suit :

        1. Dans **Nom de la stratégie**, entrez un nom qui décrit la stratégie, tel que**GreengrassV1ClientDevicePolicy**.

        1. Dans l'onglet **Déclarations de politique**, sous **Document de stratégie**, sélectionnez **JSON**.

        1. Entrez le document de politique suivant. Cette politique permet à l'appareil client de découvrir les cœurs de Greengrass et de communiquer sur tous les sujets MQTT. Pour plus d'informations sur la façon de restreindre l'accès à cette politique, consultez[Authentification et autorisation de l'appareil pour AWS IoT Greengrass](device-auth.md).

------
#### [ JSON ]

****  

           ```
           {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
               {
                 "Effect": "Allow",
                 "Action": [
                   "iot:Publish",
                   "iot:Subscribe",
                   "iot:Connect",
                   "iot:Receive"
                 ],
                 "Resource": [
                   "*"
                 ]
               },
               {
                 "Effect": "Allow",
                 "Action": [
                   "greengrass:*"
                 ],
                 "Resource": [
                   "*"
                 ]
               }
             ]
           }
           ```

------

        1. Choisissez **Create (Créer)** pour créer la politique.

     1. Retournez à l'onglet du navigateur avec la page **Joindre les politiques au certificat** ouverte. Procédez comme suit :

        1. Dans la liste des **politiques**, sélectionnez la politique que vous avez créée, telle que **GreengrassV1ClientDevicePolicy**.

           Si vous ne voyez pas la politique, cliquez sur le bouton d'actualisation.

        1. Choisissez **Créer objet**.

           Un modal s'ouvre dans lequel vous pouvez télécharger les certificats et les clés que l'appareil utilise pour se connecter au AWS Cloud et au noyau.

1. <a name="gg-group-create-device-download-certs"></a>Dans le modal **Télécharger les certificats et les clés**, téléchargez les certificats de l'appareil.
**Important**  
Avant de choisir **OK**, téléchargez les ressources de sécurité.

   Procédez comme suit :

   1. Pour le **certificat de l'appareil**, choisissez **Télécharger** pour télécharger le certificat de l'appareil.

   1. Pour **le fichier de clé publique**, choisissez **Télécharger** pour télécharger la clé publique du certificat.

   1. Pour **Fichier de clé privée**, choisissez **Télécharger** pour télécharger le fichier de clé privée pour le certificat.

   1. Passez en revue [l'authentification du serveur](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html) dans le *guide du AWS IoT développeur* et choisissez le certificat CA racine approprié. Nous vous recommandons d'utiliser les points de terminaison Amazon Trust Services (ATS) et les certificats CA racine ATS. Sous **Certificats de l'autorité de certification racine**, choisissez **Télécharger** pour un certificat de l'autorité de certification racine.

   1. Sélectionnez **Exécuté**.

   Notez l'ID de certificat commun aux noms de fichiers du certificat et des clés de l'appareil. Vous en aurez besoin ultérieurement.

1. Copiez les certificats et les clés dans le dossier que vous avez créé à l'étape 1.

Ensuite, créez un abonnement dans le groupe. Pour cet exemple, vous créez un abonnement qui permet à l'appareil du conteneur Docker de recevoir des messages MQTT à partir du service shadow local.

**Note**  
La taille maximale d'un document shadow est de 8 Ko. Pour plus d'informations, consultez la section sur [AWS IoT les quotas](https://docs.aws.amazon.com/iot/latest/developerguide/limits-iot.html) dans le *guide du AWS IoT développeur*.

**Pour créer un abonnement permettant à l'appareil de conteneur Docker de recevoir des messages MQTT du service shadow local**

1. <a name="shared-subscriptions-addsubscription"></a>Sur la page de configuration du groupe, choisissez l'onglet **Abonnements**, puis choisissez **Ajouter un abonnement**.

1. Sur la page **Sélectionnez la source et la cible**, configurez la source et la cible comme suit :

   1. Dans **Sélectionner une source**, choisissez **Services**, puis **Service shadow local**.

   1. Pour **Sélectionnez une cible**, choisissez **Appareils**, puis choisissez votre appareil.

   1. Choisissez **Suivant**.

   1. Sur la page **Filtrer vos données à l'aide d'une rubrique****, dans Filtrer** par rubrique**\$1aws/things/*MyDockerDevice*/shadow/update/accepted**, sélectionnez, puis cliquez sur **Suivant**. *MyDockerDevice*Remplacez-le par le nom de l'appareil que vous avez créé précédemment.

   1. Choisissez **Finish** (Terminer).

Incluez l'extrait de code suivant dans l'image Docker que vous référencez dans votre fichier Compose. C'est le code de l'appareil Greengrass. Ajoutez également du code dans votre conteneur Docker pour démarrer l'appareil Greengrass à l'intérieur du conteneur. Il peut s'exécuter comme un processus distinct dans l'image ou dans un thread distinct.

```
import os
import sys
import time
import uuid

from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider
from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

# Replace thingName with the name you registered for the Docker device.
thingName = "MyDockerDevice"
clientId = thingName

# Replace host with the IoT endpoint for your &AWS-account;.
host = "myPrefix.iot.region.amazonaws.com"

# Replace topic with the topic where the Docker container subscribes.
topic = "$aws/things/MyDockerDevice/shadow/update/accepted"

# Replace these paths based on the download location of the certificates for the Docker container.
rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem"
certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt"
privateKeyPath = "/path-accessible-in-container/certId-private.pem.key"


# Discover Greengrass cores.
discoveryInfoProvider = DiscoveryInfoProvider()
discoveryInfoProvider.configureEndpoint(host)
discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath)
discoveryInfoProvider.configureTimeout(10)  # 10 seconds.

GROUP_CA_PATH = "./groupCA/"
MQTT_QOS = 1

discovered = False
groupCA = None
coreInfo = None

try:
    # Get discovery info from AWS IoT.
    discoveryInfo = discoveryInfoProvider.discover(thingName)
    caList = discoveryInfo.getAllCas()
    coreList = discoveryInfo.getAllCores()

    # Use first discovery result.
    groupId, ca = caList[0]
    coreInfo = coreList[0]

    # Save the group CA to a local file.
    groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt"
    if not os.path.exists(GROUP_CA_PATH):
        os.makedirs(GROUP_CA_PATH)
    groupCAFile = open(groupCA, "w")
    groupCAFile.write(ca)
    groupCAFile.close()
    discovered = True
except DiscoveryInvalidRequestException as e:
    print("Invalid discovery request detected!")
    print("Type: %s" % str(type(e)))
    print("Error message: %s" % str(e))
    print("Stopping...")
except BaseException as e:
    print("Error in discovery!")
    print("Type: %s" % str(type(e)))
    print("Error message: %s" % str(e))
    print("Stopping...")

myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath)


# Try to connect to the Greengrass core.
connected = False
for connectivityInfo in coreInfo.connectivityInfoList:
    currentHost = connectivityInfo.host
    currentPort = connectivityInfo.port
    myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort)
    try:
        myAWSIoTMQTTClient.connect()
        connected = True
    except BaseException as e:
        print("Error in connect!")
        print("Type: %s" % str(type(e)))
        print("Error message: %s" % str(e))
    if connected:
        break

if not connected:
    print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn)
    sys.exit(-2)

# Handle the MQTT message received from GGShadowService.
def customCallback(client, userdata, message):
    print("Received an MQTT message")
    print(message)

# Subscribe to the MQTT topic.
myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback)

# Keep the process alive to listen for messages.
while True:
    time.sleep(1)
```

## Remarque de sécurité
<a name="docker-app-connector-security"></a>

Lorsque vous utilisez le connecteur de déploiement d'applications Greengrass Docker, tenez compte des considérations de sécurité suivantes.

  
**Stockage local du fichier Docker Compose**  
Le connecteur stocke une copie de votre fichier Compose dans le répertoire spécifié pour le paramètre `DockerComposeFileDestinationPath`.  
Il est de votre responsabilité de sécuriser ce répertoire. Vous devez utiliser les autorisations du système de fichiers pour restreindre l'accès au répertoire.

  
**Stockage local des informations d'identification Docker**  
Si vos images Docker sont stockées dans des référentiels privés, le connecteur stocke vos informations d'identification Docker dans le répertoire spécifié pour le paramètre `DockerComposeFileDestinationPath`.  
Il est de votre responsabilité de sécuriser ces informations d'identification. Par exemple, vous devez utiliser l'[assistant des informations d'identification (credential-helper)](https://docs.docker.com/engine/reference/commandline/login/#credentials-store) sur l'appareil principal (noyau) lorsque vous installez Docker Engine.

  
**Installation de Docker Engine à partir d'une source fiable**  
Il est de votre responsabilité d'installer Docker Engine à partir d'une source fiable. Ce connecteur utilise le démon Docker sur l'appareil principal (noyau) pour accéder à vos ressources Docker et gérer les conteneurs Docker.

  
**Portée des autorisations de rôle de groupe Greengrass**  
Les autorisations que vous ajoutez dans le rôle de groupe Greengrass peuvent être assumées par toutes les fonctions et connecteurs Lambda du groupe Greengrass. Ce connecteur nécessite l'accès à votre fichier Docker Compose stocké dans un compartiment S3. Cela nécessite également l'accès à votre jeton d'autorisation Amazon ECR si vos images Docker sont stockées dans un référentiel privé sur Amazon ECR.

## Licences
<a name="docker-app-connector-license"></a>

Le connecteur de déploiement d'applications Greengrass Docker inclut les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="docker-app-connector-changelog"></a>

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


|  Version  |  Modifications  | 
| --- | --- | 
|  7  |  Ajouté `DockerOfflineMode` pour utiliser un fichier Docker Compose existant lors d'un AWS IoT Greengrass démarrage hors ligne. Rétentatives implémentées pour la `docker login` commande. Support pour 32 bits. UIDs   | 
|  6  |  Ajouté `StopContainersOnNewDeployment` pour annuler le nettoyage des conteneurs lorsqu'un nouveau déploiement est effectué ou que GGC s'arrête. Mécanismes d'arrêt et de démarrage plus sûrs. Correction d'un bogue de validation YAML.  | 
|  5  |  Les images sont extraites avant de courir`docker-compose down`.  | 
|  4  |  Ajout d' pull-before-upun comportement pour mettre à jour les images Docker.  | 
|  3  |  Correction d'un problème lié à la recherche des variables d'environnement.  | 
|  2  |  Ajout du paramètre `ForceDeploy`.  | 
|  1  |  Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="docker-app-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# Connecteur IoT Analytics
<a name="iot-analytics-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le connecteur IoT Analytics envoie les données des appareils locaux à AWS IoT Analytics. Vous pouvez utiliser ce connecteur comme hub central pour collecter des données à partir de capteurs situés sur le périphérique principal de Greengrass et à partir d'appareils [clients connectés](what-is-gg.md#greengrass-devices). Le connecteur envoie les données aux AWS IoT Analytics canaux de la région actuelle Compte AWS et de la région. Il peut envoyer des données vers un canal de destination par défaut et des canaux spécifiés dynamiquement.

**Note**  
AWS IoT Analytics est un service entièrement géré qui vous permet de collecter, de stocker, de traiter et d'interroger des données IoT. Dans AWS IoT Analytics, les données peuvent être analysées et traitées ultérieurement. Par exemple, elles peuvent être utilisées pour former des modèles ML pour surveiller l'état des machines ou pour tester de nouvelles stratégies de modélisation. Pour plus d'informations, voir [Qu'est-ce que c'est AWS IoT Analytics ?](https://docs.aws.amazon.com/iotanalytics/latest/userguide/welcome.html) dans le *guide de AWS IoT Analytics l'utilisateur*.

Le connecteur accepte les données formatées et non formatées sur [les rubriques d'entrée MQTT](#iot-analytics-connector-data-input). Il prend en charge deux rubriques prédéfinies où le canal de destination est spécifié en ligne. Il peut également recevoir des messages sur des rubriques définies par le client qui sont [configurées dans les abonnements](connectors.md#connectors-inputs-outputs). Cela peut être utilisé pour acheminer des messages depuis des appareils clients qui publient vers des sujets fixes ou pour gérer des données non structurées ou dépendantes de la pile provenant d'appareils aux ressources limitées.

Ce connecteur utilise l'[https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-batchputmessage](https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-batchputmessage)API pour envoyer des données (sous forme de chaîne JSON ou codée en base64) au canal de destination. Le connecteur peut traiter les données brutes dans un format conforme aux exigences de l'API. Le connecteur met en tampon les messages d'entrée dans des files d'attente par canal et traite les lots de façon asynchrone. Il fournit des paramètres qui vous permettent de contrôler le comportement de traitement par lots et de mise en file d'attente, et de limiter la consommation de mémoire. Par exemple, vous pouvez configurer la taille maximale de la file d'attente, l'intervalle des lots, la taille de la mémoire et le nombre de canaux actifs.

Ce connecteur possède les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#iot-analytics-connector-changelog).

## Prérequis
<a name="iot-analytics-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-iot-analytics-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)les deux [AWS IoT Analytics](https://docs.aws.amazon.com/general/latest/gr/iot-analytics.html)sont pris en charge.
+ <a name="conn-iot-analytics-req-ita-config"></a>Toutes les AWS IoT Analytics entités et tous les flux de travail associés sont créés et configurés. Les entités comprennent les canaux, le pipeline, les banques de données et les ensembles de données. Pour plus d'informations, consultez les procédures [AWS CLI](https://docs.aws.amazon.com/iotanalytics/latest/userguide/getting-started.html) ou [console](https://docs.aws.amazon.com/iotanalytics/latest/userguide/quickstart.html) dans le *Guide de l'utilisateur AWS IoT Analytics *.
**Note**  
Les AWS IoT Analytics chaînes de destination doivent utiliser le même compte et se trouver dans Région AWS le même connecteur.
+ <a name="conn-iot-analytics-req-iam-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`iotanalytics:BatchPutMessage`action sur les canaux de destination, comme illustré dans l'exemple de politique IAM suivant. Les chaînes doivent se trouver dans la région actuelle Compte AWS .

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "iotanalytics:BatchPutMessage"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_1_name",
      "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_2_name"
              ]
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-iot-analytics-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)les deux [AWS IoT Analytics](https://docs.aws.amazon.com/general/latest/gr/iot-analytics.html)sont pris en charge.
+ <a name="conn-iot-analytics-req-ita-config"></a>Toutes les AWS IoT Analytics entités et tous les flux de travail associés sont créés et configurés. Les entités comprennent les canaux, le pipeline, les banques de données et les ensembles de données. Pour plus d'informations, consultez les procédures [AWS CLI](https://docs.aws.amazon.com/iotanalytics/latest/userguide/getting-started.html) ou [console](https://docs.aws.amazon.com/iotanalytics/latest/userguide/quickstart.html) dans le *Guide de l'utilisateur AWS IoT Analytics *.
**Note**  
Les AWS IoT Analytics chaînes de destination doivent utiliser le même compte et se trouver dans Région AWS le même connecteur.
+ <a name="conn-iot-analytics-req-iam-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`iotanalytics:BatchPutMessage`action sur les canaux de destination, comme illustré dans l'exemple de politique IAM suivant. Les chaînes doivent se trouver dans la région actuelle Compte AWS .

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "iotanalytics:BatchPutMessage"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_1_name",
      "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_2_name"
              ]
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------

## Parameters
<a name="iot-analytics-connector-param"></a>

`MemorySize`  
Quantité de mémoire (en Ko) allouée à ce connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`PublishRegion`  
Le dans Région AWS lequel vos AWS IoT Analytics chaînes sont créées. Utilisez la même région que le connecteur.  
Cela doit également correspondre à la région pour les canaux qui sont spécifiés dans le [rôle de groupe](#iot-analytics-connector-req).
Nom d'affichage dans la AWS IoT console : **Région de publication**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^$|([a-z]{2}-[a-z]+-\\d{1})`

`PublishInterval`  
Intervalle (en secondes) pendant lequel un lot de données reçues est publié sur AWS IoT Analytics.  
Nom d'affichage dans la AWS IoT console : **Intervalle de publication**  
Nécessaire : `false`  
Type : `string`  
Valeur par défaut : `1`  
Modèle valide : `$|^[0-9]+$`

`IotAnalyticsMaxActiveChannels`  
Nombre maximal de AWS IoT Analytics canaux que le connecteur surveille activement. Ce nombre doit être supérieur à 0 et au moins égal au nombre de canaux que le connecteur publiera à un moment donné.  
Vous pouvez utiliser ce paramètre pour restreindre la consommation de mémoire en limitant le nombre total de files d'attente que le connecteur peut gérer à un moment donné. Une file d'attente est supprimée lorsque tous les messages en file d'attente sont envoyés.  
Nom affiché dans la AWS IoT console : **Nombre maximum de canaux actifs**  
Nécessaire : `false`  
Type : `string`  
Valeur par défaut : `50`  
Modèle valide : `^$|^[1-9][0-9]*$`

`IotAnalyticsQueueDropBehavior`  
Comportement pour supprimer des messages d'une file d'attente de canal lorsque la file d'attente est pleine.  
Nom affiché dans la AWS IoT console : **comportement de suppression des files d'attente**  
Nécessaire : `false`  
Type : `string`  
Valeurs valides : `DROP_NEWEST` ou `DROP_OLDEST`  
Valeur par défaut : `DROP_NEWEST`  
Modèle valide : `^DROP_NEWEST$|^DROP_OLDEST$`

`IotAnalyticsQueueSizePerChannel`  
Nombre maximal de messages à conserver en mémoire (par canal) avant que les messages soient soumis ou abandonnés. Ce nombre doit être supérieur à 0.  
Nom affiché dans la AWS IoT console : **taille maximale de la file d'attente par canal**  
Nécessaire : `false`  
Type : `string`  
Valeur par défaut : `2048`  
Modèle valide : `^$|^[1-9][0-9]*$`

`IotAnalyticsBatchSizePerChannel`  
Nombre maximal de messages à envoyer à un AWS IoT Analytics canal dans le cadre d'une demande par lot. Ce nombre doit être supérieur à 0.  
Nom affiché dans la AWS IoT console : **nombre maximum de messages à traiter par lot par canal**  
Nécessaire : `false`  
Type : `string`  
Valeur par défaut : `5`  
Modèle valide : `^$|^[1-9][0-9]*$`

`IotAnalyticsDefaultChannelName`  
Nom du AWS IoT Analytics canal utilisé par ce connecteur pour les messages envoyés à un sujet de saisie défini par le client.  
Nom affiché dans la AWS IoT console : **nom du canal par défaut**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^[a-zA-Z0-9_]$`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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$`

### Exemple de création de connecteur (AWS CLI)
<a name="iot-analytics-connector-create"></a>

La commande CLI suivante crée `ConnectorDefinition` une version initiale contenant le connecteur IoT Analytics.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyIoTAnalyticsApplication",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/3",
            "Parameters": {
                "MemorySize": "65535",
                "PublishRegion": "us-west-1",
                "PublishInterval": "2",
                "IotAnalyticsMaxActiveChannels": "25",
                "IotAnalyticsQueueDropBehavior": "DROP_OLDEST",
                "IotAnalyticsQueueSizePerChannel": "1028",
                "IotAnalyticsBatchSizePerChannel": "5",
                "IotAnalyticsDefaultChannelName": "my_channel"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="iot-analytics-connector-data-input"></a>

Ce connecteur accepte les données sur des rubriques MQTT prédéfinies et définies par le client. Les éditeurs peuvent être des appareils clients, des fonctions Lambda ou d'autres connecteurs.

Rubriques prédéfinies  
Le connecteur prend en charge deux rubriques MQTT structurées qui permettent aux éditeurs de spécifier le nom du canal en ligne.  
+ Un [message formaté](#iot-analytics-connector-data-input-json) sur la rubrique `iotanalytics/channels/+/messages/put`. Les données IoT dans ces messages d'entrée doivent se présenter sous la forme d'un fichier JSON ou d'une chaîne encodée en base64.
+ Un message non formaté sur la rubrique `iotanalytics/channels/+/messages/binary/put`. Les messages d'entrée reçus sur cette rubrique sont traités comme des données binaires et peuvent contenir n'importe quel type de données.

  Pour publier dans des rubriques prédéfinies, remplacez le caractère générique `+` par le nom du canal. Par exemple :

  ```
  iotanalytics/channels/my_channel/messages/put
  ```

Rubriques définies par le client  
Le connecteur prend en charge la syntaxe de rubrique `#`, ce qui lui permet d'accepter les messages d'entrée sur n'importe quelle rubrique MQTT que vous configurez dans un abonnement. Nous vous recommandons de spécifier un chemin de rubrique au lieu d'utiliser uniquement le `#` caractère générique dans vos abonnements. Ces messages sont envoyés au canal par défaut que vous spécifiez pour le connecteur.  
Les messages d'entrée sur les rubriques définies par le client sont traités comme des données binaires. Ils peuvent utiliser n'importe quel format de message et peuvent contenir n'importe quel type de données. Vous pouvez utiliser les rubriques définies par le client pour acheminer les messages à partir des appareils qui publient dans des rubriques fixes. Vous pouvez également les utiliser pour accepter des données d'entrée provenant de périphériques clients qui ne peuvent pas les traiter dans un message formaté à envoyer au connecteur.  
Pour plus d'informations sur les abonnements et les rubriques MQTT, consultez [Entrées et sorties](connectors.md#connectors-inputs-outputs).

Le rôle de groupe doit autoriser l'action `iotanalytics:BatchPutMessage` sur tous les canaux de destination. Pour de plus amples informations, veuillez consulter [Prérequis](#iot-analytics-connector-req).

**Filtre de rubriques :** `iotanalytics/channels/+/messages/put`  <a name="iot-analytics-connector-data-input-json"></a>
Utilisez cette rubrique pour envoyer des messages formatés au connecteur et spécifier dynamiquement un canal de destination. Cette rubrique vous permet également de spécifier un ID qui est renvoyé dans la réponse. Le connecteur vérifie que IDs chaque message de la `BatchPutMessage` demande sortante à laquelle il est envoyé est unique. AWS IoT Analytics Un message qui a un ID dupliqué est abandonné.  
Les données d'entrée envoyées à cette rubrique doivent utiliser le format de message suivant.    
**Propriétés des messages**    
`request`  
Données à envoyer au canal spécifié.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`message`  
Données de l'appareil ou du capteur au format JSON ou sous forme de chaîne encodée en base64.  
Nécessaire : `true`  
Type : `string`  
`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 omettez cette propriété, le connecteur génère un ID.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `.*`  
**Exemple d'entrée**  

```
{
    "request": {
        "message" : "{\"temp\":23.33}"
    },
    "id" : "req123"
}
```

**Filtre de rubriques :** `iotanalytics/channels/+/messages/binary/put`  
Utilisez cette rubrique pour envoyer des messages non formatés au connecteur et spécifier dynamiquement un canal de destination.  
Les données du connecteur n'analysent pas les messages d'entrée reçus dans cette rubrique. Elles sont traitées comme des données binaires. Avant d'envoyer les messages à AWS IoT Analytics, le connecteur les code et les formate conformément aux exigences de `BatchPutMessage` l'API :  
+ Le connecteur en base64 code les données brutes et inclut la charge utile codée dans une demande `BatchPutMessage` sortante.
+ Le connecteur génère et attribue un ID à chaque message d'entrée.
**Note**  
La réponse du connecteur n'inclut pas de corrélation d'ID pour ces messages d'entrée.  
**Propriétés des messages**  
Aucune.

**Filtre de rubriques :** `#`  
Utilisez cette rubrique pour envoyer n'importe quel format de message au canal par défaut. Cela est particulièrement utile lorsque vos appareils clients publient sur des sujets fixes ou lorsque vous souhaitez envoyer des données vers le canal par défaut depuis des appareils clients qui ne peuvent pas traiter les données dans le [format de message pris en charge par](#iot-analytics-connector-data-input-json) le connecteur.  
Vous définissez la syntaxe de rubrique dans l'abonnement que vous créez pour connecter ce connecteur à la source de données. Nous vous recommandons de spécifier un chemin de rubrique au lieu d'utiliser uniquement le `#` caractère générique dans vos abonnements.  
Les données du connecteur n'analysent pas les messages qui sont publiés dans cette rubrique d'entrée. Tous les messages d'entrée sont traités comme des données binaires. Avant d'envoyer les messages à AWS IoT Analytics, le connecteur les code et les formate conformément aux exigences de `BatchPutMessage` l'API :  
+ Le connecteur en base64 code les données brutes et inclut la charge utile codée dans une demande `BatchPutMessage` sortante.
+ Le connecteur génère et attribue un ID à chaque message d'entrée.
**Note**  
La réponse du connecteur n'inclut pas de corrélation d'ID pour ces messages d'entrée.  
**Propriétés des messages**  
Aucune.

## Données de sortie
<a name="iot-analytics-connector-data-output"></a>

Ce connecteur publie des informations d'état sous forme de données de sortie dans une rubrique MQTT. Ces informations contiennent la réponse renvoyée par AWS IoT Analytics pour chaque message d'entrée qu'elle reçoit et auquel elle est envoyée AWS IoT Analytics.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`iotanalytics/messages/put/status`

**Exemple de sortie : réussite**  

```
{
    "response" : {
        "status" : "success"
    },
    "id" : "req123"
}
```

**Exemple de sortie : échec**  

```
{
    "response" : {
        "status" : "fail",
        "error" : "ResourceNotFoundException",
        "error_message" : "A resource with the specified name could not be found."
    },
    "id" : "req123"
}
```
Si le connecteur détecte une erreur réessayable (par exemple, des erreurs de connexion), il réessaie de publier dans le lot suivant. Le recul exponentiel est géré par le AWS SDK. Les demandes qui échouent avec des erreurs pouvant être retentées sont ajoutées à la file d'attente des canaux pour la publication en fonction du paramètre `IotAnalyticsQueueDropBehavior`.

## Exemple d'utilisation
<a name="iot-analytics-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#iot-analytics-connector-req) pour le connecteur.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#iot-analytics-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass principal pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Ajoutez le connecteur et configurez ses [paramètres](#iot-analytics-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#iot-analytics-connector-data-input) et d'envoyer des [données de sortie](#iot-analytics-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="iot-analytics-connector-usage-example"></a>

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 = 'iotanalytics/channels/my_channel/messages/put'
 
def create_request_with_all_fields():
    return  {
        "request": {
            "message" : "{\"temp\":23.33}"
        },
        "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
```

## Restrictions
<a name="iot-analytics-connector-limits"></a>

Ce connecteur est soumis aux limites suivantes.
+ Toutes les limites imposées par le AWS SDK pour Python (Boto3) pour l' AWS IoT Analytics [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotanalytics.html#IoTAnalytics.Client.batch_put_message](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotanalytics.html#IoTAnalytics.Client.batch_put_message)action.
+ Tous les quotas imposés par l' AWS IoT Analytics [ BatchPutMessage](https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-batchputmessage)API. Pour plus d'informations, consultez la section [Quotas de service](https://docs.aws.amazon.com/general/latest/gr/iot-analytics.html#limits_iot_analytics) pour AWS IoT Analytics dans le *Références générales AWS*.
  + 100 000 messages par seconde par canal.
  + 100 messages par lot.
  + 128 Ko par message.

  Cette API utilise des noms de canaux (et non de canaux ARNs), de sorte que l'envoi de données vers des canaux entre régions ou entre comptes n'est pas pris en charge.
+ Tous les quotas imposés par le AWS IoT Greengrass Core. Pour plus d'informations, consultez la section [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass) pour le AWS IoT Greengrass noyau dans le *Références générales AWS*.

  Les quotas suivants peuvent être plus particulièrement applicables :
  + La taille maximale des messages envoyés par un appareil est de 128 Ko.
  + La taille maximale de la file d'attente des messages du routeur principal Greengrass est de 2,5 Mo.
  + La longueur maximale d'une chaîne de rubrique est de 256 octets de caractères codés UTF-8.

## Licences
<a name="iot-analytics-connector-license"></a>

Le connecteur IoT Analytics inclut les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="iot-analytics-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 4 | Ajoute le `IsolationMode` paramètre permettant de configurer le mode de conteneurisation du connecteur. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="iot-analytics-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+  [Qu'est-ce que c'est AWS IoT Analytics ?](https://docs.aws.amazon.com/iotanalytics/latest/userguide/welcome.html) dans le *guide de AWS IoT Analytics l'utilisateur*

# Connecteur adaptateur de protocole IP Ethernet IoT
<a name="ethernet-ip-connector"></a>

Le [connecteur](connectors.md) de protocole IP Ethernet IoT collecte les données des appareils locaux à l'aide du protocole EtherNet/IP. Vous pouvez utiliser ce connecteur pour collecter des données provenant de plusieurs appareils et les publier dans un flux de `StreamManager` messages. 

Vous pouvez également utiliser ce connecteur avec le SiteWise connecteur IoT et votre SiteWise passerelle IoT. Votre passerelle doit fournir la configuration du connecteur. Pour plus d'informations, voir [Configurer une source EtherNet/IP (EIP) dans le guide de l'utilisateur](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-eip-source.html) de l'IoT SiteWise . 

**Note**  
Ce connecteur fonctionne en mode [sans isolation de conteneur](lambda-group-config.md#no-container-mode), vous pouvez donc le déployer dans un AWS IoT Greengrass groupe exécuté dans un conteneur Docker. 

Ce connecteur possède les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 2 (recommandé) | `arn:aws:greengrass:region::/connectors/IoTEIPProtocolAdaptor/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/IoTEIPProtocolAdaptor/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#ethernet-ip-connector-changelog).

## Prérequis
<a name="ethernet-ip-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 1 and 2 ]
+ AWS IoT Greengrass Logiciel de base v1.10.2 ou version ultérieure.
+ Le gestionnaire de flux est activé sur le AWS IoT Greengrass groupe.
+ Java 8 installé sur le périphérique principal et ajouté à la variable d'`PATH`environnement.
+ Un minimum de 256 Mo de RAM supplémentaire. Cette exigence s'ajoute aux exigences en matière de mémoire de AWS IoT Greengrass base.

**Note**  
 Ce connecteur est disponible uniquement dans les régions suivantes :   
cn-north-1
ap-southeast-1
ap-southeast-2
eu-central-1
eu-west-1
us-east-1
us-west-2

------

## Paramètres du connecteur
<a name="ethernet-ip-connector-param"></a>

Ce connecteur prend en charge les paramètres suivants :

`LocalStoragePath`  
Le répertoire de l' AWS IoT Greengrass hôte dans lequel le SiteWise connecteur IoT peut écrire des données persistantes. Le répertoire par défaut est `/var/sitewise`.  
Nom affiché dans la AWS IoT console : **chemin de stockage local**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^\s*$|\/.`

`ProtocolAdapterConfiguration`  
Ensemble de configurations de collecteurs EtherNet/IP à partir desquelles le connecteur collecte des données ou auxquelles il se connecte. Il peut s'agir d'une liste vide.  
Nom affiché dans la AWS IoT console : **Configuration de l'adaptateur de protocole**  
Nécessaire : `true`  
Type : chaîne JSON bien formée qui définit l'ensemble des configurations de feedback prises en charge.

 Voici un exemple de `ProtocolAdapterConfiguration` : 

```
{
    "sources": [
        {
            "type": "EIPSource",
            "name": "TestSource",
            "endpoint": {
                "ipAddress": "52.89.2.42",
                "port": 44818
            },
            "destination": {
                "type": "StreamManager",
                "streamName": "MyOutput_Stream",
                "streamBufferSize": 10
            },
            "destinationPathPrefix": "EIPSource_Prefix",
            "propertyGroups": [
                {
                    "name": "DriveTemperatures",
                    "scanMode": {
                        "type": "POLL",
                        "rate": 10000
                    },
                    "tagPathDefinitions": [
                        {
                            "type": "EIPTagPath",
                            "path": "arrayREAL[0]",
                            "dstDataType": "double"
                        }
                    ]
                }
            ]
        }
    ]
}
```

### Exemple de création de connecteur (AWS CLI)
<a name="eip-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur IoT Ethernet IP Protocol Adapter.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version 
'{
    "Connectors": [
        {
            "Id": "MyIoTEIPProtocolConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTEIPProtocolAdaptor/versions/2",
            "Parameters": {
                "ProtocolAdaptorConfiguration": "{ \"sources\": [{ \"type\": \"EIPSource\", \"name\": \"Source1\", \"endpoint\": { \"ipAddress\": \"54.245.77.218\", \"port\": 44818 }, \"destinationPathPrefix\": \"EIPConnector_Prefix\", \"propertyGroups\": [{ \"name\": \"Values\", \"scanMode\": { \"type\": \"POLL\", \"rate\": 2000 }, \"tagPathDefinitions\": [{ \"type\": \"EIPTagPath\", \"path\": \"arrayREAL[0]\", \"dstDataType\": \"double\" }]}]}]}",
                "LocalStoragePath": "/var/MyIoTEIPProtocolConnectorState"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

## Données d'entrée
<a name="ethernet-ip-connector-data-input"></a>

Ce connecteur n'accepte pas les messages MQTT comme données d'entrée.

## Données de sortie
<a name="ethernet-ip-connector-data-output"></a>

Ce connecteur publie des données sur`StreamManager`. Vous devez configurer le flux de messages de destination. Les messages de sortie ont la structure suivante :

```
{
    "alias": "string",
    "messages": [
        {
            "name": "string",
            "value": boolean|double|integer|string,
            "timestamp": number,
            "quality": "string"
        }
    ]
}
```

## Licences
<a name="ethernet-ip-connector-license"></a>

Le connecteur de protocole IP Ethernet IoT inclut les logiciels/licences tiers suivants :
+ [Client EtherNet/IP](https://github.com/digitalpetri/ethernet-ip/blob/master/LICENSE)
+ [Base de données cartographique](https://github.com/jankotek/mapdb/blob/master/LICENSE.txt)
+ [Elsa](https://github.com/jankotek/elsa/blob/master/LICENSE.txt)

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="ethernet-ip-connector-changelog"></a>

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


| Version | Modifications | Date | 
| --- | --- | --- | 
| 2 | Cette version contient des corrections de bugs. | 23 décembre 2021 | 
| 1 | Première version. | 15 décembre 2020 | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="ethernet-ip-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# SiteWise Connecteur IoT
<a name="iot-sitewise-connector"></a>

Le SiteWise connecteur IoT envoie les données des appareils et équipements locaux aux propriétés des actifs dans AWS IoT SiteWise. Vous pouvez utiliser ce connecteur pour collecter des données provenant de plusieurs serveurs OPC-UA et les publier sur l'IoT. SiteWise Le connecteur envoie les données aux propriétés des actifs dans la région actuelle Compte AWS et dans la région.

**Note**  
L'IoT SiteWise est un service entièrement géré qui collecte, traite et visualise les données provenant d'appareils et d'équipements industriels. Vous pouvez configurer les propriétés des ressources afin qu'elles effectuent un traitement des données brutes envoyées par ce connecteur aux propriétés de mesure de vos ressources. Par exemple, vous pouvez définir une propriété de transformation qui convertit en Fahrenheit les points de données de température d'un appareil exprimés en Celsius, ou vous pouvez définir une propriété de mesure qui calcule la température horaire moyenne. Pour plus d’informations, consultez [Présentation de AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/) dans le *Guide de l’utilisateur AWS IoT SiteWise *.

Le connecteur envoie des données à l'IoT SiteWise avec les chemins de flux de données OPC-UA envoyés par les serveurs OPC-UA. Par exemple, le chemin de flux de données `/company/windfarm/3/turbine/7/temperature` peut représenter le capteur de température de la turbine n°7 au parc éolien n°3. Si le AWS IoT Greengrass cœur perd la connexion à Internet, le connecteur met en cache les données jusqu'à ce qu'il puisse se connecter correctement au AWS Cloud. Vous pouvez configurer la taille maximale du tampon disque utilisée pour la mise en cache des données. Si la taille du cache dépasse la taille maximale du tampon disque, le connecteur supprime les données les plus anciennes de la file d'attente.

Après avoir configuré et déployé le SiteWise connecteur IoT, vous pouvez ajouter une passerelle et des sources OPC-UA dans la console [IoT SiteWise ](https://console.aws.amazon.com/iotsitewise/). Lorsque vous configurez une source dans la console, vous pouvez filtrer ou préfixer les chemins de flux de données OPC-UA envoyés par le connecteur IoT. SiteWise Pour obtenir des instructions sur la manière de terminer la configuration de votre passerelle et de vos sources, veuillez consulter [Ajout de la passerelle](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway.html#add-gateway) dans le *Guide de l'utilisateur AWS IoT SiteWise *.

L'IoT SiteWise reçoit des données uniquement à partir de flux de données que vous avez mappés aux propriétés de mesure des SiteWise actifs IoT. Pour mapper des flux de données aux propriétés des ressources, vous pouvez définir l'alias d'une propriété comme équivalent à un chemin de flux de données OPC-UA. Pour de plus amples informations sur la définition de modèles de ressource et la création de ressources, veuillez consulter [Modélisation de ressources industrielles](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-asset-models) dans le *Guide de l'utilisateur AWS IoT SiteWise *.

**Remarques**  
Vous pouvez utiliser le gestionnaire de flux pour télécharger des données vers l'IoT à SiteWise partir de sources autres que les serveurs OPC-UA. Le gestionnaire de flux fournit également un support personnalisable pour la persistance et la gestion de la bande passante. Pour de plus amples informations, veuillez consulter [Gérez les flux de données sur le AWS IoT Greengrass cœur](stream-manager.md).  
Ce connecteur fonctionne en mode [sans isolation de conteneur](lambda-group-config.md#no-container-mode). Vous pouvez donc le déployer sur un groupe Greengrass exécuté dans un conteneur Docker.

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 12 (recommandé) | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/12` | 
| 11 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/11` | 
| 10 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/10` | 
| 9 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/9` | 
| 8 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/8` | 
| 7 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/7` | 
| 6 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/6` | 
| 5 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#iot-sitewise-connector-changelog).

## Prérequis
<a name="iot-sitewise-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 9, 10, 11, and 12 ]

**Important**  
Cette version introduit de nouvelles exigences : logiciel de AWS IoT Greengrass base v1.10.2 et [gestionnaire de flux](stream-manager.md).
+ AWS IoT Greengrass Logiciel de base v1.10.2.
+ <a name="conn-sitewise-req-stream-manager"></a>[Gestionnaire de flux](stream-manager.md) activé sur le groupe Greengrass.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 installé sur l'appareil principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sitewise-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où les deux technologies [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et [l'IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) sont pris en charge.
+ <a name="conn-sitewise-req-policy-v3"></a>Une politique IAM a été ajoutée au rôle de groupe Greengrass. Ce rôle permet au AWS IoT Greengrass groupe d'accéder à l'`iotsitewise:BatchPutAssetPropertyValue`action sur l'actif racine cible et ses enfants, comme illustré dans l'exemple suivant. Vous pouvez le supprimer `Condition` de la politique pour permettre au connecteur d'accéder à tous vos SiteWise actifs IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez la section [Ajout et suppression de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dans le Guide de l'*utilisateur IAM*.

------
#### [ Versions 6, 7, and 8 ]

**Important**  
Cette version introduit de nouvelles exigences : le logiciel de AWS IoT Greengrass base v1.10.0 et le gestionnaire de [flux](stream-manager.md).
+ <a name="conn-sitewise-req-ggc-1010"></a>AWS IoT Greengrass Logiciel de base v1.10.0.
+ <a name="conn-sitewise-req-stream-manager"></a>[Gestionnaire de flux](stream-manager.md) activé sur le groupe Greengrass.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 installé sur l'appareil principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sitewise-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où les deux technologies [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et [l'IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) sont pris en charge.
+ <a name="conn-sitewise-req-policy-v3"></a>Une politique IAM a été ajoutée au rôle de groupe Greengrass. Ce rôle permet au AWS IoT Greengrass groupe d'accéder à l'`iotsitewise:BatchPutAssetPropertyValue`action sur l'actif racine cible et ses enfants, comme illustré dans l'exemple suivant. Vous pouvez le supprimer `Condition` de la politique pour permettre au connecteur d'accéder à tous vos SiteWise actifs IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez la section [Ajout et suppression de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dans le Guide de l'*utilisateur IAM*.

------
#### [ Version 5 ]
+ <a name="conn-sitewise-req-ggc-194"></a>AWS IoT Greengrass Logiciel de base v1.9.4.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 installé sur l'appareil principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sitewise-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où les deux technologies [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et [l'IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) sont pris en charge.
+ <a name="conn-sitewise-req-policy-v3"></a>Une politique IAM a été ajoutée au rôle de groupe Greengrass. Ce rôle permet au AWS IoT Greengrass groupe d'accéder à l'`iotsitewise:BatchPutAssetPropertyValue`action sur l'actif racine cible et ses enfants, comme illustré dans l'exemple suivant. Vous pouvez le supprimer `Condition` de la politique pour permettre au connecteur d'accéder à tous vos SiteWise actifs IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez la section [Ajout et suppression de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dans le Guide de l'*utilisateur IAM*.

------
#### [ Version 4 ]
+ <a name="conn-sitewise-req-ggc-1010"></a>AWS IoT Greengrass Logiciel de base v1.10.0.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 installé sur l'appareil principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sitewise-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où les deux technologies [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et [l'IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) sont pris en charge.
+ <a name="conn-sitewise-req-policy-v3"></a>Une politique IAM a été ajoutée au rôle de groupe Greengrass. Ce rôle permet au AWS IoT Greengrass groupe d'accéder à l'`iotsitewise:BatchPutAssetPropertyValue`action sur l'actif racine cible et ses enfants, comme illustré dans l'exemple suivant. Vous pouvez le supprimer `Condition` de la politique pour permettre au connecteur d'accéder à tous vos SiteWise actifs IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez la section [Ajout et suppression de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dans le Guide de l'*utilisateur IAM*.

------
#### [ Version 3 ]
+ <a name="conn-sitewise-req-ggc-194"></a>AWS IoT Greengrass Logiciel de base v1.9.4.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 installé sur l'appareil principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sitewise-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où les deux technologies [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et [l'IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) sont pris en charge.
+ <a name="conn-sitewise-req-policy-v3"></a>Une politique IAM a été ajoutée au rôle de groupe Greengrass. Ce rôle permet au AWS IoT Greengrass groupe d'accéder à l'`iotsitewise:BatchPutAssetPropertyValue`action sur l'actif racine cible et ses enfants, comme illustré dans l'exemple suivant. Vous pouvez le supprimer `Condition` de la politique pour permettre au connecteur d'accéder à tous vos SiteWise actifs IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez la section [Ajout et suppression de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dans le Guide de l'*utilisateur IAM*.

------
#### [ Versions 1 and 2 ]
+ <a name="conn-sitewise-req-ggc-194"></a>AWS IoT Greengrass Logiciel de base v1.9.4.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 installé sur l'appareil principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sitewise-req-regions"></a>Ce connecteur ne peut être utilisé que dans les régions Amazon Web Services où les deux technologies [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et [l'IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) sont pris en charge.
+ <a name="conn-sitewise-req-policy-v1"></a>Une politique IAM ajoutée au rôle de groupe Greengrass permet d'accéder AWS IoT Core à `iotsitewise:BatchPutAssetPropertyValue` l'actif racine cible et à ses enfants et d'agir sur ceux-ci, comme illustré dans l'exemple suivant. Vous pouvez le supprimer `Condition` de la politique pour permettre au connecteur d'accéder à tous vos SiteWise actifs IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          },
          {
              "Effect": "Allow",
              "Action": [
                   "iot:Connect",
                   "iot:DescribeEndpoint",
                   "iot:Publish",
                   "iot:Receive",
                   "iot:Subscribe"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

  Pour plus d’informations, consultez [Ajout et suppression d’autorisations basées sur l’identité IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) dans le *Guide de l’utilisateur IAM*.

------

## Parameters
<a name="iot-sitewise-connector-param"></a>

------
#### [ Versions 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, and 12 ]<a name="conn-sitewise-params-v2"></a>

`SiteWiseLocalStoragePath`  
Le répertoire de l' AWS IoT Greengrass hôte dans lequel le SiteWise connecteur IoT peut écrire des données persistantes. La valeur par défaut est `/var/sitewise` .  
Nom affiché dans la AWS IoT console : **chemin de stockage local**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^\s*$|\/.`

`AWSSecretsArnList`  
Une liste de secrets AWS Secrets Manager contenant chacun une paire clé-valeur de nom d'utilisateur et de mot de passe OPC-UA. Chaque secret doit être un secret de type paire clé-valeur.  
Nom affiché dans la AWS IoT console : **Liste des quatre secrets ARNs OPC-UA username/password **  
Nécessaire : `false`  
Type : `JsonArrayOfStrings`  
Schéma valide : `\[( ?,? ?\"(arn:(aws(-[a-z]+)*):secretsmanager:[a-z0-9\\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\\\]+\/)*[a-zA-Z0-9\/_+=,.@\\-]+-[a-zA-Z0-9]+)*\")*\]`

`MaximumBufferSize`  
Taille maximale en Go pour l'utilisation des SiteWise disques IoT. La valeur par défaut est 10 Go.  
Nom affiché dans la AWS IoT console : **taille maximale de la mémoire tampon du disque**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^\s*$|[0-9]+`

------
#### [ Version 1 ]<a name="conn-sitewise-params-v1"></a>

`SiteWiseLocalStoragePath`  
Le répertoire de l' AWS IoT Greengrass hôte dans lequel le SiteWise connecteur IoT peut écrire des données persistantes. La valeur par défaut est `/var/sitewise` .  
Nom affiché dans la AWS IoT console : **chemin de stockage local**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^\s*$|\/.`

`SiteWiseOpcuaUserIdentityTokenSecretArn`  
Le secret contient la paire AWS Secrets Manager clé-valeur du nom d'utilisateur et du mot de passe OPC-UA. Ce secret doit être un secret de type paire clé-valeur.  
Nom affiché dans la AWS IoT console : **ARN du secret OPC-UA username/password **  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^$|arn:(aws(-[a-z]+)*):secretsmanager:[a-z0-9\\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\\\]+/)*[a-zA-Z0-9/_+=,.@\\-]+-[a-zA-Z0-9]+`

`SiteWiseOpcuaUserIdentityTokenSecretArn-ResourceId`  
La ressource secrète du AWS IoT Greengrass groupe qui fait référence à un nom d'utilisateur et à un mot de passe secret OPC-UA.  
Nom affiché dans la AWS IoT console : ressource **secrète OPC-UA username/password **  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^$|.+`

`MaximumBufferSize`  
Taille maximale en Go pour l'utilisation des SiteWise disques IoT. La valeur par défaut est 10 Go.  
Nom affiché dans la AWS IoT console : **taille maximale de la mémoire tampon du disque**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^\s*$|[0-9]+`

------

### Exemple de création de connecteur (AWS CLI)
<a name="iot-sitewise-connector-create"></a>

La AWS CLI commande suivante crée un `ConnectorDefinition` avec une version initiale contenant le SiteWise connecteur IoT.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyIoTSiteWiseConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/11"
        }
    ]
}'
```

**Note**  
Les fonctions Lambda de ce connecteur ont un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="iot-sitewise-connector-data-input"></a>

Ce connecteur n'accepte pas les messages MQTT comme données d'entrée.

## Données de sortie
<a name="iot-sitewise-connector-data-output"></a>

Ce connecteur ne publie pas les messages MQTT en tant que données de sortie.

## Restrictions
<a name="iot-sitewise-connector-limits"></a>

Ce connecteur est soumis à toutes les limites imposées par l'IoT SiteWise, y compris les suivantes. Pour plus d'informations, consultez la section [AWS IoT SiteWise Points de terminaison et quotas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) dans le. *Références générales AWS* 
+ Nombre maximum de passerelles par. Compte AWS
+ Nombre maximal de sources OPC-UA par passerelle.
+ Débit maximal de points de données timestamp-quality-value (TQV) stockés par. Compte AWS
+ Taux maximal de points de données TQV stockés par propriété de ressource.

## Licences
<a name="iot-sitewise-connector-license"></a>

------
#### [ Version 9, 10, 11, and 12 ]

Le SiteWise connecteur IoT inclut les logiciels/licences tiers suivants :
+  [Base de données cartographique](https://github.com/jankotek/mapdb/blob/master/LICENSE.txt) 
+  [Elsa](https://github.com/jankotek/elsa/blob/master/LICENSE.txt) 
+ [Éclipse Milo](https://github.com/eclipse/milo/blob/maintenance/0.2/LICENSE)

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

------
#### [ Versions 6, 7, and 8 ]

Le SiteWise connecteur IoT inclut les logiciels/licences tiers suivants :
+ [Milo](https://github.com/eclipse/milo/) / EDL 1.0

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

------
#### [ Versions 1, 2, 3, 4, and 5 ]

Le SiteWise connecteur IoT inclut les logiciels/licences tiers suivants :
+ [Milo](https://github.com/eclipse/milo/) / EDL 1.0
+ [Chronicle-Queue](https://github.com/OpenHFT/Chronicle-Queue) / Licence Apache 2.0

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

------

## Journal des modifications
<a name="iot-sitewise-connector-changelog"></a>

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


| Version | Modifications | Date | 
| --- | --- | --- | 
|  12  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/iot-sitewise-connector.html)  |  22 décembre 2021  | 
|  11  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/iot-sitewise-connector.html)  |  24 mars 2021  | 
|  10  |  Configuré `StreamManager` pour améliorer la gestion lorsque la connexion source est perdue puis rétablie. Cette version accepte également les valeurs OPC-UA avec un `ServerTimestamp` lorsque non `SourceTimestamp` est disponible.  |  22 janvier 2021  | 
|  9  |  Support lancé pour les destinations de `StreamManager` streaming Greengrass personnalisées, le deadbanding OPC-UA, le mode de scan personnalisé et le taux de scan personnalisé. Inclut également des performances améliorées lors des mises à jour de configuration effectuées à partir de la SiteWise passerelle IoT.  |  15 décembre 2020  | 
|  8  |  Stabilité améliorée lorsque le connecteur est confronté à une connectivité réseau intermittente.  |  19 novembre 2020  | 
|  7  |  Correction d'un problème lié aux métriques de passerelle.  |  14 août 2020  | 
|  6  |  Ajout de la prise en charge des CloudWatch métriques et de la découverte automatique de nouvelles balises OPC-UA. Cette version nécessite un [gestionnaire de flux](stream-manager.md) et le logiciel AWS IoT Greengrass Core v1.10.0 ou supérieur.  |  29 avril 2020  | 
|  5  |  Correction d'un problème de compatibilité avec le logiciel AWS IoT Greengrass Core v1.9.4.  |  12 février 2020  | 
|  4  |  Correction d'un problème lié à la reconnexion du serveur OPC-UA.  |  7 février 2020  | 
|  3  |  Suppression de l'obligation des autorisations `iot:*`.  |  17 décembre 2019  | 
|  2  |  Ajout de la prise en charge de plusieurs ressources de secret OPC-UA.  |  10 décembre 2019  | 
|  1  |  Première version.  |  2 décembre 2019  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="iot-sitewise-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ Consultez les rubriques suivantes dans le *Guide de l'utilisateur AWS IoT SiteWise * :
  + [Qu'est-ce que c'est AWS IoT SiteWise ?](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/)
  + [Utilisation d'une passerelle](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/gateway-connector.html)
  + [ CloudWatch Métriques de la passerelle](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-cloudwatch-metrics.html#gateway-metrics)
  + [Résolution des problèmes liés à une SiteWise passerelle IoT](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/troubleshooting.html#troubleshooting-gateway)

# Kinesis Firehose
<a name="kinesis-firehose-connector"></a>

Le [connecteur](connectors.md) Kinesis Firehose publie des données via un flux de diffusion Amazon Data Firehose vers des destinations telles qu'Amazon S3, Amazon Redshift ou Amazon Service. OpenSearch 

Ce connecteur est un producteur de données pour un flux de diffusion Kinesis. Il reçoit les données d'entrée dans une rubrique MQTT et envoie les données à un flux de diffusion spécifié. Le flux de diffusion envoie ensuite l'enregistrement des données à la destination configurée (par exemple, un compartiment S3).

Ce connecteur possède les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#kinesis-firehose-connector-changelog).

## Prérequis
<a name="kinesis-firehose-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 4 - 5 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="req-kinesis-firehose-stream"></a>Un flux de diffusion Kinesis configuré. Pour plus d'informations, consultez la section [Création d'un flux de diffusion Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) dans le manuel du développeur *Amazon Kinesis Firehose*.
+ <a name="req-kinesis-firehose-iam-policy-v2"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser les `firehose:PutRecordBatch` actions `firehose:PutRecord` et sur le flux de diffusion cible, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
          {
              "Sid":"Stmt1528133056761",
              "Action":[
                  "firehose:PutRecord",
                  "firehose:PutRecordBatch"
              ],
              "Effect":"Allow",
              "Resource":[
              "arn:aws:firehose:us-east-1:123456789012:deliverystream/stream-name"
              ]
          }
      ]
   }
  ```

------

  Ce connecteur vous permet de remplacer le flux de diffusion 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 inclure tous les flux cibles en tant que ressources. 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 \$1).

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------
#### [ Versions 2 - 3 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="req-kinesis-firehose-stream"></a>Un flux de diffusion Kinesis configuré. Pour plus d'informations, consultez la section [Création d'un flux de diffusion Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) dans le manuel du développeur *Amazon Kinesis Firehose*.
+ <a name="req-kinesis-firehose-iam-policy-v2"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser les `firehose:PutRecordBatch` actions `firehose:PutRecord` et sur le flux de diffusion cible, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
          {
              "Sid":"Stmt1528133056761",
              "Action":[
                  "firehose:PutRecord",
                  "firehose:PutRecordBatch"
              ],
              "Effect":"Allow",
              "Resource":[
              "arn:aws:firehose:us-east-1:123456789012:deliverystream/stream-name"
              ]
          }
      ]
   }
  ```

------

  Ce connecteur vous permet de remplacer le flux de diffusion 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 inclure tous les flux cibles en tant que ressources. 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 \$1).

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------
#### [ Version 1 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="req-kinesis-firehose-stream"></a>Un flux de diffusion Kinesis configuré. Pour plus d'informations, consultez la section [Création d'un flux de diffusion Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) dans le manuel du développeur *Amazon Kinesis Firehose*.
+ Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`firehose:PutRecord`action sur le flux de diffusion cible, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
          {
              "Sid":"Stmt1528133056761",
              "Action":[
                  "firehose:PutRecord"
              ],
              "Effect":"Allow",
              "Resource":[
              "arn:aws:firehose:us-east-1:123456789012:deliverystream/stream-name"
              ]
          }
      ]
   }
  ```

------

  <a name="role-resources"></a>Ce connecteur vous permet de remplacer le flux de diffusion 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 inclure tous les flux cibles en tant que ressources. 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 \$1).

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------

## Paramètres du connecteur
<a name="kinesis-firehose-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Versions 5 ]

`DefaultDeliveryStreamArn`  <a name="kinesis-firehose-DefaultDeliveryStreamArn"></a>
L'ARN du flux de diffusion Firehose par défaut auquel envoyer les données. Le flux de destination peut être remplacé par la propriété `delivery_stream_arn` dans la charge utile du message d'entrée.  
Le rôle de groupe doit autoriser les actions appropriées sur toutes les flux cibles de la diffusion. Pour de plus amples informations, veuillez consulter [Prérequis](#kinesis-firehose-connector-req).
Nom d'affichage dans la AWS IoT console : **ARN du flux de diffusion par défaut**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`

`DeliveryStreamQueueSize`  <a name="kinesis-firehose-DeliveryStreamQueueSize"></a>
Le nombre maximal d'enregistrements à conserver en mémoire avant que de nouveaux enregistrements pour le même flux de diffusion soient rejetés. La valeur minimale est de 2000.  
Nom affiché dans la AWS IoT console : **nombre maximum d'enregistrements à mettre en mémoire tampon (par flux)**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^([2-9]\\d{3}|[1-9]\\d{4,})$`

`MemorySize`  <a name="kinesis-firehose-MemorySize"></a>
Quantité de mémoire (en Ko) allouée à ce connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`PublishInterval`  <a name="kinesis-firehose-PublishInterval"></a>
Intervalle (en secondes) de publication des enregistrements dans Firehose. Pour désactiver la mise en lots, définissez cette valeur sur 0.  
Nom d'affichage dans la AWS IoT console : **Intervalle de publication**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `0 - 900`  
Modèle valide : `[0-9]|[1-9]\\d|[1-9]\\d\\d|900`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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 2 - 4 ]

`DefaultDeliveryStreamArn`  <a name="kinesis-firehose-DefaultDeliveryStreamArn"></a>
L'ARN du flux de diffusion Firehose par défaut auquel envoyer les données. Le flux de destination peut être remplacé par la propriété `delivery_stream_arn` dans la charge utile du message d'entrée.  
Le rôle de groupe doit autoriser les actions appropriées sur toutes les flux cibles de la diffusion. Pour de plus amples informations, veuillez consulter [Prérequis](#kinesis-firehose-connector-req).
Nom d'affichage dans la AWS IoT console : **ARN du flux de diffusion par défaut**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`

`DeliveryStreamQueueSize`  <a name="kinesis-firehose-DeliveryStreamQueueSize"></a>
Le nombre maximal d'enregistrements à conserver en mémoire avant que de nouveaux enregistrements pour le même flux de diffusion soient rejetés. La valeur minimale est de 2000.  
Nom affiché dans la AWS IoT console : **nombre maximum d'enregistrements à mettre en mémoire tampon (par flux)**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^([2-9]\\d{3}|[1-9]\\d{4,})$`

`MemorySize`  <a name="kinesis-firehose-MemorySize"></a>
Quantité de mémoire (en Ko) allouée à ce connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`PublishInterval`  <a name="kinesis-firehose-PublishInterval"></a>
Intervalle (en secondes) de publication des enregistrements dans Firehose. Pour désactiver la mise en lots, définissez cette valeur sur 0.  
Nom d'affichage dans la AWS IoT console : **Intervalle de publication**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `0 - 900`  
Modèle valide : `[0-9]|[1-9]\\d|[1-9]\\d\\d|900`

------
#### [ Version 1 ]

`DefaultDeliveryStreamArn`  <a name="kinesis-firehose-DefaultDeliveryStreamArn"></a>
L'ARN du flux de diffusion Firehose par défaut auquel envoyer les données. Le flux de destination peut être remplacé par la propriété `delivery_stream_arn` dans la charge utile du message d'entrée.  
Le rôle de groupe doit autoriser les actions appropriées sur toutes les flux cibles de la diffusion. Pour de plus amples informations, veuillez consulter [Prérequis](#kinesis-firehose-connector-req).
Nom d'affichage dans la AWS IoT console : **ARN du flux de diffusion par défaut**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`

------

**Example**  <a name="kinesis-firehose-connector-create"></a>
**Exemple de création d'un connecteur (AWS CLI)**  
La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyKinesisFirehoseConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/5",
            "Parameters": {
                "DefaultDeliveryStreamArn": "arn:aws:firehose:region:account-id:deliverystream/stream-name",
                "DeliveryStreamQueueSize": "5000",
                "MemorySize": "65535",
                "PublishInterval": "10", 
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="kinesis-firehose-connector-data-input"></a>

Ce connecteur accepte de diffuser le contenu sur les rubriques MQTT, puis renvoie le contenu vers le flux de diffusion cible. Il accepte deux types de données d'entrée :
+ les données JSON dans la rubrique `kinesisfirehose/message`.
+ les données binaires dans la rubrique `kinesisfirehose/message/binary/#`.

------
#### [ Versions 2 - 5 ]<a name="kinesis-firehose-input-data"></a>

**Filtre de rubriques :** `kinesisfirehose/message`  
Utilisez cette rubrique pour envoyer un message qui contient des données JSON.    
**Propriétés des messages**    
`request`  
Données à envoyer au flux de diffusion et au flux de diffusion cible, s'il est différent du flux par défaut.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`data`  
Données à envoyer au flux de diffusion.  
Nécessaire : `true`  
Type : `string`  
`delivery_stream_arn`  
L'ARN du flux de diffusion Kinesis cible. Incluez cette propriété pour remplacer le flux de diffusion par défaut.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`  
`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 : `.*`  
**Exemple d'entrée**  

```
{
     "request": {
        "delivery_stream_arn": "arn:aws:firehose:region:account-id:deliverystream/stream2-name",
        "data": "Data to send to the delivery stream."
     },
     "id": "request123"
}
```
 

**Filtre de rubriques :** `kinesisfirehose/message/binary/#`  
Utilisez cette rubrique pour envoyer un message qui contient des données binaires. Le connecteur n'analyse pas les données binaires. Les données sont diffusées en l'état.  
Pour mapper la demande d'entrée à une réponse de sortie, remplacez le caractère générique `#` dans la rubrique du message par un ID de demande arbitraire. Par exemple, si vous publiez un message dans `kinesisfirehose/message/binary/request123`, la propriété `id` dans l'objet de réponse est définie sur `request123`.  
Si vous ne souhaitez pas mapper une demande à une réponse, vous pouvez publier vos messages dans `kinesisfirehose/message/binary/`. Veillez à inclure la barre oblique de fin (/).

------
#### [ Version 1 ]<a name="kinesis-firehose-input-data"></a>

**Filtre de rubriques :** `kinesisfirehose/message`  
Utilisez cette rubrique pour envoyer un message qui contient des données JSON.    
**Propriétés des messages**    
`request`  
Données à envoyer au flux de diffusion et au flux de diffusion cible, s'il est différent du flux par défaut.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`data`  
Données à envoyer au flux de diffusion.  
Nécessaire : `true`  
Type : `string`  
`delivery_stream_arn`  
L'ARN du flux de diffusion Kinesis cible. Incluez cette propriété pour remplacer le flux de diffusion par défaut.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`  
`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 : `.*`  
**Exemple d'entrée**  

```
{
     "request": {
        "delivery_stream_arn": "arn:aws:firehose:region:account-id:deliverystream/stream2-name",
        "data": "Data to send to the delivery stream."
     },
     "id": "request123"
}
```
 

**Filtre de rubriques :** `kinesisfirehose/message/binary/#`  
Utilisez cette rubrique pour envoyer un message qui contient des données binaires. Le connecteur n'analyse pas les données binaires. Les données sont diffusées en l'état.  
Pour mapper la demande d'entrée à une réponse de sortie, remplacez le caractère générique `#` dans la rubrique du message par un ID de demande arbitraire. Par exemple, si vous publiez un message dans `kinesisfirehose/message/binary/request123`, la propriété `id` dans l'objet de réponse est définie sur `request123`.  
Si vous ne souhaitez pas mapper une demande à une réponse, vous pouvez publier vos messages dans `kinesisfirehose/message/binary/`. Veillez à inclure la barre oblique de fin (/).

------

## Données de sortie
<a name="kinesis-firehose-connector-data-output"></a>

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

------
#### [ Versions 2 - 5 ]

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  <a name="kinesis-firehose-output-topic-status"></a>
`kinesisfirehose/message/status`

**Exemple de sortie**  
La réponse contient le statut de chaque enregistrement de données envoyé dans le lot.  

```
{
    "response": [
        {
            "ErrorCode": "error",
            "ErrorMessage": "test error",
            "id": "request123",
            "status": "fail"
        },
        {
            "firehose_record_id": "xyz2",
            "id": "request456",
            "status": "success"
        },
        {
            "firehose_record_id": "xyz3",
            "id": "request890",
            "status": "success"
        }
    ]
}
```
Si le connecteur détecte une erreur réessayable (par exemple, des erreurs de connexion), il réessaie de publier dans le lot suivant. Le recul exponentiel est géré par le AWS SDK. Les demandes qui échouent avec des erreurs pouvant être retentées sont ajoutées à la fin de la file d'attente pour la publication.

------
#### [ Version 1 ]

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  <a name="kinesis-firehose-output-topic-status"></a>
`kinesisfirehose/message/status`

**Exemple de sortie : réussite**  

```
{
   "response": {
       "firehose_record_id": "1lxfuuuFomkpJYzt/34ZU/r8JYPf8Wyf7AXqlXm",
       "status": "success"
    },
    "id": "request123"
}
```

**Exemple de sortie : échec**  

```
{
   "response" : {
       "error": "ResourceNotFoundException",
       "error_message": "An error occurred (ResourceNotFoundException) when calling the PutRecord operation: Firehose test1 not found under account 123456789012.",
       "status": "fail"
   },
   "id": "request123"
}
```

------

## Exemple d'utilisation
<a name="kinesis-firehose-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#kinesis-firehose-connector-req) pour le connecteur.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#kinesis-firehose-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Ajoutez le connecteur et configurez ses [paramètres](#kinesis-firehose-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée JSON](#kinesis-firehose-connector-data-input) et d'envoyer des [données de sortie](#kinesis-firehose-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="kinesis-firehose-connector-usage-example"></a>

L'exemple suivant de fonction Lambda envoie un message d'entrée au connecteur. Ce message contient des données JSON.

```
import greengrasssdk
import time
import json

iot_client = greengrasssdk.client('iot-data')
send_topic = 'kinesisfirehose/message'

def create_request_with_all_fields():
    return  {
        "request": {
            "data": "Message from Firehose 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
<a name="kinesis-firehose-connector-license"></a>

Le connecteur Kinesis Firehose inclut les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="kinesis-firehose-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 5 | <a name="isolation-mode-changelog"></a>Ajout du paramètre `IsolationMode` pour configurer le mode de conteneurisation du connecteur. | 
| 4 | <a name="upgrade-runtime-py3.7"></a>Mise à niveau de l'environnement d'exécution Lambda vers Python 3.7, ce qui modifie les exigences d'exécution. | 
| 3 | Correctif permettant de réduire la journalisation excessive et d'autres correctifs de bogues mineurs.  | 
| 2 | Ajout du support pour l'envoi d'enregistrements de données par lots à Firehose à un intervalle spécifié. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/kinesis-firehose-connector.html)  | 
| 1 | Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="kinesis-firehose-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [Qu'est-ce qu'Amazon Kinesis Data Firehose ?](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) dans le guide du *développeur Amazon Kinesis*

# Connecteur ML Feedback
<a name="ml-feedback-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le connecteur ML Feedback facilite l'accès aux données de votre modèle d'apprentissage automatique (ML) pour le réentraînement et l'analyse des modèles. Le connecteur :
+ Télécharge les données d'entrée (échantillons) utilisées par votre modèle de machine learning vers Amazon S3. L'entrée du modèle peut être dans n'importe quel format, tel que des images, JSON ou audio. Une fois les échantillons chargés dans le cloud, vous pouvez les utiliser pour reformer le modèle afin d'améliorer l'exacitude et la précision de ses prédictions. Par exemple, vous pouvez utiliser [SageMaker AI Ground Truth](https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html) pour étiqueter vos échantillons et [SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) pour réentraîner le modèle.
+ Publie les résultats des prédictions à partir du modèle sous forme de messages MQTT. Cela vous permet de surveiller et d'analyser la qualité d'inférence de votre modèle en temps réel. Vous pouvez également stocker les résultats des prédictions et les utiliser pour analyser les tendances au fil du temps.
+ Publie des statistiques relatives aux téléchargements d'échantillons et d'échantillons de données sur Amazon CloudWatch.

Pour configurer ce connecteur, vous décrivez vos *configurations de commentaires* prises en charge au format JSON. Une configuration de feedback définit des propriétés telles que le compartiment Amazon S3 de destination, le type de contenu et la [stratégie d'échantillonnage](#ml-feedback-connector-sampling-strategies). (Une stratégie d'échantillonnage est utilisée pour déterminer les échantillons à charger.)

Vous pouvez utiliser le connecteur ML Feedback dans les scénarios suivants :
+ Avec des fonctions Lambda définies par l'utilisateur. Vos fonctions Lambda d'inférence locales utilisent le SDK Machine AWS IoT Greengrass Learning pour appeler ce connecteur et transmettre la configuration du feedback cible, l'entrée du modèle et la sortie du modèle (résultats de prédiction). Pour obtenir un exemple, consultez [Exemple d'utilisation](#ml-feedback-connector-usage).
+ Avec le [connecteur ML Image Classification](image-classification-connector.md) (v2). Pour utiliser ce connecteur avec le connecteur ML Image Classification, configurez le `MLFeedbackConnectorConfigId` paramètre du connecteur ML Image Classification.
+ Avec le [connecteur ML Object Detection](obj-detection-connector.md). Pour utiliser ce connecteur avec le connecteur ML Object Detection, configurez le `MLFeedbackConnectorConfigId` paramètre du connecteur ML Object Detection.

**ARN** : `arn:aws:greengrass:region::/connectors/MLFeedback/versions/1`

## Prérequis
<a name="ml-feedback-connector-req"></a>

Ce connecteur possède les critères suivants :
+ AWS IoT Greengrass Core Software v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ Un ou plusieurs compartiments Amazon S3. Le nombre de compartiments que vous utilisez dépend de votre stratégie d'échantillonnage.
+ Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`s3:PutObject`action sur les objets du compartiment Amazon S3 de destination, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "s3:PutObject",
              "Resource": [
                  "arn:aws:s3:::bucket-name/*"
              ]
          }
      ]
  }
  ```

------

  La stratégie doit inclure tous les compartiments de destination en tant que ressources. 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 \$1).

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).
+ Le [connecteur CloudWatch Metrics](cloudwatch-metrics-connector.md) a été ajouté au groupe Greengrass et configuré. Cette opération est obligatoire uniquement si vous souhaitez utiliser la fonction de création de rapports de métriques.
+ AWS IoT Greengrass Le [SDK Machine Learning](lambda-functions.md#lambda-sdks-ml) v1.1.0 est requis pour interagir avec ce connecteur.

## Parameters
<a name="ml-feedback-connector-param"></a>

`FeedbackConfigurationMap`  
Ensemble d'une ou plusieurs configurations de feedback que le connecteur peut utiliser pour charger des échantillons sur Amazon S3. Une configuration de commentaire définit des paramètres tels que le compartiment de destination, le type de contenu et la [stratégie d'échantillonnage](#ml-feedback-connector-sampling-strategies). Lorsque ce connecteur est invoqué, la fonction ou le connecteur Lambda appelant spécifie une configuration de feedback cible.  
Nom affiché dans la AWS IoT console : **carte de configuration des commentaires**  
Nécessaire : `true`  
Type : chaîne JSON bien formée qui définit l'ensemble des configurations de feedback prises en charge. Pour obtenir un exemple, consultez [FeedbackConfigurationMap exemple](#ml-feedback-connector-feedbackconfigmap).    
  
L'ID d'un objet de configuration de commentaire présente les exigences suivantes.    
  
ID :  
+ Doit être unique parmi les objets de configuration.
+ Doit commencer par une lettre ou un chiffre. Les noms de compartiments peuvent contenir des lettres minuscules, des chiffres et des traits d'union.
+ Nombre maximal de caractères : 2 à 63.
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`  
Exemples : `MyConfig0`, `config-a`, `12id`
Le corps d'un objet de configuration de commentaire contient les propriétés suivantes.    
`s3-bucket-name`  
Nom du compartiment Amazon S3 de destination.  
Le rôle de groupe doit autoriser l'action `s3:PutObject` sur tous les compartiments de destination. Pour de plus amples informations, veuillez consulter [Prérequis](#ml-feedback-connector-req).
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[a-z0-9\.\-]{3,63}$`  
`content-type`  
Type de contenu des exemples à charger. Tout le contenu d'une configuration de commentaire individuelle doit être du même type.  
Nécessaire : `true`  
Type : `string`  
Exemples : `image/jpeg`, `application/json`, `audio/ogg`  
`s3-prefix`  
Préfixe de clé à utiliser pour les exemples chargés. Un préfixe est similaire à un nom de répertoire. Il vous permet de stocker des données similaires dans le même répertoire d'un compartiment. Pour plus d'informations, consultez la section [Clé d'objet et métadonnées](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*.  
Nécessaire : `false`  
Type : `string`  
`file-ext`  
Extension de fichier à utiliser pour les exemples chargés. Doit être une extension de fichier valide pour le type de contenu.  
Nécessaire : `false`  
Type : `string`  
Exemples : `jpg`, `json`, `ogg`  
`sampling-strategy`  
[Stratégie d'échantillonnage](#ml-feedback-connector-sampling-strategies) à utiliser pour filtrer les exemples à charger. S'il n'est pas spécifié, le connecteur essaie de charger tous les exemples qu'il reçoit.  
Nécessaire : `false`  
Type : chaîne JSON bien formée qui contient les propriétés suivantes.    
`strategy-name`  
Nom de la stratégie d'échantillonnage.  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `RANDOM_SAMPLING`, `LEAST_CONFIDENCE`, `MARGIN` ou `ENTROPY`  
`rate`  
Taux de la stratégie d'échantillonnage [aléatoire](#ml-feedback-connector-sampling-strategies-random) .  
Obligatoire : `true` si `strategy-name` c'est le cas`RANDOM_SAMPLING`.  
Type : `number`  
Valeurs valides : `0.0 - 1.0`  
`threshold`  
Seuil de la stratégie d'échantillonnage [Least Confidence](#ml-feedback-connector-sampling-strategies-least-confidence), [Margin](#ml-feedback-connector-sampling-strategies-margin) ou [Entropy](#ml-feedback-connector-sampling-strategies-entropy) .  
Obligatoire : `true` si `strategy-name` c'est `LEAST_CONFIDENCE` le cas`MARGIN`, ou`ENTROPY`.  
Type : `number`  
Valeurs valides :  
+ `0.0 - 1.0` pour la stratégie `LEAST_CONFIDENCE` ou `MARGIN`.
+ `0.0 - no limit` pour la stratégie `ENTROPY`.

`RequestLimit`  
Nombre maximal de demandes que le connecteur peut traiter à la fois.  
Vous pouvez utiliser ce paramètre pour limiter la consommation de mémoire en limitant le nombre de demandes traitées par le connecteur en même temps. Les demandes qui dépassent cette limite sont ignorées.  
Nom affiché dans la AWS IoT console : **limite de demandes**  
Nécessaire : `false`  
Type : `string`  
Valeurs valides : `0 - 999`  
Modèle valide : `^$|^[0-9]{1,3}$`

### Exemple de création de connecteur (AWS CLI)
<a name="ml-feedback-connector-create"></a>

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

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyMLFeedbackConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/MLFeedback/versions/1",
            "Parameters": {
                "FeedbackConfigurationMap": "{  \"RandomSamplingConfiguration\": {  \"s3-bucket-name\": \"my-aws-bucket-random-sampling\",  \"content-type\": \"image/png\",  \"file-ext\": \"png\",  \"sampling-strategy\": {  \"strategy-name\": \"RANDOM_SAMPLING\",  \"rate\": 0.5  } },  \"LeastConfidenceConfiguration\": {  \"s3-bucket-name\": \"my-aws-bucket-least-confidence-sampling\",  \"content-type\": \"image/png\",  \"file-ext\": \"png\",  \"sampling-strategy\": {  \"strategy-name\": \"LEAST_CONFIDENCE\",  \"threshold\": 0.4  } } }", 
                "RequestLimit": "10"
            }
        }
    ]
}'
```

### FeedbackConfigurationMap exemple
<a name="ml-feedback-connector-feedbackconfigmap"></a>

Voici un exemple de valeur développé pour le paramètre `FeedbackConfigurationMap`. Cet exemple inclut plusieurs configurations de commentaires qui utilisent différentes stratégies d'échantillonnage.

```
{
    "ConfigID1": {
        "s3-bucket-name": "my-aws-bucket-random-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "RANDOM_SAMPLING",
            "rate": 0.5
        }
    },
    "ConfigID2": {
        "s3-bucket-name": "my-aws-bucket-margin-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "MARGIN",
            "threshold": 0.4
        }
    },
    "ConfigID3": {
        "s3-bucket-name": "my-aws-bucket-least-confidence-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "LEAST_CONFIDENCE",
            "threshold": 0.4
        }
    },
    "ConfigID4": {
        "s3-bucket-name": "my-aws-bucket-entropy-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "ENTROPY",
            "threshold": 2
        }
    },
    "ConfigID5": {
        "s3-bucket-name": "my-aws-bucket-no-sampling",
        "s3-prefix": "DeviceA",
        "content-type": "application/json"
    }
}
```

### Stratégies d'échantillonnage
<a name="ml-feedback-connector-sampling-strategies"></a>

Le connecteur prend en charge quatre stratégies d'échantillonnage qui déterminent s'il convient de charger les échantillons transmis au connecteur. Les exemples sont des instances de données discrètes qu'un modèle utilise pour une prédiction. Vous pouvez utiliser des stratégies d'échantillonnage pour filtrer les échantillons les plus susceptibles d'améliorer la précision du modèle.

`RANDOM_SAMPLING`  <a name="ml-feedback-connector-sampling-strategies-random"></a>
Charge de façon aléatoire les exemples en fonction du débit fourni. Il charge un exemple si une valeur générée de façon aléatoire est inférieure à la fréquence. Plus le taux est élevé, plus le nombre d'échantillons chargés est élevé.  
Cette stratégie ignore toute prédiction de modèle fournie.

`LEAST_CONFIDENCE`  <a name="ml-feedback-connector-sampling-strategies-least-confidence"></a>
Charge des exemples dont la probabilité de fiabilité maximale est inférieure au seuil fourni.    
Exemple de scénario  
Seuil : `.6`  
Prédiction du modèle : `[.2, .2, .4, .2]`  
Probabilité de fiabilité maximale : `.4`  
Résultat :  
Utilisez l'exemple, car la probabilité de fiabilité maximale (`.4`) <= seuil (`.6`).

`MARGIN`  <a name="ml-feedback-connector-sampling-strategies-margin"></a>
Charge des exemples si la marge entre les deux principales probabilités de confiance se situe dans le seuil fourni. La marge correspond à la différence entre les deux principales probabilités.    
Exemple de scénario  
Seuil : `.02`  
Prédiction du modèle : `[.3, .35, .34, .01]`  
Les deux principales probabilités de confiance : `[.35, .34]`  
Marge : `.01` (`.35 - .34`)  
Résultat :  
Utilisez l'exemple car marge (`.01`) <= seuil (`.02`).

`ENTROPY`  <a name="ml-feedback-connector-sampling-strategies-entropy"></a>
Charge des exemples dont l'entropie est supérieure au seuil fourni. Utilise l'entropie normalisée de la prédiction du modèle.    
Exemple de scénario  
Seuil : `0.75`  
Prédiction du modèle : `[.5, .25, .25]`  
Entropie pour la prédiction : `1.03972`  
Résultat :  
Utilisez sample car entropy (`1.03972`) > threshold (`0.75`).

## Données d'entrée
<a name="ml-feedback-connector-data-input"></a>

Les fonctions Lambda définies par l'utilisateur utilisent `publish` la fonction `feedback` du client dans le SDK Machine AWS IoT Greengrass Learning pour appeler le connecteur. Pour obtenir un exemple, consultez [Exemple d'utilisation](#ml-feedback-connector-usage).

**Note**  
Ce connecteur n'accepte pas les messages MQTT comme données d'entrée.

La fonction `publish` accepte les arguments suivants :

ConfigId  
ID de la configuration des commentaires cibles. Cela doit correspondre à l'ID d'une configuration de feedback définie dans le [FeedbackConfigurationMap](#ml-feedback-connector-param)paramètre du connecteur ML Feedback.  
Obligatoire : vrai  
Type : chaîne

ModelInput  
Données d'entrée qui ont été transmises à un modèle pour l'inférence. Ces données d'entrée sont chargées à l'aide de la configuration cible, sauf si elles sont filtrées en fonction de la stratégie d'échantillonnage.  
Obligatoire : vrai  
Type : octets

ModelPrediction  
La prédiction est le résultat du modèle. Le type de résultat peut être un dictionnaire ou une liste. Par exemple, les résultats de prédiction du connecteur ML Image Classification sont une liste de probabilités (telles que`[0.25, 0.60, 0.15]`). Ces données sont publiées dans la rubrique `/feedback/message/prediction`.  
Obligatoire : vrai  
Type : dictionnaire ou liste de `float` valeurs

Métadonnées  
Métadonnées spécifiques à l'application définies par le client qui sont attachées à l'exemple chargé et publiées dans la rubrique `/feedback/message/prediction`. Le connecteur insère également une clé `publish-ts` avec une valeur d'horodatage dans les métadonnées.  
Obligatoire : faux  
Type : dictionnaire  
Exemple : `{"some-key": "some value"}`

## Données de sortie
<a name="ml-feedback-connector-data-output"></a>

Ce connecteur publie les données dans trois rubriques MQTT :
+ Informations sur le statut à partir du connecteur dans la rubrique `feedback/message/status`.
+ Résultats des prédictions sur la rubrique `feedback/message/prediction`.
+ Des métriques destinées CloudWatch à `cloudwatch/metric/put` ce sujet.

<a name="connectors-input-output-subscriptions"></a>Vous devez configurer les abonnements pour autoriser le connecteur à communiquer sur les rubriques MQTT. Pour de plus amples informations, veuillez consulter [Entrées et sorties](connectors.md#connectors-inputs-outputs).

**Filtre de rubriques :** `feedback/message/status`  
Utilisez cette rubrique pour surveiller le statut des exemples de chargement et d'exemples supprimés. Le connecteur publie dans cette rubrique chaque fois qu'il reçoit une demande.     
**Exemple de sortie : l'exemple de chargement a réussi**  

```
{
  "response": {
    "status": "success",
    "s3_response": {
      "ResponseMetadata": {
        "HostId": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km",
        "RetryAttempts": 1,
        "HTTPStatusCode": 200,
        "RequestId": "79104EXAMPLEB723",
        "HTTPHeaders": {
          "content-length": "0",
          "x-amz-id-2": "lbbqaDVFOhMlyU3gRvAX1ZIdg8P0WkGkCSSFsYFvSwLZk3j7QZhG5EXAMPLEdd4/pEXAMPLEUqU=",
          "server": "AmazonS3",
          "x-amz-expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"",
          "x-amz-request-id": "79104EXAMPLEB723",
          "etag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"",
          "date": "Thu, 11 Jul 2019 00:12:50 GMT",
          "x-amz-server-side-encryption": "AES256"
        }
      },
      "bucket": "greengrass-feedback-connector-data-us-west-2",
      "ETag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"",
      "Expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"",
      "key": "s3-key-prefix/UUID.file_ext",
      "ServerSideEncryption": "AES256"
    }
  },
  "id": "5aaa913f-97a3-48ac-5907-18cd96b89eeb"
}
```
Le connecteur ajoute les `key` champs `bucket` et à la réponse d'Amazon S3. Pour plus d'informations sur la réponse Amazon S3, consultez [l'objet PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html#RESTObjectPUT-responses) dans le manuel *Amazon Simple Storage Service API Reference*.  
**Exemple de sortie : Exemple supprimé en raison de la stratégie d'échantillonnage**  

```
{
  "response": {
    "status": "sample_dropped_by_strategy"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```  
**Exemple de sortie : Échec du chargement de l'exemple**  
Un statut d'échec inclut le message d'erreur comme valeur `error_message` et la classe d'exception comme valeur `error`.  

```
{
  "response": {
    "status": "fail",
    "error_message": "[RequestId: 4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3] Failed to upload model input data due to exception. Model prediction will not be published. Exception type: NoSuchBucket, error: An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist",
    "error": "NoSuchBucket"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```  
**Exemple de sortie : demande limitée en raison de la limite de demande**  

```
{
  "response": {
    "status": "fail",
    "error_message": "Request limit has been reached (max request: 10 ). Dropping request.",
    "error": "Queue.Full"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```

**Filtre de rubriques :** `feedback/message/prediction`  
Utilisez cette rubrique pour écouter les prédictions basées sur des exemples de données chargés. Cela vous permet d'analyser les performances de votre modèle en temps réel. Les prédictions du modèle sont publiées dans cette rubrique uniquement si les données sont correctement chargées sur Amazon S3. Les messages publiés dans cette rubrique sont au format JSON. Ils contiennent le lien vers l'objet de données chargé, la prédiction du modèle et les métadonnées incluses dans la demande.  
Vous pouvez également stocker les résultats des prédictions et les utiliser pour signaler et analyser les tendances au fil du temps. Les tendances peuvent fournir des informations précieuses. Par exemple, une tendance de *précision décroissante au fil du temps* peut vous aider à décider si le modèle doit être reformé.    
**Exemple de sortie**  

```
{
  "source-ref": "s3://greengrass-feedback-connector-data-us-west-2/s3-key-prefix/UUID.file_ext",
  "model-prediction": [
    0.5,
    0.2,
    0.2,
    0.1
  ],
  "config-id": "ConfigID2",
  "metadata": {
    "publish-ts": "2019-07-11 00:12:48.816752"
  }
}
```
Vous pouvez configurer le [connecteur IoT Analytics](iot-analytics-connector.md) pour vous abonner à cette rubrique et envoyer les informations à des AWS IoT Analytics fins d'analyse ultérieure ou historique.

**Filtre de rubriques :** `cloudwatch/metric/put`  
Il s'agit de la rubrique de sortie utilisée pour publier des métriques dans CloudWatch. Cette fonctionnalité nécessite l'installation et la configuration du [connecteur CloudWatch Metrics](cloudwatch-metrics-connector.md).  
Les métriques incluent :  
+ Nombre d'échantillons chargés.
+ Taille des échantillons chargés.
+ Le nombre d'erreurs liées aux téléchargements vers Amazon S3.
+ Nombre d'échantillons abandonnés en fonction de la stratégie d'échantillonnage.
+ Nombre de demandes limitées.  
**Exemple de sortie : taille de l'échantillon de données (publié avant le chargement réel)**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 47592,
      "unit": "Bytes",
      "metricName": "SampleSize"
    }
  }
}
```  
**Exemple de sortie : l'exemple de chargement a réussi**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleUploadSuccess"
    }
  }
}
```  
**Exemple de sortie : exemple de chargement réussi et résultat de prédiction publié**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleAndPredictionPublished"
    }
  }
}
```  
**Exemple de sortie : Échec du chargement de l'exemple**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleUploadFailure"
    }
  }
}
```  
**Exemple de sortie : Exemple supprimé en raison de la stratégie d'échantillonnage**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleNotUsed"
    }
  }
}
```  
**Exemple de sortie : demande limitée en raison de la limite de demande**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "ErrorRequestThrottled"
    }
  }
}
```

## Exemple d'utilisation
<a name="ml-feedback-connector-usage"></a>

L'exemple suivant est une fonction Lambda définie par l'utilisateur qui utilise le SDK [Machine AWS IoT Greengrass Learning](lambda-functions.md#lambda-sdks-ml) pour envoyer des données au connecteur ML Feedback.

**Note**  
Vous pouvez télécharger le SDK AWS IoT Greengrass Machine Learning depuis la [page des AWS IoT Greengrass téléchargements](what-is-gg.md#gg-ml-sdk-download).

```
import json
import logging
import os
import sys
import greengrass_machine_learning_sdk as ml

client = ml.client('feedback')

try:
    feedback_config_id = os.environ["FEEDBACK_CONFIG_ID"]
    model_input_data_dir = os.environ["MODEL_INPUT_DIR"]
    model_prediction_str = os.environ["MODEL_PREDICTIONS"]
    model_prediction = json.loads(model_prediction_str)
except Exception as e:
    logging.info("Failed to open environment variables. Failed with exception:{}".format(e))
    sys.exit(1)

try:
    with open(os.path.join(model_input_data_dir, os.listdir(model_input_data_dir)[0]), 'rb') as f:
        content = f.read()
except Exception as e:
    logging.info("Failed to open model input directory. Failed with exception:{}".format(e))
    sys.exit(1)    

def invoke_feedback_connector():
    logging.info("Invoking feedback connector.")
    try:
        client.publish(
            ConfigId=feedback_config_id,
            ModelInput=content,
            ModelPrediction=model_prediction
        )
    except Exception as e:
        logging.info("Exception raised when invoking feedback connector:{}".format(e))
        sys.exit(1)    

invoke_feedback_connector()

def function_handler(event, context):
    return
```

## Licences
<a name="ml-feedback-connector-license"></a>



Le connecteur ML Feedback inclut les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Consultez aussi
<a name="ml-feedback-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# Connecteur de classification d'images ML
<a name="image-classification-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Les [connecteurs](connectors.md) ML Image Classification fournissent un service d'inférence d'apprentissage automatique (ML) qui s'exécute sur le AWS IoT Greengrass cœur. Ce service d'inférence local effectue la classification des images à l'aide d'un modèle entraîné par l'algorithme de classification d'images SageMaker AI.

Les fonctions Lambda définies par l'utilisateur utilisent le SDK Machine AWS IoT Greengrass Learning pour envoyer des demandes d'inférence au service d'inférence local. Le service exécute l'inférence localement et renvoie les probabilités que l'image d'entrée appartient à certaines catégories.

AWS IoT Greengrass fournit les versions suivantes de ce connecteur, qui est disponible pour plusieurs plateformes.

------
#### [ Version 2 ]


| Connecteur | Description et ARN | 
| --- | --- | 
| Classification d'images XML Aarch64 JTX2 |  Service d'inférence de classification d'images pour NVIDIA TX2 Jetson. Prend en charge l'accélération GPU. **ARN** : `arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2` | 
| Classification d'images ML x86\$164 |  Service d'inférence de classification d'images pour les plateformes x86\$164. **ARN** : `arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/2` | 
| Classification des images ML ARMv7 |  Service d'inférence de classification d'images pour ARMv7 plateformes. **ARN** : `arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2` | 

------
#### [ Version 1 ]


| Connecteur | Description et ARN | 
| --- | --- | 
| Classification d'images XML Aarch64 JTX2 |  Service d'inférence de classification d'images pour NVIDIA TX2 Jetson. Prend en charge l'accélération GPU. **ARN** : `arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/1` | 
| Classification d'images ML x86\$164 |  Service d'inférence de classification d'images pour les plateformes x86\$164. **ARN** : `arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/1` | 
| Classification d'images ML Armv7 |  Service d'inférence de classification d'images pour les plateformes Armv7. **ARN** : `arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/1` | 

------

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#image-classification-connector-changelog).

## Prérequis
<a name="image-classification-connector-req"></a>

Ces connecteurs possèdent les exigences suivantes :

------
#### [ Version 2 ]
+ AWS IoT Greengrass Core Software v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="req-image-classification-framework"></a>Dépendances du MXNet framework Apache installé sur le périphérique principal. Pour de plus amples informations, veuillez consulter [Installation de MXNet dépendances sur le AWS IoT Greengrass noyau](#image-classification-connector-config).
+ <a name="req-image-classification-resource"></a>Une [ressource ML](ml-inference.md#ml-resources) du groupe Greengrass qui fait référence à une source de modèle d' SageMaker IA. Ce modèle doit être entraîné par l'algorithme de classification d'images SageMaker AI. Pour plus d'informations, consultez la section [Algorithme de classification des images](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) dans le manuel *Amazon SageMaker AI Developer Guide*.
+ <a name="req-image-classification-feedback"></a>Le [connecteur ML Feedback](ml-feedback-connector.md) a été ajouté au groupe Greengrass et configuré. Cette opération est obligatoire uniquement si vous souhaitez utiliser le connecteur pour charger les données d'entrée de modèle et publier les prédictions dans une rubrique MQTT.
+ <a name="req-image-classification-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`sagemaker:DescribeTrainingJob`action sur la tâche de formation cible, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sagemaker:DescribeTrainingJob"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:123456789012:training-job/training-job-name"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

  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 \$1). Si vous modifiez le poste de formation cible à l'avenir, veillez à mettre à jour le rôle du groupe.
+ AWS IoT Greengrass Le [SDK Machine Learning](lambda-functions.md#lambda-sdks-ml) v1.1.0 est requis pour interagir avec ce connecteur.

------
#### [ Version 1 ]
+ AWS IoT Greengrass Core Software v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="req-image-classification-framework"></a>Dépendances du MXNet framework Apache installé sur le périphérique principal. Pour de plus amples informations, veuillez consulter [Installation de MXNet dépendances sur le AWS IoT Greengrass noyau](#image-classification-connector-config).
+ <a name="req-image-classification-resource"></a>Une [ressource ML](ml-inference.md#ml-resources) du groupe Greengrass qui fait référence à une source de modèle d' SageMaker IA. Ce modèle doit être entraîné par l'algorithme de classification d'images SageMaker AI. Pour plus d'informations, consultez la section [Algorithme de classification des images](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) dans le manuel *Amazon SageMaker AI Developer Guide*.
+ <a name="req-image-classification-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`sagemaker:DescribeTrainingJob`action sur la tâche de formation cible, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sagemaker:DescribeTrainingJob"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:123456789012:training-job/training-job-name"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

  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 \$1). Si vous modifiez le poste de formation cible à l'avenir, veillez à mettre à jour le rôle du groupe.
+ AWS IoT Greengrass Le [SDK Machine Learning](lambda-functions.md#lambda-sdks-ml) v1.0.0 ou version ultérieure est requis pour interagir avec ce connecteur.

------

## Paramètres du connecteur
<a name="image-classification-connector-param"></a>

Ces connecteurs fournissent les paramètres suivants.

------
#### [ Version 2 ]

`MLModelDestinationPath`  <a name="param-image-classification-mdlpath"></a>
Le chemin local absolu de la ressource ML dans l'environnement Lambda. Il s'agit du chemin de destination spécifié pour la ressource de ML.  
Si vous avez créé la ressource de ML dans la console, il s'agit du chemin d'accès local.
Nom d'affichage dans la AWS IoT console : **chemin de destination du modèle**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`MLModelResourceId`  <a name="param-image-classification-mdlresourceid"></a>
ID de la ressource de ML qui référence le modèle de source.  
Nom affiché dans la AWS IoT console : **ressource ARN du SageMaker job**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[a-zA-Z0-9:_-]+`

`MLModelSageMakerJobArn`  <a name="param-image-classification-mdljobarn"></a>
L'ARN de la tâche de formation à l' SageMaker IA qui représente la source du modèle d' SageMaker IA. Le modèle doit être entraîné par l'algorithme de classification d'images SageMaker AI.  
Nom affiché dans la AWS IoT console : **SageMaker job ARN**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$`

`LocalInferenceServiceName`  <a name="param-image-classification-svcname"></a>
Nom du service d'inférence local. Les fonctions Lambda définies par l'utilisateur appellent le service en transmettant le nom à `invoke_inference_service` la fonction du SDK Machine AWS IoT Greengrass Learning. Pour obtenir un exemple, consultez [Exemple d'utilisation](#image-classification-connector-usage).  
Nom affiché dans la AWS IoT console : nom du **service d'inférence local**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[a-zA-Z0-9][a-zA-Z0-9-]{1,62}`

`LocalInferenceServiceTimeoutSeconds`  <a name="param-image-classification-svctimeout"></a>
Durée (en secondes) avant laquelle la demande d'inférence est interrompue. La valeur minimale est de 1.  
Nom affiché dans la AWS IoT console : **Timeout (seconde)**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[1-9][0-9]*`

`LocalInferenceServiceMemoryLimitKB`  <a name="param-image-classification-svcmemorylimit"></a>
Quantité de mémoire (en Ko) à laquelle le service a accès. La valeur minimale est de 1.  
Nom affiché dans la AWS IoT console : **Limite de mémoire (Ko)**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[1-9][0-9]*`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique uniquement au JTX2 connecteur ML Image Classification Aarch64.  
Nom affiché dans la AWS IoT console : **accélération du processeur graphique**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `CPU` ou `GPU`

`MLFeedbackConnectorConfigId`  <a name="param-image-classification-feedbackconfigid"></a>
ID de la configuration de commentaire à utiliser pour charger les données d'entrée du modèle. Cela doit correspondre à l'ID d'une configuration de commentaire définie pour le [connecteur ML Feedback](ml-feedback-connector.md).  
Ce paramètre est obligatoire uniquement si vous souhaitez utiliser le connecteur ML Feedback pour charger les données d'entrée du modèle et publier des prédictions dans une rubrique MQTT.  
Nom affiché dans la AWS IoT console : **ID de configuration du connecteur ML Feedback**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

------
#### [ Version 1 ]

`MLModelDestinationPath`  <a name="param-image-classification-mdlpath"></a>
Le chemin local absolu de la ressource ML dans l'environnement Lambda. Il s'agit du chemin de destination spécifié pour la ressource de ML.  
Si vous avez créé la ressource de ML dans la console, il s'agit du chemin d'accès local.
Nom d'affichage dans la AWS IoT console : **chemin de destination du modèle**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`MLModelResourceId`  <a name="param-image-classification-mdlresourceid"></a>
ID de la ressource de ML qui référence le modèle de source.  
Nom affiché dans la AWS IoT console : **ressource ARN du SageMaker job**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[a-zA-Z0-9:_-]+`

`MLModelSageMakerJobArn`  <a name="param-image-classification-mdljobarn"></a>
L'ARN de la tâche de formation à l' SageMaker IA qui représente la source du modèle d' SageMaker IA. Le modèle doit être entraîné par l'algorithme de classification d'images SageMaker AI.  
Nom affiché dans la AWS IoT console : **SageMaker job ARN**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$`

`LocalInferenceServiceName`  <a name="param-image-classification-svcname"></a>
Nom du service d'inférence local. Les fonctions Lambda définies par l'utilisateur appellent le service en transmettant le nom à `invoke_inference_service` la fonction du SDK Machine AWS IoT Greengrass Learning. Pour obtenir un exemple, consultez [Exemple d'utilisation](#image-classification-connector-usage).  
Nom affiché dans la AWS IoT console : nom du **service d'inférence local**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[a-zA-Z0-9][a-zA-Z0-9-]{1,62}`

`LocalInferenceServiceTimeoutSeconds`  <a name="param-image-classification-svctimeout"></a>
Durée (en secondes) avant laquelle la demande d'inférence est interrompue. La valeur minimale est de 1.  
Nom affiché dans la AWS IoT console : **Timeout (seconde)**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[1-9][0-9]*`

`LocalInferenceServiceMemoryLimitKB`  <a name="param-image-classification-svcmemorylimit"></a>
Quantité de mémoire (en Ko) à laquelle le service a accès. La valeur minimale est de 1.  
Nom affiché dans la AWS IoT console : **Limite de mémoire (Ko)**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[1-9][0-9]*`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique uniquement au JTX2 connecteur ML Image Classification Aarch64.  
Nom affiché dans la AWS IoT console : **accélération du processeur graphique**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `CPU` ou `GPU`

------

### Exemple de création de connecteur (AWS CLI)
<a name="image-classification-connector-create"></a>

Les commandes CLI suivantes créent un `ConnectorDefinition` avec une version initiale contenant un connecteur de classification d'images ML.

**Exemple : instance d'UC**  
Cet exemple crée une instance du connecteur ARMv7L ML Image Classification.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyImageClassificationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier",
                "LocalInferenceServiceName": "imageClassification",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "MLFeedbackConnectorConfigId": "MyConfig0"
            }
        }
    ]
}'
```

**Exemple : instance de GPU**  
Cet exemple crée une instance du JTX2 connecteur ML Image Classification Aarch64, qui prend en charge l'accélération du GPU sur une carte NVIDIA TX2 Jetson.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyImageClassificationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier",
                "LocalInferenceServiceName": "imageClassification",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "GPUAcceleration": "GPU",
                "MLFeedbackConnectorConfigId": "MyConfig0"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ces connecteurs a une [longue durée](lambda-functions.md#lambda-lifecycle) de vie.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="image-classification-connector-data-input"></a>

 Ces connecteurs acceptent un fichier image comme entrée. Les fichiers image d'entrée doivent être au format `jpeg` ou `png`. Pour de plus amples informations, veuillez consulter [Exemple d'utilisation](#image-classification-connector-usage). 

Ces connecteurs n'acceptent pas les messages MQTT comme données d'entrée.

## Données de sortie
<a name="image-classification-connector-data-output"></a>

Ces connecteurs renvoient une prédiction formatée pour l'objet identifié dans l'image d'entrée :

```
[0.3,0.1,0.04,...]
```

La prédiction contient une liste de valeurs qui correspondent aux catégories utilisées dans l'ensemble de données de formation pendant la formation du modèle. Chaque valeur représente la probabilité que l'image relève de la catégorie correspondante. La catégorie avec la plus haute probabilité est la prédiction dominante.

Ces connecteurs ne publient pas les messages MQTT sous forme de données de sortie.

## Exemple d'utilisation
<a name="image-classification-connector-usage"></a>

L'exemple de fonction Lambda suivant utilise le [SDK AWS IoT Greengrass Machine Learning](lambda-functions.md#lambda-sdks-ml) pour interagir avec un connecteur ML Image Classification.

**Note**  
 Vous pouvez télécharger le SDK depuis la page de téléchargement du [SDK AWS IoT Greengrass Machine Learning](what-is-gg.md#gg-ml-sdk-download).

L'exemple initialise un client de kit de développement logiciel et appelle de façon synchrone la fonction `invoke_inference_service` du SDK pour appeler le service d'inférence local. Il transmet le type d'algorithme, le nom de service, le type d'image et le contenu de l'image. Ensuite, l'exemple analyse la réponse du service pour obtenir les résultats probables (prédictions).

------
#### [ Python 3.7 ]

```
import logging
from threading import Timer

import numpy as np

import greengrass_machine_learning_sdk as ml

# We assume the inference input image is provided as a local file
# to this inference client Lambda function.
with open('/test_img/test.jpg', 'rb') as f:
    content = bytearray(f.read())

client = ml.client('inference')

def infer():
    logging.info('invoking Greengrass ML Inference service')

    try:
        resp = client.invoke_inference_service(
            AlgoType='image-classification',
            ServiceName='imageClassification',
            ContentType='image/jpeg',
            Body=content
        )
    except ml.GreengrassInferenceException as e:
        logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e))
        return
    except ml.GreengrassDependencyException as e:
        logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e))
        return

    logging.info('resp: {}'.format(resp))
    predictions = resp['Body'].read().decode("utf-8")
    logging.info('predictions: {}'.format(predictions))
    
    # The connector output is in the format: [0.3,0.1,0.04,...]
    # Remove the '[' and ']' at the beginning and end.
    predictions = predictions[1:-1]
    count = len(predictions.split(','))
    predictions_arr = np.fromstring(predictions, count=count, sep=',')

    # Perform business logic that relies on the predictions_arr, which is an array
    # of probabilities.
    
    # Schedule the infer() function to run again in one second.
    Timer(1, infer).start()
    return

infer()

def function_handler(event, context):
    return
```

------
#### [ Python 2.7 ]

```
import logging
from threading import Timer

import numpy

import greengrass_machine_learning_sdk as gg_ml

# The inference input image.
with open("/test_img/test.jpg", "rb") as f:
    content = f.read()

client = gg_ml.client("inference")


def infer():
    logging.info("Invoking Greengrass ML Inference service")

    try:
        resp = client.invoke_inference_service(
            AlgoType="image-classification",
            ServiceName="imageClassification",
            ContentType="image/jpeg",
            Body=content,
        )
    except gg_ml.GreengrassInferenceException as e:
        logging.info('Inference exception %s("%s")', e.__class__.__name__, e)
        return
    except gg_ml.GreengrassDependencyException as e:
        logging.info('Dependency exception %s("%s")', e.__class__.__name__, e)
        return

    logging.info("Response: %s", resp)
    predictions = resp["Body"].read()
    logging.info("Predictions: %s", predictions)

    # The connector output is in the format: [0.3,0.1,0.04,...]
    # Remove the '[' and ']' at the beginning and end.
    predictions = predictions[1:-1]
    predictions_arr = numpy.fromstring(predictions, sep=",")
    logging.info("Split into %s predictions.", len(predictions_arr))

    # Perform business logic that relies on predictions_arr, which is an array
    # of probabilities.

    # Schedule the infer() function to run again in one second.
    Timer(1, infer).start()


infer()


# In this example, the required AWS Lambda handler is never called.
def function_handler(event, context):
    return
```

------

La `invoke_inference_service` fonction du SDK AWS IoT Greengrass Machine Learning accepte les arguments suivants.


| Argument | Description | 
| --- | --- | 
| `AlgoType` | Nom du type d'algorithme à utiliser pour l'inférence. Actuellement, seul `image-classification` est pris en charge. Nécessaire : `true` Type : `string` Valeurs valides : `image-classification` | 
| `ServiceName` | Nom du service d'inférence local. Utilisez le nom que vous avez spécifié pour le paramètre `LocalInferenceServiceName` lorsque vous avez configuré le connecteur. Nécessaire : `true` Type : `string` | 
| `ContentType` | Nom du type mime de l'image d'entrée. Nécessaire : `true` Type : `string` Valeurs valides : `image/jpeg, image/png` | 
| `Body` | Contenu du type mime de l'image d'entrée. Nécessaire : `true` Type : `binary` | 

## Installation de MXNet dépendances sur le AWS IoT Greengrass noyau
<a name="image-classification-connector-config"></a>

Pour utiliser un connecteur de classification d'images ML, vous devez installer les dépendances du MXNet framework Apache sur le périphérique principal. Le connecteur utilise l'infrastructure pour servir le modèle ML.

**Note**  
Ces connecteurs sont fournis avec une MXNet bibliothèque précompilée, vous n'avez donc pas besoin d'installer le MXNet framework sur le périphérique principal. 

AWS IoT Greengrass fournit des scripts permettant d'installer les dépendances pour les plates-formes et appareils courants suivants (ou de les utiliser comme référence pour les installer). Si vous utilisez une autre plate-forme ou un autre appareil, consultez la [MXNet documentation](https://mxnet.apache.org/) de votre configuration.

Avant d'installer les MXNet dépendances, assurez-vous que les [bibliothèques système](#image-classification-connector-logging) requises (avec les versions minimales spécifiées) sont présentes sur le périphérique.

------
#### [ NVIDIA Jetson TX2 ]

1. Installer CUDA Toolkit 9.0 et cuDNN 7.0. Vous pouvez suivre les instructions de [Configuration d'autres appareils](setup-filter.other.md) dans le didacticiel Démarrez.

1. Activez les référentiels univers de sorte que le connecteur peut installer les logiciels open source maintenus par la communauté. Pour plus d'informations, consultez [ Repositories/Ubuntu](https://help.ubuntu.com/community/Repositories/Ubuntu) dans la documentation Ubuntu.

   1. Ouvrez le fichier `/etc/apt/sources.list`.

   1. Vérifiez que les lignes suivantes ne sont pas commentées :

      ```
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      ```

1. Enregistrez une copie du script d'installation suivant dans un fichier nommé `nvidiajtx2.sh` sur l'appareil principal.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**Note**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez [ Installation sous Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev python-dev
   
   echo 'Install latest pip...'
   wget https://bootstrap.pypa.io/get-pip.py
   python get-pip.py
   rm get-pip.py
   
   pip install numpy==1.15.0 scipy
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

   ```
   sudo nvidiajtx2.sh
   ```

------
#### [ x86\$164 (Ubuntu or Amazon Linux)  ]

1. Enregistrez une copie du script d'installation suivant dans un fichier nommé `x86_64.sh` sur l'appareil principal.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1
     apt-get install -y python3.7 python3.7-dev
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**Note**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez [ Installation sous Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 python-dev python-pip
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext python-pip
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   pip install numpy==1.15.0 scipy opencv-python
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

   ```
   sudo x86_64.sh
   ```

------
#### [ Armv7 (Raspberry Pi) ]

1. Enregistrez une copie du script d'installation suivant dans un fichier nommé `armv7l.sh` sur l'appareil principal.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**Note**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez [ Installation sous Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev python-dev
   
   # python-opencv depends on python-numpy. The latest version in the APT repository is python-numpy-1.8.2
   # This script installs python-numpy first so that python-opencv can be installed, and then install the latest
   # numpy-1.15.x with pip
   apt-get install -y python-numpy python-opencv
   dpkg --remove --force-depends python-numpy
   
   echo 'Install latest pip...'
   wget https://bootstrap.pypa.io/get-pip.py
   python get-pip.py
   rm get-pip.py
   
   pip install --upgrade numpy==1.15.0 picamera scipy
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

   ```
   sudo bash armv7l.sh
   ```
**Note**  
Sur un Raspberry Pi, l'utilisation de `pip` pour installer des dépendances d'apprentissage automatique est une opération gourmande en mémoire qui peut entraîner un dépassement de la capacité mémoire de l'appareil et une absence de réponse. Pour contourner ce problème, vous pouvez augmenter temporairement l'espace d'échange :  
Dans `/etc/dphys-swapfile`, augmentez la valeur de la variable `CONF_SWAPSIZE`, puis exécutez la commande suivante pour redémarrer `dphys-swapfile`.  

   ```
   /etc/init.d/dphys-swapfile restart
   ```

------

## Journalisation et résolution des problèmes
<a name="image-classification-connector-logging"></a>

Selon les paramètres de votre groupe, les journaux d'événements et d'erreurs sont écrits dans CloudWatch Logs, dans le système de fichiers local, ou dans les deux. Les journaux de ce connecteur utilisent le préfixe `LocalInferenceServiceName`. Si le connecteur se comporte de manière inattendue, vérifiez les journaux du connecteur. Ces derniers contiennent généralement des informations de débogage utiles, telles que les dépendances de bibliothèque ML manquantes ou la cause d'une panne de démarrage d'un connecteur.

Si le AWS IoT Greengrass groupe est configuré pour écrire des journaux locaux, le connecteur écrit des fichiers journaux dans`greengrass-root/ggc/var/log/user/region/aws/`. Pour plus d'informations sur la journalisation de Greengrass, consultez. [Surveillance à l'aide de AWS IoT Greengrass journaux](greengrass-logs-overview.md)

Utilisez les informations suivantes pour résoudre les problèmes liés aux connecteurs ML Image Classification.

**Bibliothèques système requises**

Les onglets suivants répertorient les bibliothèques système requises pour chaque connecteur de classification d'images ML.

------
#### [ ML Image Classification Aarch64 JTX2 ]


| Bibliothèque | Version minimale | 
| --- | --- | 
| ld-linux-aarch64. so.1 | GLIBC\$12.17 | 
| libc.so.6 | GLIBC\$12.17 | 
| libcublas.so.9.0 | non applicable | 
| libcudart.so.9.0 | non applicable | 
| libcudnn.so.7 | non applicable | 
| libcufft.so.9.0 | non applicable | 
| libcurand.so.9.0 | non applicable | 
| libcusolver.so.9.0 | non applicable | 
| libgcc\$1s.so.1 | GCC\$14.2.0 | 
| libgomp.so.1 | GOMP\$14.0, OMP\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.17 | 
| librt.so.1 | GLIBC\$12.17 | 
| libstdc\$1\$1.so.6 | GLIBCXX\$13.4.21, CXXABI\$11.3.8 | 

------
#### [ ML Image Classification x86\$164 ]


| Bibliothèque | Version minimale | 
| --- | --- | 
| ld-linux-x86-64. so.2 | GCC\$14.0.0 | 
| libc.so.6 | GLIBC\$12.4 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.2.5 | 
| librt.so.1 | GLIBC\$12.2.5 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, GLIBCXX\$13.4.21 | 

------
#### [ ML Image Classification Armv7 ]


| Bibliothèque | Version minimale | 
| --- | --- | 
| ld-linux-armhf.so.3 | GLIBC\$12.4 | 
| libc.so.6 | GLIBC\$12.7 | 
| libgcc\$1s.so.1 | GCC\$14.0.0 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.4 | 
| libpthread.so.0 | GLIBC\$12.4 | 
| librt.so.1 | GLIBC\$12.4 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, CXXABI\$1ARM\$11.3.3, GLIBCXX\$13.4.20 | 

------

**Problèmes**


| Symptôme | Solution | 
| --- | --- | 
|  Sur un appareil Raspberry Pi, le message d'erreur suivant est consigné, et vous n'utilisez pas la caméra : `Failed to initialize libdc1394`   |  Exécutez la commande suivante pour désactiver le pilote : <pre>sudo ln /dev/null /dev/raw1394</pre> Cette opération est éphémère et le lien symbolique disparaîtra après le redémarrage. Consultez le manuel de distribution de votre système d'exploitation pour savoir comment créer automatiquement le lien au redémarrage.  | 

## Licences
<a name="image-classification-connector-license"></a>

Les connecteurs ML Image Classification incluent les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT
+ [Bibliothèque DNNL (Deep Neural Network Library)](https://github.com/intel/mkl-dnn)/Licence Apache 2.0
+ [OpenMP\$1 Runtime Library](https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/optimization-and-programming-guide/openmp-support/openmp-library-support/openmp-run-time-library-routines.html)/Voir [Intel OpenMP Runtime Library licensing](#openmp-license).
+ [mxnet](https://pypi.org/project/mxnet/)/Licence Apache 2.0
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

**Intel OpenMP Runtime Library licensing**. Le moteur d'exécution Intel® OpenMP\$1 est doté de deux licences, une licence commerciale (COM) faisant partie des produits de la suite Intel® Parallel Studio XE et une licence open source (OSS) BSD.

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="image-classification-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 2 | Ajout du `MLFeedbackConnectorConfigId` paramètre permettant d'utiliser le [connecteur ML Feedback](ml-feedback-connector.md) pour charger les données d'entrée du modèle, publier des prédictions sur un sujet MQTT et publier des métriques sur Amazon CloudWatch.  | 
| 1 | Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="image-classification-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [Exécuter l'inférence de Machine Learning](ml-inference.md)
+ [Algorithme de classification des images](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) dans le manuel *Amazon SageMaker AI Developer Guide*

# Connecteur de détection d'objets ML
<a name="obj-detection-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Les [connecteurs](connectors.md) ML Object Detection fournissent un service d'inférence d'apprentissage automatique (ML) qui s'exécute sur le AWS IoT Greengrass cœur. Ce service d'inférence local effectue la détection d'objets à l'aide d'un modèle de détection d'objets compilé par le compilateur d'apprentissage profond SageMaker AI Neo. Deux types de modèles de détection d'objets sont pris en charge : Single Shot Multibox Detector (SSD) et You Only Look Once (YOLO) v3. Pour plus d'informations, consultez [Exigences du modèle de détection d'objets](#obj-detection-connector-req-model).

 Les fonctions Lambda définies par l'utilisateur utilisent le SDK Machine AWS IoT Greengrass Learning pour envoyer des demandes d'inférence au service d'inférence local. Le service effectue l'inférence locale sur une image d'entrée et renvoie une liste de prédictions pour chaque objet détecté dans l'image. Chaque prédiction contient une catégorie d'objet, un score de fiabilité de prédiction et des coordonnées en pixels qui spécifient un cadre de délimitation autour de l'objet prédit. 

AWS IoT Greengrass fournit des connecteurs de détection d'objets ML pour plusieurs plateformes :


| Connecteur | Description et ARN | 
| --- | --- | 
| Détection d'objets ML Aarch64 JTX2 |  Service d'inférence par détection d'objets pour NVIDIA TX2 Jetson. Prend en charge l'accélération GPU.  **ARN** : `arn:aws:greengrass:region::/connectors/ObjectDetectionAarch64JTX2/versions/1`   | 
| Détection d'objets ML x86\$164 |  Service d'inférence de détection d'objets pour les plateformes x86\$164.  **ARN** : `arn:aws:greengrass:region::/connectors/ObjectDetectionx86-64/versions/1`   | 
| Détection d'objets ML ARMv7 |   Service d'inférence pour la détection d'objets pour les ARMv7 plateformes.   **ARN** : `arn:aws:greengrass:region::/connectors/ObjectDetectionARMv7/versions/1`   | 

## Prérequis
<a name="obj-detection-connector-req"></a>

Ces connecteurs possèdent les exigences suivantes :
+ AWS IoT Greengrass Core Software v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ Dépendances du moteur d'apprentissage profond SageMaker AI Neo installé sur le périphérique principal. Pour de plus amples informations, veuillez consulter [Installation des dépendances du runtime Neo Deep Learning sur le AWS IoT Greengrass noyau](#obj-detection-connector-config).
+ Une [ressource d'apprentissage machine](ml-inference.md#ml-resources) du groupe Greengrass. La ressource ML doit faire référence à un compartiment Amazon S3 contenant un modèle de détection d'objets. Pour plus d'informations, consultez les [sources du modèle Amazon S3](ml-inference.md#s3-ml-resources).
**Note**  
Le modèle doit être un détecteur Multibox unique ou un type de modèle de détection d'objet You Look Once v3. Il doit être compilé à l'aide du compilateur d'apprentissage profond SageMaker AI Neo. Pour plus d'informations, consultez [Exigences du modèle de détection d'objets](#obj-detection-connector-req-model).
+ <a name="req-image-classification-feedback"></a>Le [connecteur ML Feedback](ml-feedback-connector.md) a été ajouté au groupe Greengrass et configuré. Cette opération est obligatoire uniquement si vous souhaitez utiliser le connecteur pour charger les données d'entrée de modèle et publier les prédictions dans une rubrique MQTT.
+ AWS IoT Greengrass Le [SDK Machine Learning](lambda-functions.md#lambda-sdks-ml) v1.1.0 est requis pour interagir avec ce connecteur.

### Exigences du modèle de détection d'objets
<a name="obj-detection-connector-req-model"></a>

Les connecteurs ML Object Detection prennent en charge les modèles de détection d'objets Single Shot multibox Detector (SSD) et You Only Look Once (YOLO) v3. Vous pouvez utiliser les composants de détection d'objets fournis par [GluonCV](https://gluon-cv.mxnet.io) pour former le modèle avec votre propre ensemble de données. Vous pouvez également utiliser des modèles préformés depuis GluonCV Model Zoo :
+ [Modèle SSD préformé](https://gluon-cv.mxnet.io/build/examples_detection/demo_ssd.html)
+ [Modèle YOLO v3 préformé](https://gluon-cv.mxnet.io/build/examples_detection/demo_yolo.html)

Votre modèle de détection d'objets doit être formé avec 512 x 512 images d'entrée. Les modèles préformés du GluonCV Model Zoo répondent déjà à cette exigence.

Les modèles de détection d'objets entraînés doivent être compilés avec le compilateur d'apprentissage profond SageMaker AI Neo. Lors de la compilation, assurez-vous que le matériel cible correspond au matériel de votre appareil Greengrass principal. Pour plus d'informations, consultez [ SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) dans le manuel *Amazon SageMaker AI Developer Guide*.

Le modèle compilé doit être ajouté en tant que ressource ML ([source du modèle Amazon S3](ml-inference.md#s3-ml-resources)) au même groupe Greengrass que le connecteur.

## Paramètres du connecteur
<a name="obj-detection-connector-param"></a>

Ces connecteurs fournissent les paramètres suivants.

`MLModelDestinationPath`  
Le chemin absolu vers le compartiment Amazon S3 qui contient le modèle ML compatible avec Neo. Il s'agit du chemin de destination spécifié pour la ressource de modèle ML.  
Nom affiché dans la AWS IoT console : **chemin de destination du modèle**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `.+`

`MLModelResourceId`  
ID de la ressource de ML qui référence le modèle de source.  
Nom affiché dans la AWS IoT console : **Greengrass group ML resource**  
Nécessaire : `true`  
Type : `S3MachineLearningModelResource`  
Schéma valide : `^[a-zA-Z0-9:_-]+$`

`LocalInferenceServiceName`  
Nom du service d'inférence local. Les fonctions Lambda définies par l'utilisateur appellent le service en transmettant le nom à `invoke_inference_service` la fonction du SDK Machine AWS IoT Greengrass Learning. Pour obtenir un exemple, consultez [Exemple d'utilisation](#obj-detection-connector-usage).  
Nom affiché dans la AWS IoT console : nom du **service d'inférence local**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

`LocalInferenceServiceTimeoutSeconds`  
Durée (en secondes) avant laquelle la demande d'inférence est interrompue. La valeur minimale est de 1. La valeur par défaut est 10.  
Nom affiché dans la AWS IoT console : **Timeout (seconde)**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[1-9][0-9]*$`

`LocalInferenceServiceMemoryLimitKB`  
Quantité de mémoire (en Ko) à laquelle le service a accès. La valeur minimale est de 1.  
Nom affiché dans la AWS IoT console : **Limite de mémoire**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[1-9][0-9]*$`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
Contexte de calcul de l'UC ou du GPU (accéléré). Cette propriété s'applique uniquement au JTX2 connecteur ML Image Classification Aarch64.  
Nom affiché dans la AWS IoT console : **accélération du processeur graphique**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `CPU` ou `GPU`

`MLFeedbackConnectorConfigId`  <a name="param-image-classification-feedbackconfigid"></a>
ID de la configuration de commentaire à utiliser pour charger les données d'entrée du modèle. Cela doit correspondre à l'ID d'une configuration de commentaire définie pour le [connecteur ML Feedback](ml-feedback-connector.md).  
Ce paramètre est obligatoire uniquement si vous souhaitez utiliser le connecteur ML Feedback pour charger les données d'entrée du modèle et publier des prédictions dans une rubrique MQTT.  
Nom affiché dans la AWS IoT console : **ID de configuration du connecteur ML Feedback**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

### Exemple de création de connecteur (AWS CLI)
<a name="obj-detection-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant un connecteur de détection d'objets ML. Cet exemple crée une instance du ARMv7l connecteur ML Object Detection.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyObjectDetectionConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ObjectDetectionARMv7/versions/1",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "LocalInferenceServiceName": "objectDetection",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "MLFeedbackConnectorConfigId" : "object-detector-random-sampling"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ces connecteurs a une [longue durée](lambda-functions.md#lambda-lifecycle) de vie.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="obj-detection-connector-data-input"></a>

 Ces connecteurs acceptent un fichier image comme entrée. Les fichiers image d'entrée doivent être au format `jpeg` ou `png`. Pour de plus amples informations, veuillez consulter [Exemple d'utilisation](#obj-detection-connector-usage). 

Ces connecteurs n'acceptent pas les messages MQTT comme données d'entrée.

## Données de sortie
<a name="obj-detection-connector-data-output"></a>

 Ces connecteurs renvoient une liste formatée des résultats de prédiction pour les objets identifiés dans l'image d'entrée : 

```
     {
         "prediction": [
             [
                 14,
                 0.9384938478469849,
                 0.37763649225234985,
                 0.5110225081443787,
                 0.6697432398796082,
                 0.8544386029243469
             ],
             [
                 14,
                 0.8859519958496094,
                 0,
                 0.43536216020584106,
                 0.3314110040664673,
                 0.9538808465003967
             ],
             [
                 12,
                 0.04128098487854004,
                 0.5976729989051819,
                 0.5747185945510864,
                 0.704264223575592,
                 0.857937216758728
             ],
             ...
         ]
     }
```

Chaque prédiction de la liste est contenue entre crochets et contient six valeurs :
+  La première valeur représente la catégorie d'objets prédite pour l'objet identifié. Les catégories d'objets et leurs valeurs correspondantes sont déterminées lors de l'entraînement de votre modèle d'apprentissage automatique par détection d'objets dans le compilateur d'apprentissage profond Neo.
+ La deuxième valeur est le score de confiance pour la prédiction de catégorie d'objet. Cela représente la probabilité que la prédiction soit correcte. 
+ Les quatre dernières valeurs correspondent aux dimensions en pixels qui représentent un cadre de délimitation autour de l'objet prédit dans l'image.

Ces connecteurs ne publient pas les messages MQTT sous forme de données de sortie.

## Exemple d'utilisation
<a name="obj-detection-connector-usage"></a>

L'exemple de fonction Lambda suivant utilise le [SDK AWS IoT Greengrass Machine Learning](lambda-functions.md#lambda-sdks-ml) pour interagir avec un connecteur ML Object Detection.

**Note**  
 Vous pouvez télécharger le SDK depuis la page de téléchargement du [SDK AWS IoT Greengrass Machine Learning](what-is-gg.md#gg-ml-sdk-download). 

L'exemple initialise un client de kit de développement logiciel et appelle de façon synchrone la fonction `invoke_inference_service` du SDK pour appeler le service d'inférence local. Il transmet le type d'algorithme, le nom de service, le type d'image et le contenu de l'image. Ensuite, l'exemple analyse la réponse du service pour obtenir les résultats probables (prédictions).

```
import logging
from threading import Timer

import numpy as np

import greengrass_machine_learning_sdk as ml

# We assume the inference input image is provided as a local file
# to this inference client Lambda function.
with open('/test_img/test.jpg', 'rb') as f:
    content = bytearray(f.read())

client = ml.client('inference')

def infer():
    logging.info('invoking Greengrass ML Inference service')

    try:
        resp = client.invoke_inference_service(
            AlgoType='object-detection',
            ServiceName='objectDetection',
            ContentType='image/jpeg',
            Body=content
        )
    except ml.GreengrassInferenceException as e:
        logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e))
        return
    except ml.GreengrassDependencyException as e:
        logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e))
        return

    logging.info('resp: {}'.format(resp))
    predictions = resp['Body'].read().decode("utf-8")
    logging.info('predictions: {}'.format(predictions))
    predictions = eval(predictions) 

    # Perform business logic that relies on the predictions.
    
    # Schedule the infer() function to run again in ten second.
    Timer(10, infer).start()
    return

infer()

def function_handler(event, context):
    return
```

La `invoke_inference_service` fonction du SDK AWS IoT Greengrass Machine Learning accepte les arguments suivants.


| Argument | Description | 
| --- | --- | 
| `AlgoType` | Nom du type d'algorithme à utiliser pour l'inférence. Actuellement, seul `object-detection` est pris en charge. Nécessaire : `true` Type : `string` Valeurs valides : `object-detection` | 
| `ServiceName` | Nom du service d'inférence local. Utilisez le nom que vous avez spécifié pour le paramètre `LocalInferenceServiceName` lorsque vous avez configuré le connecteur. Nécessaire : `true` Type : `string` | 
| `ContentType` | Nom du type mime de l'image d'entrée. Nécessaire : `true` Type : `string` Valeurs valides : `image/jpeg, image/png` | 
| `Body` | Contenu du type mime de l'image d'entrée. Nécessaire : `true` Type : `binary` | 

## Installation des dépendances du runtime Neo Deep Learning sur le AWS IoT Greengrass noyau
<a name="obj-detection-connector-config"></a>

Les connecteurs ML Object Detection sont fournis avec le moteur d'apprentissage profond (DLR) SageMaker AI Neo. Les connecteurs utilisent le runtime pour servir le modèle d'apprentissage-machine. Pour utiliser ces connecteurs, vous devez installer les dépendances pour le DLR sur votre appareil principal. 

Avant d'installer les dépendances MXNet, assurez-vous que les [bibliothèques système](#obj-detection-connector-logging) requises (avec les versions minimales spécifiées) sont présentes sur l'appareil.

------
#### [ NVIDIA Jetson TX2 ]

1. Installer CUDA Toolkit 9.0 et cuDNN 7.0. Vous pouvez suivre les instructions de [Configuration d'autres appareils](setup-filter.other.md) dans le didacticiel Démarrez.

1. Activez les référentiels univers de sorte que le connecteur peut installer les logiciels open source maintenus par la communauté. Pour plus d'informations, consultez [ Repositories/Ubuntu](https://help.ubuntu.com/community/Repositories/Ubuntu) dans la documentation Ubuntu.

   1. Ouvrez le fichier `/etc/apt/sources.list`.

   1. Vérifiez que les lignes suivantes ne sont pas commentées :

      ```
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      ```

1. Enregistrez une copie du script d'installation suivant dans un fichier nommé `nvidiajtx2.sh` sur l'appareil principal.

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```
**Note**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez [ Installation sous Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

1. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

   ```
   sudo nvidiajtx2.sh
   ```

------
#### [ x86\$164 (Ubuntu or Amazon Linux)  ]

1. Enregistrez une copie du script d'installation suivant dans un fichier nommé `x86_64.sh` sur l'appareil principal.

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1
     apt-get install -y python3.7 python3.7-dev
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```
**Note**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez [ Installation sous Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

1. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

   ```
   sudo x86_64.sh
   ```

------
#### [ ARMv7 (Raspberry Pi) ]

1. Enregistrez une copie du script d'installation suivant dans un fichier nommé `armv7l.sh` sur l'appareil principal.

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```
**Note**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) ne s'installe pas correctement à l'aide de ce script, vous pouvez essayer de générer à partir de la source. Pour plus d'informations, consultez [ Installation sous Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) dans la documentation OpenCV ou consultez d'autres ressources en ligne pour votre plateforme.

1. Dans le répertoire où vous avez enregistré le fichier, exécutez la commande suivante :

   ```
   sudo bash armv7l.sh
   ```
**Note**  
Sur un Raspberry Pi, l'utilisation de `pip` pour installer des dépendances d'apprentissage automatique est une opération gourmande en mémoire qui peut entraîner un dépassement de la capacité mémoire de l'appareil et une absence de réponse. Pour contourner ce problème, vous pouvez augmenter temporairement l'espace d'échange. Dans `/etc/dphys-swapfile`, augmentez la valeur de la variable `CONF_SWAPSIZE`, puis exécutez la commande suivante pour redémarrer `dphys-swapfile`.  

   ```
   /etc/init.d/dphys-swapfile restart
   ```

------

## Journalisation et résolution des problèmes
<a name="obj-detection-connector-logging"></a>

Selon les paramètres de votre groupe, les journaux d'événements et d'erreurs sont écrits dans CloudWatch Logs, dans le système de fichiers local, ou dans les deux. Les journaux de ce connecteur utilisent le préfixe `LocalInferenceServiceName`. Si le connecteur se comporte de manière inattendue, vérifiez les journaux du connecteur. Ces derniers contiennent généralement des informations de débogage utiles, telles que les dépendances de bibliothèque ML manquantes ou la cause d'une panne de démarrage d'un connecteur.

Si le AWS IoT Greengrass groupe est configuré pour écrire des journaux locaux, le connecteur écrit des fichiers journaux dans`greengrass-root/ggc/var/log/user/region/aws/`. Pour plus d'informations sur la journalisation de Greengrass, consultez. [Surveillance à l'aide de AWS IoT Greengrass journaux](greengrass-logs-overview.md)

Utilisez les informations suivantes pour résoudre les problèmes liés aux connecteurs ML Object Detection.

**Bibliothèques système requises**

Les onglets suivants répertorient les bibliothèques système requises pour chaque connecteur ML Object Detection.

------
#### [ ML Object Detection Aarch64 JTX2 ]


| Bibliothèque | Version minimale | 
| --- | --- | 
| ld-linux-aarch64. so.1 | GLIBC\$12.17 | 
| libc.so.6 | GLIBC\$12.17 | 
| libcublas.so.9.0 | non applicable | 
| libcudart.so.9.0 | non applicable | 
| libcudnn.so.7 | non applicable | 
| libcufft.so.9.0 | non applicable | 
| libcurand.so.9.0 | non applicable | 
| libcusolver.so.9.0 | non applicable | 
| libgcc\$1s.so.1 | GCC\$14.2.0 | 
| libgomp.so.1 | GOMP\$14.0, OMP\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libnvinfer.so.4 | non applicable | 
| libnvrm\$1gpu.so | non applicable | 
| libnvrm.so | non applicable | 
| libnvidia-fatbinaryloader.so.28.2.1 | non applicable | 
| libnvos.so | non applicable | 
| libpthread.so.0 | GLIBC\$12.17 | 
| librt.so.1 | GLIBC\$12.17 | 
| libstdc\$1\$1.so.6 | GLIBCXX\$13.4.21, CXXABI\$11.3.8 | 

------
#### [ ML Object Detection x86\$164 ]


| Bibliothèque | Version minimale | 
| --- | --- | 
| ld-linux-x86-64. so.2 | GCC\$14.0.0 | 
| libc.so.6 | GLIBC\$12.4 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.2.5 | 
| librt.so.1 | GLIBC\$12.2.5 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, GLIBCXX\$13.4.21 | 

------
#### [ ML Object Detection ARMv7 ]


| Bibliothèque | Version minimale | 
| --- | --- | 
| ld-linux-armhf.so.3 | GLIBC\$12.4 | 
| libc.so.6 | GLIBC\$12.7 | 
| libgcc\$1s.so.1 | GCC\$14.0.0 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.4 | 
| libpthread.so.0 | GLIBC\$12.4 | 
| librt.so.1 | GLIBC\$12.4 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, CXXABI\$1ARM\$11.3.3, GLIBCXX\$13.4.20 | 

------

**Problèmes**


| Symptôme | Solution | 
| --- | --- | 
|  Sur un appareil Raspberry Pi, le message d'erreur suivant est consigné, et vous n'utilisez pas la caméra : `Failed to initialize libdc1394`   |  Exécutez la commande suivante pour désactiver le pilote : <pre>sudo ln /dev/null /dev/raw1394</pre> Cette opération est éphémère. Le lien symbolique disparaît après le redémarrage. Consultez le manuel de distribution de votre système d'exploitation pour savoir comment créer automatiquement le lien au redémarrage.  | 

## Licences
<a name="obj-detection-connector-license"></a>

Les connecteurs ML Object Detection incluent les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT
+ [Environnement d’exécution Deep Learning](https://github.com/neo-ai/neo-ai-dlr)/Licence Apache 2.0
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Consultez aussi
<a name="obj-detection-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [Exécuter l'inférence de Machine Learning](ml-inference.md)
+ [Algorithme de détection d'objets](https://docs.aws.amazon.com/sagemaker/latest/dg/object-detection.html) dans le manuel *Amazon SageMaker AI Developer Guide*

# Connecteur adaptateur de protocole Modbus-RTU
<a name="modbus-protocol-adapter-connector"></a>

Le [connecteur](connectors.md) de l'adaptateur de protocole Modbus-RTU interroge les informations des appareils Modbus RTU du groupe. AWS IoT Greengrass 

Ce connecteur reçoit les paramètres d'une demande Modbus RTU à partir d'une fonction Lambda définie par l'utilisateur. Il envoie la demande correspondante, puis publie la réponse à partir du périphérique cible comme un message MQTT.

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#modbus-protocol-adapter-connector-changelog).

## Prérequis
<a name="modbus-protocol-adapter-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-modbus-req-physical-connection"></a>Connexion physique entre le AWS IoT Greengrass cœur et les appareils Modbus. Le noyau doit être physiquement connecté au réseau Modbus RTU via un port série (par exemple, un port USB).
+ <a name="conn-modbus-req-serial-port-resource"></a>Une [ressource de périphérique locale](access-local-resources.md) du groupe Greengrass qui pointe vers le port série physique Modbus.
+ <a name="conn-modbus-req-user-lambda"></a>Fonction Lambda définie par l'utilisateur qui envoie les paramètres de requête Modbus RTU à ce connecteur. Les paramètres de demande doivent être conformes aux modèles attendus et inclure les adresses IDs et des équipements cibles sur le réseau Modbus RTU. Pour de plus amples informations, veuillez consulter [Données d'entrée](#modbus-protocol-adapter-connector-data-input).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-modbus-req-physical-connection"></a>Connexion physique entre le AWS IoT Greengrass cœur et les appareils Modbus. Le noyau doit être physiquement connecté au réseau Modbus RTU via un port série (par exemple, un port USB).
+ <a name="conn-modbus-req-serial-port-resource"></a>Une [ressource de périphérique locale](access-local-resources.md) du groupe Greengrass qui pointe vers le port série physique Modbus.
+ <a name="conn-modbus-req-user-lambda"></a>Fonction Lambda définie par l'utilisateur qui envoie les paramètres de requête Modbus RTU à ce connecteur. Les paramètres de demande doivent être conformes aux modèles attendus et inclure les adresses IDs et des équipements cibles sur le réseau Modbus RTU. Pour de plus amples informations, veuillez consulter [Données d'entrée](#modbus-protocol-adapter-connector-data-input).

------

## Paramètres du connecteur
<a name="modbus-protocol-adapter-connector-param"></a>

Ce connecteur prend en charge les paramètres suivants :

`ModbusSerialPort-ResourceId`  
L'ID de la ressource de l'appareil local qui représente le port série physique Modbus.  
Ce connecteur bénéficie d'un accès en lecture/écriture à la ressource.
Nom affiché dans la AWS IoT console : ressource du **port série Modbus**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `.+`

`ModbusSerialPort`  
Chemin d'accès absolu au port série Modbus physique sur le périphérique. Il s'agit du chemin d'accès source qui est spécifié pour la ressource du périphérique local Modbus.  
Nom affiché dans la AWS IoT console : **chemin source de la ressource du port série Modbus**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `.+`

### Exemple de création de connecteur (AWS CLI)
<a name="modbus-protocol-adapter-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur d'adaptateur de protocole Modbus-RTU.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyModbusRTUProtocolAdapterConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/3",
            "Parameters": {
                "ModbusSerialPort-ResourceId": "MyLocalModbusSerialPort",
                "ModbusSerialPort": "/path-to-port"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

**Note**  
Après avoir déployé le connecteur d'adaptateur de protocole Modbus-RTU, vous pouvez l'utiliser AWS IoT Things Graph pour orchestrer les interactions entre les appareils de votre groupe. Pour plus d'informations, consultez [Modbus](https://docs.aws.amazon.com/thingsgraph/latest/ug/iot-tg-protocols-modbus.html) dans le *Guide de l'utilisateur AWS IoT Things Graph *.

## Données d'entrée
<a name="modbus-protocol-adapter-connector-data-input"></a>

Ce connecteur accepte les paramètres de requête Modbus RTU provenant d'une fonction Lambda définie par l'utilisateur sur un sujet MQTT. Les messages d'entrée doivent être au format JSON.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`modbus/adapter/request`

**Propriétés des messages**  
Le message de demande varie en fonction du type de demande Modbus RTU qu'il représente. Les propriétés suivantes sont requises pour toutes les demandes :  
+ Dans l'objet `request` :
  + `operation`. Nom de l'opération à exécuter. Par exemple, spécifiez `"operation": "ReadCoilsRequest"` pour lire les bobines. Cette valeur doit être une chaîne Unicode. Pour les opérations prises en charge, veuillez consulter [Demandes et réponses de Modbus RTU](#modbus-protocol-adapter-connector-requests-responses).
  + `device`. L'appareil cible de la demande. Cette valeur doit être comprise entre `0 - 247`.
+ La propriété `id`. Un ID pour la demande. Cette valeur est utilisée pour la déduplication des données et est renvoyée en l'état dans la propriété `id` de toutes les réponses, y compris les réponses d'erreur. Cette valeur doit être une chaîne Unicode.
Si votre demande inclut un champ d'adresse, vous devez spécifier la valeur sous la forme d'un entier. Par exemple, `"address": 1`.
Les autres paramètres à inclure dans la demande dépendent de l'opération. Tous les paramètres de demande sont obligatoires, à l'exception du CRC, qui est traité séparément. Pour obtenir des exemples, consultez [Exemples de demandes et de réponses](#modbus-protocol-adapter-connector-examples).

**Exemple d'entrée : demande de lecture de bobines**  

```
{
    "request": {
        "operation": "ReadCoilsRequest",
    	"device": 1,
    	"address": 1,
    	"count": 1
    },
    "id": "TestRequest"
}
```

## Données de sortie
<a name="modbus-protocol-adapter-connector-data-output"></a>

Ce connecteur publie des réponses aux demandes Modbus RTU entrantes.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`modbus/adapter/response`

**Propriétés des messages**  
Le format du message de réponse varie en fonction de la demande correspondante et du statut de le réponse. Pour obtenir des exemples, consultez [Exemples de demandes et de réponses](#modbus-protocol-adapter-connector-examples).  
Une réponse pour une opération d'écriture est simplement un écho de la demande. Même si aucune information constructive n'est renvoyée pour des réponses en écriture, il est recommandé de vérifier l'état de la réponse.
Chaque réponse inclut les propriétés suivantes :  
+ Dans l'objet `response` :
  + `status`. État de la demande. Le statut peut avoir l'une des valeurs suivantes :
    + `Success`. La demande était valide, envoyée au réseau Modbus RTU et une réponse a été renvoyée.
    + `Exception`. La demande était valide, envoyée au réseau Modbus RTU et une réponse d'exception a été renvoyée. Pour de plus amples informations, veuillez consulter [Statut de la réponse : Exception](#modbus-protocol-adapter-connector-response-exception).
    + `No Response`. La demande n'était pas valide et le connecteur a détecté l'erreur avant que la demande ne soit envoyée sur le réseau Modbus RTU. Pour de plus amples informations, veuillez consulter [Statut de la réponse : Pas de réponse](#modbus-protocol-adapter-connector-response-noresponse).
  + `device`. L'appareil auquel la demande a été envoyée.
  + `operation`. Le type de demande qui a été envoyé.
  + `payload`. Le contenu de la réponse qui a été renvoyée. Si le `status` est `No Response`, cet objet contient uniquement une propriété `error` avec la description de l'erreur (par exemple, `"error": "[Input/Output] No Response received from the remote unit"`).
+ La propriété `id`. L'ID de la demande, utilisé pour la déduplication des données.

**Exemple de sortie : réussite**  

```
{
    "response" : {
        "status" : "success",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 1,
        	"bits": [1]
    	}
     },
     "id" : "TestRequest"
}
```

**Exemple de sortie : échec**  

```
{
    "response" : {
        "status" : "fail",
        "error_message": "Internal Error",
        "error": "Exception",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 129,
        	"exception_code": 2
    	}
     },
     "id" : "TestRequest"
}
```
Pour obtenir plus d’exemples, consultez [Exemples de demandes et de réponses](#modbus-protocol-adapter-connector-examples).

## Demandes et réponses de Modbus RTU
<a name="modbus-protocol-adapter-connector-requests-responses"></a>

Ce connecteur accepte les paramètres de demande de Modbus RTU en tant que [données d'entrée](#modbus-protocol-adapter-connector-data-input) et publie les réponses en tant que [données de sortie](#modbus-protocol-adapter-connector-data-output).

Les opérations communes suivantes sont prises en charge.


| Nom de l'opération dans la demande | Code de fonction dans la réponse | 
| --- | --- | 
| ReadCoilsRequest | 01 | 
| ReadDiscreteInputsRequest | 02 | 
| ReadHoldingRegistersRequest | 03 | 
| ReadInputRegistersRequest | 04 | 
| WriteSingleCoilRequest | 05 | 
| WriteSingleRegisterRequest | 06 | 
| WriteMultipleCoilsRequest | 15 | 
| WriteMultipleRegistersRequest | 16 | 
| MaskWriteRegisterRequest | 22 | 
| ReadWriteMultipleRegistersRequest | 23 | 

### Exemples de demandes et de réponses
<a name="modbus-protocol-adapter-connector-examples"></a>

Voici des exemples de demandes et de réponses pour les opérations prises en charge.

Read Coils (Lire des spires)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "ReadCoilsRequest",
    	"device": 1,
    	"address": 1,
    	"count": 1
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 1,
        	"bits": [1]
    	}
     },
     "id" : "TestRequest"
}
```

Read Discrete Inputs (Lire des entrées discrètes)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "ReadDiscreteInputsRequest",
        "device": 1,
        "address": 1,
        "count": 1
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
        "operation": "ReadDiscreteInputsRequest",
        "payload": {
            "function_code": 2,
            "bits": [1]
        }
     },
     "id" : "TestRequest"
}
```

Read Holding Registers (Lire les registres en attente)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "ReadHoldingRegistersRequest",
    	"device": 1,
    	"address": 1,
    	"count": 1
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "ReadHoldingRegistersRequest",
    	"payload": {
    	    "function_code": 3,
            "registers": [20,30]
    	}
     },
     "id" : "TestRequest"
}
```

Read Input Registers (Lire les registres d'entrée)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "ReadInputRegistersRequest",
    	"device": 1,
    	"address": 1,
    	"value": 1
    },
    "id": "TestRequest"
}
```

Write Single Coil (Écrire une spire unique)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "WriteSingleCoilRequest",
    	"device": 1,
    	"address": 1,
    	"value": 1
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "WriteSingleCoilRequest",
    	"payload": {
    	    "function_code": 5,
    	    "address": 1,
    	    "value": true
    	}
     },
     "id" : "TestRequest"
```

Write Single Register (Écrire un registre unique)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "WriteSingleRegisterRequest",
    	"device": 1,
    	"address": 1,
    	"value": 1
    },
    "id": "TestRequest"
}
```

Write Multiple Coils (Écrire plusieurs spires)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "WriteMultipleCoilsRequest",
    	"device": 1,
    	"address": 1,
    	"values": [1,0,0,1]
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "WriteMultipleCoilsRequest",
    	"payload": {
    	    "function_code": 15,
    	    "address": 1,
    	    "count": 4
    	}
     },
     "id" : "TestRequest"
}
```

Write Multiple Registers (Écrire plusieurs registres)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "WriteMultipleRegistersRequest",
    	"device": 1,
    	"address": 1,
    	"values": [20,30,10]
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "WriteMultipleRegistersRequest",
    	"payload": {
    	    "function_code": 23,
    	    "address": 1,
       		"count": 3
    	}
     },
     "id" : "TestRequest"
}
```

Mask Write Register (Masquer le registre d'écriture)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "MaskWriteRegisterRequest",
    	"device": 1,
    	"address": 1,
        "and_mask": 175,
        "or_mask": 1
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "MaskWriteRegisterRequest",
    	"payload": {
    	    "function_code": 22,
            "and_mask": 0,
            "or_mask": 8
    	}
     },
     "id" : "TestRequest"
}
```

Read Write Multiple Registers (Écrire/lire plusieurs registres)  
**Exemple de requête :**  

```
{
    "request": {
        "operation": "ReadWriteMultipleRegistersRequest",
    	"device": 1,
    	"read_address": 1,
        "read_count": 2,
        "write_address": 3,
        "write_registers": [20,30,40]
    },
    "id": "TestRequest"
}
```
**Exemple de réponse :**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "ReadWriteMultipleRegistersRequest",
    	"payload": {
    	    "function_code": 23,
    	    "registers": [10,20,10,20]
    	}
     },
     "id" : "TestRequest"
}
```
Les registres renvoyés dans cette réponse sont les registres qui sont lus.

### Statut de la réponse : Exception
<a name="modbus-protocol-adapter-connector-response-exception"></a>

Des exceptions peuvent se produire lorsque le format de la demande est valide, mais la demande échoue. Dans ce cas, la réponse contient les informations suivantes :
+ Le `status` est réglé sur `Exception`.
+ Le `function_code` est égal au code de fonction de la requête \$1 128.
+ Le `exception_code` contient le code d'exception. Pour plus d'informations, consultez les codes d'exception de Modbus.

**Exemple :**

```
{
    "response" : {
        "status" : "fail",
        "error_message": "Internal Error",
        "error": "Exception",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 129,
        	"exception_code": 2
    	}
     },
     "id" : "TestRequest"
}
```

### Statut de la réponse : Pas de réponse
<a name="modbus-protocol-adapter-connector-response-noresponse"></a>

Ce connecteur effectue des vérifications de validation sur la demande Modbus. Par exemple, il vérifie les formats non valides et les champs manquants. Si la validation échoue, le connecteur n'envoie pas la demande. A la place, il renvoie une réponse qui contient les informations suivantes :
+ Le `status` est réglé sur `No Response`.
+ `error`Contient la raison de l'erreur.
+ Le `error_message` contient le message de l'erreur.

**Exemples :**

```
{
    "response" : {
        "status" : "fail",
        "error_message": "Invalid address field. Expected <type 'int'>, got <type 'str'>",
        "error": "No Response",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"error": "Invalid address field. Expected <type 'int'>, got <type 'str'>"
    	}
     },
     "id" : "TestRequest"
}
```

Si la demande vise un appareil qui n'existe pas ou si le réseau Modbus RTU ne fonctionne pas, vous pouvez obtenir une `ModbusIOException` qui utilise le format No Response.

```
{
    "response" : {
        "status" : "fail",
        "error_message": "[Input/Output] No Response received from the remote unit",
        "error": "No Response",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"error": "[Input/Output] No Response received from the remote unit"
    	}
     },
     "id" : "TestRequest"
}
```

## Exemple d'utilisation
<a name="modbus-protocol-adapter-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#modbus-protocol-adapter-connector-req) pour le connecteur.

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#modbus-protocol-adapter-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-device-resource"></a>Ajoutez la ressource de périphérique locale requise et accordez un accès en lecture/écriture à la fonction Lambda.

   1. Ajoutez le connecteur et configurez ses [paramètres](#modbus-protocol-adapter-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#modbus-protocol-adapter-connector-data-input) et d'envoyer des [données de sortie](#modbus-protocol-adapter-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="modbus-protocol-adapter-connector-usage-example"></a>

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

```
import greengrasssdk
import json

TOPIC_REQUEST = 'modbus/adapter/request'

# Creating a greengrass core sdk client
iot_client = greengrasssdk.client('iot-data')

def create_read_coils_request():
	request = {
		"request": {
			"operation": "ReadCoilsRequest",
			"device": 1,
			"address": 1,
			"count": 1
		},
		"id": "TestRequest"
	}
	return request

def publish_basic_request():
	iot_client.publish(payload=json.dumps(create_read_coils_request()), topic=TOPIC_REQUEST)

publish_basic_request()

def lambda_handler(event, context):
	return
```

## Licences
<a name="modbus-protocol-adapter-connector-license"></a>

Le connecteur d'adaptateur de protocole Modbus-RTU inclut les logiciels/licences tiers suivants :
+ [pymodbus](https://github.com/riptideio/pymodbus/blob/master/README.rst)/BSD
+ [pyserial](https://github.com/pyserial/pyserial)/BSD

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="modbus-protocol-adapter-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>Mise à niveau de l'environnement d'exécution Lambda vers Python 3.7, ce qui modifie les exigences d'exécution. | 
| 2 | L'ARN du connecteur a été mis à jour pour Région AWS le support. Amélioration de la journalisation des erreurs. | 
| 1 | Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="modbus-protocol-adapter-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# Connecteur adaptateur de protocole Modbus-TCP
<a name="modbus-tcp-connector"></a>

Le [connecteur](connectors.md) d'adaptateur de protocole Modbus-TCP collecte les données des appareils locaux via le protocole ModbusTCP et les publie sur les flux sélectionnés. `StreamManager`

Vous pouvez également utiliser ce connecteur avec le SiteWise connecteur IoT et votre SiteWise passerelle IoT. Votre passerelle doit fournir la configuration du connecteur. Pour plus d'informations, voir [Configurer une source Modbus TCP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-modbus-source.html) dans le guide de l' SiteWise utilisateur de l'IoT. 

**Note**  
 Ce connecteur fonctionne en mode [sans isolation de conteneur](lambda-group-config.md#no-container-mode), vous pouvez donc le déployer dans un AWS IoT Greengrass groupe exécuté dans un conteneur Docker. 

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/ModbusTCPConnector/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/ModbusTCPConnector/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/ModbusTCPConnector/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#modbus-tcp-connector-changelog).

## Prérequis
<a name="modbus-tcp-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 1 - 3 ]
+ AWS IoT Greengrass Logiciel de base v1.10.2 ou version ultérieure.
+ Le gestionnaire de flux est activé sur le AWS IoT Greengrass groupe.
+ Java 8 installé sur le périphérique principal et ajouté à la variable d'`PATH`environnement.

**Note**  
 Ce connecteur est uniquement disponible dans les régions suivantes :   
ap-southeast-1
ap-southeast-2
eu-central-1
eu-west-1
us-east-1
us-west-2
cn-north-1

------

## Paramètres du connecteur
<a name="modbus-tcp-connector-param"></a>

Ce connecteur prend en charge les paramètres suivants :

`LocalStoragePath`  
Le répertoire de l' AWS IoT Greengrass hôte dans lequel le SiteWise connecteur IoT peut écrire des données persistantes. Le répertoire par défaut est `/var/sitewise`.  
Nom affiché dans la AWS IoT console : **chemin de stockage local**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^\s*$|\/.`

`MaximumBufferSize`  
Taille maximale en Go pour l'utilisation des SiteWise disques IoT. La taille par défaut est de 10 Go.  
Nom affiché dans la AWS IoT console : **taille maximale de la mémoire tampon du disque**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^\s*$|[0-9]+`

`CapabilityConfiguration`  
Ensemble de configurations de collecteurs Modbus TCP à partir desquelles le connecteur collecte les données et auxquelles il se connecte.  
Afficher le nom dans la AWS IoT console : **CapabilityConfiguration**  
Nécessaire : `false`  
Type : chaîne JSON bien formée qui définit l'ensemble des configurations de feedback prises en charge.

Voici un exemple de `CapabilityConfiguration` :

```
{
    "sources": [
        {
            "type": "ModBusTCPSource",
            "name": "SourceName1",
            "measurementDataStreamPrefix": "SourceName1_Prefix",
            "destination": {
                "type": "StreamManager",
                "streamName": "SiteWise_Stream_1",
                "streamBufferSize": 8
            },
            "endpoint": {
                "ipAddress": "127.0.0.1",
                "port": 8081,
                "unitId": 1
            },
            "propertyGroups": [
                {
                    "name": "GroupName",
                    "tagPathDefinitions": [
                        {
                            "type": "ModBusTCPAddress",
                            "tag": "TT-001",
                            "address": "30001",
                            "size": 2,
                            "srcDataType": "float",
                            "transformation": "byteWordSwap",
                            "dstDataType": "double"
                        }
                    ],
                    "scanMode": {
                        "type": "POLL",
                        "rate": 100
                    }
                }
            ]
        }
    ]
}
```

### Exemple de création de connecteur (AWS CLI)
<a name="modbus-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur d'adaptateur de protocole Modbus-TCP.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '
{
    "Connectors": [
        {
            "Id": "MyModbusTCPConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ModbusTCP/versions/3",
            "Parameters": {
                "capability_configuration": "{\"version\":1,\"namespace\":\"iotsitewise:modbuscollector:1\",\"configuration\":\"{\"sources\":[{\"type\":\"ModBusTCPSource\",\"name\":\"SourceName1\",\"measurementDataStreamPrefix\":\"\",\"endpoint\":{\"ipAddress\":\"127.0.0.1\",\"port\":8081,\"unitId\":1},\"propertyGroups\":[{\"name\":\"PropertyGroupName\",\"tagPathDefinitions\":[{\"type\":\"ModBusTCPAddress\",\"tag\":\"TT-001\",\"address\":\"30001\",\"size\":2,\"srcDataType\":\"hexdump\",\"transformation\":\"noSwap\",\"dstDataType\":\"string\"}],\"scanMode\":{\"rate\":200,\"type\":\"POLL\"}}],\"destination\":{\"type\":\"StreamManager\",\"streamName\":\"SiteWise_Stream\",\"streamBufferSize\":10},\"minimumInterRequestDuration\":200}]}\"}"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

## Données d'entrée
<a name="modbus-tcp-connector-data-input"></a>

Ce connecteur n'accepte pas les messages MQTT comme données d'entrée.

## Données de sortie
<a name="modbus-tcp-connector-data-output"></a>

Ce connecteur publie des données sur`StreamManager`. Vous devez configurer le flux de messages de destination. Les messages de sortie ont la structure suivante :

```
{
    "alias": "string",
    "messages": [
        {
            "name": "string",
            "value": boolean|double|integer|string,
            "timestamp": number,
            "quality": "string"
        }
    ]
}
```

## Licences
<a name="modbus-tcp-connector-license"></a>

Le connecteur de l'adaptateur de protocole Modbus-TCP inclut les logiciels/licences tiers suivants :
+ [Modbus Petri numérique](https://github.com/digitalpetri/modbus)

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="modbus-tcp-connector-changelog"></a>

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


| Version | Modifications | Date | 
| --- | --- | --- | 
| 3 (recommandé) | Cette version contient des corrections de bogues. | 22 décembre 2021 | 
| 2 | Ajout du support pour les chaînes source ASCII et ISO8859 codées. UTF8 | 24 mai 2021 | 
| 1 | Première version. | 15 décembre 2020 | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="modbus-tcp-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# Connecteur GPIO Raspberry Pi
<a name="raspberrypi-gpio-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le [connecteur](connectors.md) GPIO du Raspberry Pi contrôle les broches d'entrée/sortie à usage général (GPIO) d'un périphérique principal du Raspberry Pi.

Ce connecteur interroge les broches d'entrée à un intervalle spécifié et publie les changements d'état dans des rubriques MQTT. Il accepte également les demandes de lecture et d'écriture sous forme de messages MQTT provenant de fonctions Lambda définies par l'utilisateur. Les demandes d'écriture sont utilisées pour régler la broche sur haute ou basse tension.

Le connecteur fournit des paramètres que vous utilisez pour désigner des broches d'entrée et de sortie. Ce comportement est configuré avant le déploiement de groupe. Il ne peut pas être modifié au moment de l'exécution.
+ Les broches d'entrée peuvent être utilisées pour recevoir des données à partir des appareils périphériques.
+ Les broches de sortie peuvent être utilisées pour contrôler les périphériques ou envoyer des données aux périphériques.

Vous pouvez utiliser ce connecteur pour de nombreux scénarios, tels que :
+ contrôler des feux vert, orange et rouge d'un feu de circulation.
+ contrôler un ventilateur (relié à un relais électrique) basé sur les données provenant d'un capteur d'humidité.
+ alerter des employés dans un magasin lorsque les clients appuient sur un bouton.
+ utiliser un commutateur de lumière intelligent pour contrôler d'autres appareils IoT.

**Note**  
Ce connecteur n'est pas adapté aux applications qui ont des besoins en temps réel. Des événements de courte durée peuvent être manqués.

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#raspberrypi-gpio-connector-changelog).

## Prérequis
<a name="raspberrypi-gpio-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ [Python](https://www.python.org/) version 3.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 modèle B ou Raspberry Pi 3 modèle B/B\$1. Vous devez connaître la séquence de broches de votre Raspberry Pi. Pour de plus amples informations, veuillez consulter [Séquence de broches GPIO](#raspberrypi-gpio-connector-req-pins).
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>[Ressource de périphérique locale](access-local-resources.md) du groupe Greengrass pointant vers `/dev/gpiomem` le Raspberry Pi. Si vous créez la ressource dans la console, vous devez sélectionner l'option **Ajouter automatiquement les autorisations de groupe de systèmes d'exploitation du groupe Linux propriétaire de la ressource**. Dans l'API, définissez la `GroupOwnerSetting.AutoAddGroupOwner` propriété sur`true`.
+ <a name="conn-gpio-req-rpi-gpio"></a>Le module [RPi.GPIO](https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/) installé sur le Raspberry Pi. Dans Raspbian, ce module est installé par défaut. Vous pouvez utiliser la commande suivante pour le réinstaller :

  ```
  sudo pip install RPi.GPIO
  ```

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel de base v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 modèle B ou Raspberry Pi 3 modèle B/B\$1. Vous devez connaître la séquence de broches de votre Raspberry Pi. Pour de plus amples informations, veuillez consulter [Séquence de broches GPIO](#raspberrypi-gpio-connector-req-pins).
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>[Ressource de périphérique locale](access-local-resources.md) du groupe Greengrass pointant vers `/dev/gpiomem` le Raspberry Pi. Si vous créez la ressource dans la console, vous devez sélectionner l'option **Ajouter automatiquement les autorisations de groupe de systèmes d'exploitation du groupe Linux propriétaire de la ressource**. Dans l'API, définissez la `GroupOwnerSetting.AutoAddGroupOwner` propriété sur`true`.
+ <a name="conn-gpio-req-rpi-gpio"></a>Le module [RPi.GPIO](https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/) installé sur le Raspberry Pi. Dans Raspbian, ce module est installé par défaut. Vous pouvez utiliser la commande suivante pour le réinstaller :

  ```
  sudo pip install RPi.GPIO
  ```

------

### Séquence de broches GPIO
<a name="raspberrypi-gpio-connector-req-pins"></a>

Le connecteur GPIO du Raspberry Pi référence les broches GPIO selon le schéma de numérotation du système sur puce (SoC) sous-jacent, et non selon la disposition physique des broches GPIO. L'ordre physique des broches peut varier dans les versions du Raspberry Pi. Pour plus d'informations, consultez la section [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/) dans la documentation du Raspberry Pi.

Le connecteur ne peut pas valider que les broches d'entrée et de sortie que vous configurez se mappent correctement au matériel sous-jacent de votre Raspberry Pi. Si la configuration de broche n'est pas valide, le connecteur renvoie une erreur d'exécution lorsqu'il essaie de démarrer sur le périphérique. Pour résoudre ce problème, reconfigurez le connecteur puis redéployez.

**Note**  
Assurez-vous que les périphériques des broches GPIO sont correctement connectés pour empêcher les dommages des composants.

## Paramètres du connecteur
<a name="raspberrypi-gpio-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

`InputGpios`  
Une liste séparée par des virgules de numéros de broches GPIO à configurer en tant qu'entrées. Vous pouvez également ajouter `U` pour définir une résistance de tirage de la broche ou `D` pour définir la résistance de rappel. Exemple: `"5,6U,7D"`.  
Nom affiché dans la AWS IoT console : broches **GPIO d'entrée**  
Obligatoire : `false`. Vous devez spécifier les broches d'entrée, de sortie ou les deux.  
Type : `string`  
Schéma valide : `^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$`

`InputPollPeriod`  
Intervalle (en millisecondes) entre chaque opération d'interrogation, qui vérifie les broches GPIO d'entrée pour les changements d'état. La valeur minimale est de 1.  
Cette valeur dépend de votre scénario et des types d'appareils qui sont interrogés. Par exemple, une valeur `50` doit être suffisamment rapide pour détecter une pression de bouton.  
Nom affiché dans la AWS IoT console : Période d'**interrogation GPIO d'entrée**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^$|^[1-9][0-9]*$`

`OutputGpios`  
Une liste séparée par des virgules de nombres de broches GPIO à configurer en tant que sorties. Vous pouvez ajouter `H` pour régler sur un état haut (1) ou `L` pour régler sur un état faible (0). Exemple: `"8H,9,27L"`.  
Nom affiché dans la AWS IoT console : broches **GPIO de sortie**  
Obligatoire : `false`. Vous devez spécifier les broches d'entrée, de sortie ou les deux.  
Type : `string`  
Schéma valide : `^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$`

`GpioMem-ResourceId`  
ID de la ressource de l'appareil local qui représente `/dev/gpiomem`.  
Ce connecteur bénéficie d'un accès en lecture/écriture à la ressource.
Nom d'affichage dans la AWS IoT console : **Ressource for /dev/gpiomem device**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `.+`

### Exemple de création de connecteur (AWS CLI)
<a name="raspberrypi-gpio-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur Raspberry Pi GPIO.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyRaspberryPiGPIOConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/3",
            "Parameters": {
                "GpioMem-ResourceId": "my-gpio-resource",
                "InputGpios": "5,6U,7D",
                "InputPollPeriod": 50,
                "OutputGpios": "8H,9,27L"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="raspberrypi-gpio-connector-data-input"></a>

Ce connecteur accepte les demandes de lecture ou d'écriture pour les broches GPIO sur deux rubriques MQTT.
+ Lire les demandes dans la rubrique `gpio/+/+/read`.
+ Écrire les demandes dans la rubrique `gpio/+/+/write`.

Pour publier dans ces rubriques, remplacez respectivement les caractères génériques `+` par le nom d'objet principal et le nombre de broches cibles. Par exemple :

```
gpio/core-thing-name/gpio-number/read
```

**Note**  
Actuellement, lorsque vous créez un abonnement qui utilise le connecteur GPIO du Raspberry Pi, vous devez spécifier une valeur pour au moins l'un des caractères génériques \$1 de la rubrique.

**Filtre de rubriques :** `gpio/+/+/read`  
Utilisez cette rubrique pour demander au connecteur de lire l'état de la broche GPIO spécifiée dans la rubrique.  
Le connecteur publie la réponse dans la rubrique de sortie correspondante (par exemple, `gpio/core-thing-name/gpio-number/state`).    
**Propriétés des messages**  
Aucune. Les messages qui sont envoyés dans cette rubrique sont ignorés.

**Filtre de rubriques :** `gpio/+/+/write`  
Utilisez cette rubrique pour envoyer des demandes d'écriture à une broche GPIO. Cela demande au connecteur de régler la broche GPIO spécifiée dans la rubrique sur faible ou haute tension.  
+ `0` règle la broche sur faible tension.
+ `1` règle la broche sur haute tension.
Le connecteur publie la réponse dans la rubrique `/state` de sortie correspondante (par exemple, `gpio/core-thing-name/gpio-number/state`).    
**Propriétés des messages**  
Valeur `0` ou `1`, sous forme d'un nombre entier ou d'une chaîne.  
**Exemple d'entrée**  

```
0
```

## Données de sortie
<a name="raspberrypi-gpio-connector-data-output"></a>

Ce connecteur publie des données dans deux rubriques :
+ Changements d'états hauts ou faibles dans la rubrique `gpio/+/+/state`.
+ Erreurs dans la rubrique `gpio/+/error`.

**Filtre de rubriques :** `gpio/+/+/state`  
Utilisez cette rubrique pour écouter les changements d'état sur les broches d'entrée et les réponses pour les demandes de lecture. Le connecteur renvoie la chaîne `"0"` si la broche est dans un état faible ou `"1"` s'il est dans un état haut.  
Lorsqu'il publie dans cette rubrique, le connecteur remplace respectivement les caractères génériques `+` par le nom d'objet principal et la broche cible. Par exemple :  

```
gpio/core-thing-name/gpio-number/state
```
Actuellement, lorsque vous créez un abonnement qui utilise le connecteur GPIO du Raspberry Pi, vous devez spécifier une valeur pour au moins l'un des caractères génériques \$1 de la rubrique.  
**Exemple de sortie**  

```
0
```

**Filtre de rubriques :** `gpio/+/error`  
Utilisez cette rubrique pour écouter les erreurs. Le connecteur publie dans cette rubrique suite à une demande non valide (par exemple, lorsqu'un changement d'état est demandé sur une broche d'entrée).  
Lorsqu'il publie dans cette rubrique, le connecteur remplace respectivement le caractère générique `+` par le nom d'objet principal.    
**Exemple de sortie**  

```
{
   "topic": "gpio/my-core-thing/22/write",
   "error": "Invalid GPIO operation",
   "long_description": "GPIO 22 is configured as an INPUT GPIO. Write operations are not permitted."
 }
```

## Exemple d'utilisation
<a name="raspberrypi-gpio-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#raspberrypi-gpio-connector-req) pour le connecteur.

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#raspberrypi-gpio-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-device-resource"></a>Ajoutez la ressource de périphérique locale requise et accordez un accès en lecture/écriture à la fonction Lambda.

   1. Ajoutez le connecteur et configurez ses [paramètres](#raspberrypi-gpio-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#raspberrypi-gpio-connector-data-input) et d'envoyer des [données de sortie](#raspberrypi-gpio-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="raspberrypi-gpio-connector-usage-example"></a>

L'exemple suivant de fonction Lambda envoie un message d'entrée au connecteur. Cet exemple envoie des demandes de lecture pour un ensemble de pins GPIO d'entrée. Il indique comment construire des rubriques à l'aide du nom de l'objet principale et du nombre de broches.

```
import greengrasssdk
import json
import os

iot_client = greengrasssdk.client('iot-data')
INPUT_GPIOS = [6, 17, 22]

thingName = os.environ['AWS_IOT_THING_NAME']

def get_read_topic(gpio_num):
    return '/'.join(['gpio', thingName, str(gpio_num), 'read'])

def get_write_topic(gpio_num):
    return '/'.join(['gpio', thingName, str(gpio_num), 'write'])

def send_message_to_connector(topic, message=''):
    iot_client.publish(topic=topic, payload=str(message))

def set_gpio_state(gpio, state):
    send_message_to_connector(get_write_topic(gpio), str(state))

def read_gpio_state(gpio):
    send_message_to_connector(get_read_topic(gpio))

def publish_basic_message():
    for i in INPUT_GPIOS:
    	read_gpio_state(i)

publish_basic_message()

def lambda_handler(event, context):
    return
```

## Licences
<a name="raspberrypi-gpio-connector-license"></a>

Le connecteur Raspberry Pi GPIO ; inclut les logiciels/licences tiers suivants :
+ [RPi.GPIO /MIT](https://pypi.org/project/RPi.GPIO/)

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="raspberrypi-gpio-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>Mise à niveau de l'environnement d'exécution Lambda vers Python 3.7, ce qui modifie les exigences d'exécution. | 
| 2 | L'ARN du connecteur a été mis à jour pour Région AWS le support. | 
| 1 | Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="raspberrypi-gpio-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/) dans la documentation Raspberry Pi

# Connecteur Serial Stream
<a name="serial-stream-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le [connecteur](connectors.md) Serial Stream lit et écrit sur un port série d'un périphérique AWS IoT Greengrass principal.

Ce connecteur prend en charge deux modes de fonctionnement :
+ **la lecture à la demande**. Reçoit les demandes de lecture et d'écriture dans les rubriques MQTT et publie la réponse de l'opération de lecture ou de l'état de l'opération d'écriture.
+ **l'attente active de lecture**. Lit à partir du port série à intervalles réguliers. Ce mode prend également en charge les Read-On-Demand requêtes.

**Note**  
Les requêtes de lecture sont limitées à une longueur de lecture maximale de 63 994 octets. Les requêtes d'écriture sont limitées à une longueur de données maximale de 128 000 octets.

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/SerialStream/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/SerialStream/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/SerialStream/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#serial-stream-connector-changelog).

## Prérequis
<a name="serial-stream-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-serial-stream-req-serial-port-resource"></a>[Ressource de périphérique locale](access-local-resources.md) du groupe Greengrass qui pointe vers le port série cible.
**Note**  
Avant de déployer ce connecteur, nous vous recommandons de configurer le port série et de vérifier que vous pouvez y accéder en lecture et en écriture. 

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-serial-stream-req-serial-port-resource"></a>[Ressource de périphérique locale](access-local-resources.md) du groupe Greengrass qui pointe vers le port série cible.
**Note**  
Avant de déployer ce connecteur, nous vous recommandons de configurer le port série et de vérifier que vous pouvez y accéder en lecture et en écriture. 

------

## Paramètres du connecteur
<a name="serial-stream-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

`BaudRate`  
Vitesse de transmission de la connexion série.  
Nom affiché dans la AWS IoT console : débit en **bauds**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200, 230400`  
Modèle valide : `^110$|^300$|^600$|^1200$|^2400$|^4800$|^9600$|^14400$|^19200$|^28800$|^38400$|^56000$|^57600$|^115200$|^230400$`

`Timeout`  
Délai (en secondes) pour une opération de lecture.  
Nom affiché dans la AWS IoT console : **Timeout**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `1 - 59`  
Modèle valide : `^([1-9]|[1-5][0-9])$`

`SerialPort`  
Chemin d'accès absolu au port série physique sur le périphérique. Il s'agit du chemin d'accès source qui est spécifié pour la ressource du périphérique local.  
Nom affiché dans la AWS IoT console : **port série**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[/a-zA-Z0-9_-]+`

`SerialPort-ResourceId`  
ID de la ressource de l'appareil local qui représente le port série physique.  
Ce connecteur bénéficie d'un accès en lecture/écriture à la ressource.
Nom affiché dans la AWS IoT console : **ressource du port série**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `[a-zA-Z0-9_-]+`

`PollingRead`  
Définit le mode de lecture : Polling-Read ou. Read-On-Demand  
+ Pour le mode d'attente active de lecture, spécifiez `true`. Dans ce mode, les propriétés `PollingInterval`, `PollingReadType` et `PollingReadLength` sont obligatoires.
+ Pour Read-On-Demand le mode, spécifiez`false`. Dans ce mode, le type et les valeurs de longueur sont spécifiés dans la demande de lecture.
Nom affiché dans la AWS IoT console : **mode lecture**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `true, false`  
Modèle valide : `^([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$`

`PollingReadLength`  
Longueur des données (en octets) à lire dans chaque opération d'attente active de lecture. Cela s'applique uniquement lorsque vous utilisez le mode d'attente active de lecture.  
Nom affiché dans la AWS IoT console : **longueur de lecture du sondage**  
Obligatoire : `false`. Cette propriété est obligatoire lorsque `PollingRead` est `true`.  
Type : `string`  
Modèle valide : `^(|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-2][0-9]{3}|63[0-8][0-9]{2}|639[0-8][0-9]|6399[0-4])$`

`PollingReadInterval`  
L'intervalle (en secondes) auquel l'attente active de lecture a lieu. Cela s'applique uniquement lorsque vous utilisez le mode d'attente active de lecture.  
Nom affiché dans la AWS IoT console : **Intervalle de lecture du sondage**  
Obligatoire : `false`. Cette propriété est obligatoire lorsque `PollingRead` est `true`.  
Type : `string`  
Valeurs valides : 1 - 999  
Modèle valide : `^(|[1-9]|[1-9][0-9]|[1-9][0-9][0-9])$`

`PollingReadType`  
Type de données que les threads d'interrogation lisent. Cela s'applique uniquement lorsque vous utilisez le mode d'attente active de lecture.  
Nom affiché dans la AWS IoT console : **type de lecture du sondage**  
Obligatoire : `false`. Cette propriété est obligatoire lorsque `PollingRead` est `true`.  
Type : `string`  
Valeurs valides : `ascii, hex`  
Modèle valide : `^(|[Aa][Ss][Cc][Ii][Ii]|[Hh][Ee][Xx])$`

`RtsCts`  
Indique s'il convient d'activer le contrôle de flux RTS/CTS. La valeur par défaut est `false`. Pour plus d'informations, consultez [RTS, CTS et RTR](https://en.wikipedia.org/wiki/RS-232#RTS,_CTS,_and_RTR).   
Nom affiché dans la AWS IoT console : contrôle de **flux RTS/CTS**  
Nécessaire : `false`  
Type : `string`  
Valeurs valides : `true, false`  
Modèle valide : `^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$`

`XonXoff`  
Indique s'il convient d'activer le contrôle de flux de logiciel. La valeur par défaut est `false`. Pour plus d'informations, consultez [Software flow control](https://en.wikipedia.org/wiki/Software_flow_control).  
Nom affiché dans la AWS IoT console : **Contrôle du flux logiciel**  
Nécessaire : `false`  
Type : `string`  
Valeurs valides : `true, false`  
Modèle valide : `^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$`

`Parity`  
Parité du port série. La valeur par défaut est `N`. Pour plus d'informations, consultez [Parity](https://en.wikipedia.org/wiki/Serial_port#Parity).   
Nom affiché dans la AWS IoT console : **parité des ports série**  
Nécessaire : `false`  
Type : `string`  
Valeurs valides : `N, E, O, S, M`  
Modèle valide : `^(|[NEOSMneosm])$`

### Exemple de création de connecteur (AWS CLI)
<a name="serial-stream-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur Serial Stream. Elle configure le connecteur pour le mode d'attente active de lecture.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MySerialStreamConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/SerialStream/versions/3",
            "Parameters": {
                "BaudRate" : "9600",
                "Timeout" : "25",
                "SerialPort" : "/dev/serial1",
                "SerialPort-ResourceId" : "my-serial-port-resource",
                "PollingRead" : "true",
                "PollingReadLength" : "30",
                "PollingReadInterval" : "30",
                "PollingReadType" : "hex"
            }
        }
    ]
}'
```

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="serial-stream-connector-data-input"></a>

Ce connecteur accepte les demandes de lecture ou d'écriture pour les ports série sur deux sujets MQTT. Les messages d'entrée doivent être au format JSON.
+ Lire les demandes dans la rubrique `serial/+/read/#`.
+ Écrire les demandes dans la rubrique `serial/+/write/#`.

Pour publier dans ces rubriques, remplacez le caractère générique `+` par le nom d'objet principal et le caractère générique `#` par le chemin d'accès au port série. Par exemple :

```
serial/core-thing-name/read/dev/serial-port
```

**Filtre de rubriques :** `serial/+/read/#`  
Utilisez cette rubrique pour envoyer les demandes de lecture à la demande à une broche série. Les requêtes de lecture sont limitées à une longueur de lecture maximale de 63 994 octets.    
**Propriétés des messages**    
`readLength`  
Longueur de données à lire à partir du port série.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[1-9][0-9]*$`  
`type`  
Type de données à lire.  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `ascii, hex`  
Modèle valide : `(?i)^(ascii|hex)$`  
`id`  
ID arbitraire de la demande. Cette propriété est utilisée pour mapper une demande d'entrée à une réponse de sortie.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `.+`  
**Exemple d'entrée**  

```
{
    "readLength": "30",
    "type": "ascii",
    "id": "abc123"
}
```

**Filtre de rubriques :** `serial/+/write/#`  
Utilisez cette rubrique pour envoyer des demandes d'écriture à une broche série. Les requêtes d'écriture sont limitées à une longueur de données maximale de 128 000 octets.    
**Propriétés des messages**    
`data`  
Chaîne à écrire dans le port série.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[1-9][0-9]*$`  
`type`  
Type de données à lire.  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `ascii, hex`  
Modèle valide : `^(ascii|hex|ASCII|HEX)$`  
`id`  
ID arbitraire de la demande. Cette propriété est utilisée pour mapper une demande d'entrée à une réponse de sortie.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `.+`  
**Exemple d'entrée : demande ASCII**  

```
{
    "data": "random serial data",
    "type": "ascii",
    "id": "abc123"
}
```  
**Exemple d'entrée : demande hex**  

```
{
    "data": "base64 encoded data",
    "type": "hex",
    "id": "abc123"
}
```

## Données de sortie
<a name="serial-stream-connector-data-output"></a>

Le connecteur publie des données de sortie dans deux rubriques :
+ Informations sur le statut à partir du connecteur dans la rubrique `serial/+/status/#`.
+ réponses à partir des demandes de lecture dans la rubrique `serial/+/read_response/#`.

Pour publier dans cette rubrique, le connecteur remplace le caractère générique `+` par le nom d'objet principal et le caractère générique `#` par le chemin d'accès au port série. Par exemple :

```
serial/core-thing-name/status/dev/serial-port
```

**Filtre de rubriques :** `serial/+/status/#`  
Utilisez cette rubrique pour écouter le statut des demandes de lecture et d'écriture. Si une propriété `id` est incluse dans la demande, elle est renvoyée dans la réponse.    
**Exemple de sortie : réussite**  

```
{
    "response": {
        "status": "success"
    },
    "id": "abc123"
}
```  
**Exemple de sortie : échec**  
Un échec de réponse inclut une propriété `error_message` qui décrit l'erreur ou l'expiration rencontrée lors de l'opération de lecture ou d'écriture.  

```
{
    "response": {
        "status": "fail",
        "error_message": "Could not write to port"
    },
    "id": "abc123"
}
```

**Filtre de rubriques :** `serial/+/read_response/#`  
Utilisez cette rubrique pour recevoir les données de réponse à partir d'une opération de lecture. Les données de réponse sont codées en Base64 si le type est `hex`.    
**Exemple de sortie**  

```
{
    "data": "output of serial read operation"
    "id": "abc123"
}
```

## Exemple d'utilisation
<a name="serial-stream-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#serial-stream-connector-req) pour le connecteur.

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#serial-stream-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass principal pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-device-resource"></a>Ajoutez la ressource de périphérique locale requise et accordez un accès en lecture/écriture à la fonction Lambda.

   1. Ajoutez le connecteur à votre groupe et configurez ses [paramètres](#serial-stream-connector-param).

   1. Ajoutez au groupe des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#serial-stream-connector-data-input) et d'envoyer des [données de sortie](#serial-stream-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="serial-stream-connector-usage-example"></a>

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

```
import greengrasssdk
import json

TOPIC_REQUEST = 'serial/CORE_THING_NAME/write/dev/serial1'

# Creating a greengrass core sdk client
iot_client = greengrasssdk.client('iot-data')

def create_serial_stream_request():
	request = {
		"data": "TEST",
		"type": "ascii",
		"id": "abc123"
	}
	return request

def publish_basic_request():
	iot_client.publish(payload=json.dumps(create_serial_stream_request()), topic=TOPIC_REQUEST)

publish_basic_request()

def lambda_handler(event, context):
	return
```

## Licences
<a name="serial-stream-connector-license"></a>

Le connecteur Serial Stream inclut les logiciels/licences tiers suivants :
+ [pyserial](https://github.com/pyserial/pyserial)/BSD

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="serial-stream-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>Mise à niveau de l'environnement d'exécution Lambda vers Python 3.7, ce qui modifie les exigences d'exécution. | 
| 2 | L'ARN du connecteur a été mis à jour pour Région AWS le support. | 
| 1 | Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="serial-stream-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# ServiceNow MetricBase Connecteur d'intégration
<a name="servicenow-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le [connecteur ServiceNow MetricBase ](connectors.md) d'intégration publie les statistiques des séries chronologiques des appareils Greengrass vers. ServiceNow MetricBase Cela vous permet de stocker, analyser et visualiser les données en séries chronologiques à partir de l'environnement Greengrass Core et d'agir sur les événements locaux.

Ce connecteur reçoit des séries chronologiques sur un sujet MQTT et publie les données sur l' ServiceNow API à intervalles réguliers.

Vous pouvez utiliser ce connecteur pour prendre en charge des scénarios, tels que :
+ Créer des alertes basées sur le seuil et des alarmes en fonction des données en séries chronologiques collectées depuis les appareils Greengrass.
+ Utilisez les données des services temporels des appareils Greengrass avec des applications personnalisées créées sur la ServiceNow plateforme.

Ce connecteur possède les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#servicenow-connector-changelog).

## Prérequis
<a name="servicenow-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure. AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-servicenow-req-servicenow-account"></a>Un ServiceNow compte avec un abonnement activé à MetricBase. En outre, une métrique et une table de métriques doivent être créées dans le compte. Pour plus d'informations, consultez [MetricBase](https://docs.servicenow.com/bundle/london-servicenow-platform/page/administer/metricbase/concept/metricbase.html)la ServiceNow documentation.
+ <a name="conn-servicenow-req-secret"></a>Secret de type texte AWS Secrets Manager qui stocke le nom d'utilisateur et le mot de passe permettant de se connecter à votre ServiceNow instance avec une authentification de base. Le secret doit contenir les clés « utilisateur » et « mot de passe » avec des valeurs correspondantes. Pour plus d'informations, consultez la section [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de AWS Secrets Manager l'utilisateur*.
+ Une ressource secrète du groupe Greengrass qui fait référence au secret du Secrets Manager. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure. AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-servicenow-req-servicenow-account"></a>Un ServiceNow compte avec un abonnement activé à MetricBase. En outre, une métrique et une table de métriques doivent être créées dans le compte. Pour plus d'informations, consultez [MetricBase](https://docs.servicenow.com/bundle/london-servicenow-platform/page/administer/metricbase/concept/metricbase.html)la ServiceNow documentation.
+ <a name="conn-servicenow-req-secret"></a>Secret de type texte AWS Secrets Manager qui stocke le nom d'utilisateur et le mot de passe permettant de se connecter à votre ServiceNow instance avec une authentification de base. Le secret doit contenir les clés « utilisateur » et « mot de passe » avec des valeurs correspondantes. Pour plus d'informations, consultez la section [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de AWS Secrets Manager l'utilisateur*.
+ Une ressource secrète du groupe Greengrass qui fait référence au secret du Secrets Manager. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

------

## Paramètres du connecteur
<a name="servicenow-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Version 4 ]

`PublishInterval`  <a name="service-now-PublishInterval"></a>
Le nombre maximal de secondes à attendre entre la publication d'événements sur ServiceNow. La valeur maximale est 900.  
Le connecteur publie à la ServiceNow date à laquelle `PublishBatchSize` il est atteint ou `PublishInterval` expire.  
Nom affiché dans la AWS IoT console : **Intervalle de publication en secondes**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `1 - 900`  
Modèle valide : `[1-9]|[1-9]\d|[1-9]\d\d|900`

`PublishBatchSize`  <a name="service-now-PublishBatchSize"></a>
Le nombre maximum de valeurs métriques pouvant être regroupées par lots avant leur publication sur ServiceNow.  
Le connecteur publie à la ServiceNow date à laquelle `PublishBatchSize` il est atteint ou `PublishInterval` expire.  
Nom affiché dans la AWS IoT console : **Taille du lot de publication**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`InstanceName`  <a name="service-now-InstanceName"></a>
Nom de l'instance à laquelle se connecter ServiceNow.  
Nom affiché dans la AWS IoT console : **Nom de l' ServiceNow instance**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`DefaultTableName`  <a name="service-now-DefaultTableName"></a>
Nom de la table contenant les informations `GlideRecord` associées à la base de MetricBase données de séries chronologiques. La propriété `table` de la charge utile du message d'entrée peut être utilisée pour remplacer cette valeur.  
Nom affiché dans la AWS IoT console : **nom de la table devant contenir la métrique**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`MaxMetricsToRetain`  <a name="service-now-MaxMetricsToRetain"></a>
Nombre maximal de métriques à enregistrer dans la mémoire avant qu'elles ne soient remplacées par de nouvelles métriques.  
Cette limite s'applique lorsqu'il n'y a aucune connexion à Internet et que le connecteur démarre pour mettre en tampon les métriques à publier ultérieurement. Lorsque le tampon est plein, les métriques les plus anciennes sont remplacées par de nouvelles métriques.  
Les métriques ne sont pas enregistrées si le processus hôte du connecteur est interrompu. Par exemple, cela peut se produire pendant le déploiement du groupe ou lorsque le périphérique redémarre.
Cette valeur doit être supérieure à la taille du lot et suffisamment grande pour contenir les messages basés sur le taux entrant des messages MQTT.  
Nom affiché dans la AWS IoT console : **nombre maximal de mesures à conserver en mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`AuthSecretArn`  <a name="service-now-AuthSecretArn"></a>
Le secret AWS Secrets Manager qui contient le nom ServiceNow d'utilisateur et le mot de passe. Il doit s'agir d'un secret de type texte. Le secret doit contenir les clés « utilisateur » et « mot de passe » avec des valeurs correspondantes.  
Nom affiché dans la AWS IoT console : **ARN du secret d'authentification**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`AuthSecretArn-ResourceId`  <a name="service-now-AuthSecretArn-ResourceId"></a>
La ressource secrète du groupe qui fait référence au secret de Secrets Manager pour les ServiceNow informations d'identification.  
Nom affiché dans la AWS IoT console : ressource de **jeton d'authentification**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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$`

------
#### [ Version 1 - 3 ]

`PublishInterval`  <a name="service-now-PublishInterval"></a>
Le nombre maximal de secondes à attendre entre la publication d'événements sur ServiceNow. La valeur maximale est 900.  
Le connecteur publie à la ServiceNow date à laquelle `PublishBatchSize` il est atteint ou `PublishInterval` expire.  
Nom affiché dans la AWS IoT console : **Intervalle de publication en secondes**  
Nécessaire : `true`  
Type : `string`  
Valeurs valides : `1 - 900`  
Modèle valide : `[1-9]|[1-9]\d|[1-9]\d\d|900`

`PublishBatchSize`  <a name="service-now-PublishBatchSize"></a>
Le nombre maximum de valeurs métriques pouvant être regroupées par lots avant leur publication sur ServiceNow.  
Le connecteur publie à la ServiceNow date à laquelle `PublishBatchSize` il est atteint ou `PublishInterval` expire.  
Nom affiché dans la AWS IoT console : **Taille du lot de publication**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`InstanceName`  <a name="service-now-InstanceName"></a>
Nom de l'instance à laquelle se connecter ServiceNow.  
Nom affiché dans la AWS IoT console : **Nom de l' ServiceNow instance**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`DefaultTableName`  <a name="service-now-DefaultTableName"></a>
Nom de la table contenant les informations `GlideRecord` associées à la base de MetricBase données de séries chronologiques. La propriété `table` de la charge utile du message d'entrée peut être utilisée pour remplacer cette valeur.  
Nom affiché dans la AWS IoT console : **nom de la table devant contenir la métrique**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`MaxMetricsToRetain`  <a name="service-now-MaxMetricsToRetain"></a>
Nombre maximal de métriques à enregistrer dans la mémoire avant qu'elles ne soient remplacées par de nouvelles métriques.  
Cette limite s'applique lorsqu'il n'y a aucune connexion à Internet et que le connecteur démarre pour mettre en tampon les métriques à publier ultérieurement. Lorsque le tampon est plein, les métriques les plus anciennes sont remplacées par de nouvelles métriques.  
Les métriques ne sont pas enregistrées si le processus hôte du connecteur est interrompu. Par exemple, cela peut se produire pendant le déploiement du groupe ou lorsque le périphérique redémarre.
Cette valeur doit être supérieure à la taille du lot et suffisamment grande pour contenir les messages basés sur le taux entrant des messages MQTT.  
Nom affiché dans la AWS IoT console : **nombre maximal de mesures à conserver en mémoire**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `^[0-9]+$`

`AuthSecretArn`  <a name="service-now-AuthSecretArn"></a>
Le secret AWS Secrets Manager qui contient le nom ServiceNow d'utilisateur et le mot de passe. Il doit s'agir d'un secret de type texte. Le secret doit contenir les clés « utilisateur » et « mot de passe » avec des valeurs correspondantes.  
Nom affiché dans la AWS IoT console : **ARN du secret d'authentification**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`AuthSecretArn-ResourceId`  <a name="service-now-AuthSecretArn-ResourceId"></a>
La ressource secrète du groupe qui fait référence au secret de Secrets Manager pour les ServiceNow informations d'identification.  
Nom affiché dans la AWS IoT console : ressource de **jeton d'authentification**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

------

### Exemple de création de connecteur (AWS CLI)
<a name="servicenow-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur ServiceNow MetricBase d'intégration.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyServiceNowMetricBaseIntegrationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/4",
            "Parameters": {
                "PublishInterval" : "10",
                "PublishBatchSize" : "50",
                "InstanceName" : "myinstance",
                "DefaultTableName" : "u_greengrass_app",
                "MaxMetricsToRetain" : "20000",
                "AuthSecretArn" : "arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "AuthSecretArn-ResourceId" : "MySecretResource", 
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="servicenow-connector-data-input"></a>

Ce connecteur accepte les métriques de séries chronologiques sur un sujet MQTT et les publie sur. ServiceNow Les messages d'entrée doivent être au format JSON.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`servicenow/metricbase/metric`

**Propriétés des messages**    
`request`  
Informations sur la table, l'enregistrement et la métrique. Cette requête représente l'objet `seriesRef` dans une demande POST en séries chronologiques. Pour plus d'informations, consultez [ Clotho Time Series API - POST](https://docs.servicenow.com/bundle/london-application-development/page/integrate/inbound-rest/concept/Clotho-Time-Series-API.html#clotho-POST-put).  
  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`subject`  
`sys_id` de l'enregistrement spécifique dans la table.  
Nécessaire : `true`  
Type : `string`  
`metric_name`  
Nom du champ de la métrique.  
Nécessaire : `true`  
Type : `string`  
`table`  
Nom du tableau dans lequel stocker l'enregistrement. Spécifiez cette valeur pour remplacer le paramètre `DefaultTableName`.  
Nécessaire : `false`  
Type : `string`  
`value`  
Valeur du point de données individuel.  
Nécessaire : `true`  
Type : `float`  
`timestamp`  
Horodatage du point de données individuel. La valeur par défaut est l'heure actuelle.  
Nécessaire : `false`  
Type : `string`

**Exemple d'entrée**  

```
{
    "request": {
        "subject":"ef43c6d40a0a0b5700c77f9bf387afe3",
        "metric_name":"u_count",
        "table": "u_greengrass_app"
        "value": 1.0,
        "timestamp": "2018-10-14T10:30:00"
    }
}
```

## Données de sortie
<a name="servicenow-connector-data-output"></a>

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

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`servicenow/metricbase/metric/status`

**Exemple de sortie : réussite**  

```
{
    "response": {
        "metric_name": "Errors",
        "table_name": "GliderProd",
        "processed_on": "2018-10-14T10:35:00",
        "response_id": "khjKSkj132qwr23fcba",
        "status": "success",
        "values": [
            {
                "timestamp": "2016-10-14T10:30:00",
                "value": 1.0
            },
            {
                "timestamp": "2016-10-14T10:31:00",
                "value": 1.1
            }
        ]
    }
}
```

**Exemple de sortie : échec**  

```
{
    "response": {
        "error": "InvalidInputException",
        "error_message": "metric value is invalid",
        "status": "fail"
    }
}
```
Si le connecteur détecte une erreur réessayable (par exemple, des erreurs de connexion), il réessaie de publier dans le lot suivant.

## Exemple d'utilisation
<a name="servicenow-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#servicenow-connector-req) pour le connecteur.

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#servicenow-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-secret-resource"></a>Ajoutez la ressource secrète requise et accordez un accès en lecture à la fonction Lambda.

   1. Ajoutez le connecteur et configurez ses [paramètres](#servicenow-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#servicenow-connector-data-input) et d'envoyer des [données de sortie](#servicenow-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="servicenow-connector-usage-example"></a>

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

```
import greengrasssdk
import json

iot_client = greengrasssdk.client('iot-data')
SEND_TOPIC = 'servicenow/metricbase/metric'

def create_request_with_all_fields():
    return {
        "request": {
             "subject": '2efdf6badbd523803acfae441b961961',
             "metric_name": 'u_count',
             "value": 1234,
             "timestamp": '2018-10-20T20:22:20',
             "table": 'u_greengrass_metricbase_test'
        }
    }

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
<a name="servicenow-connector-license"></a>

Le connecteur ServiceNow MetricBase d'intégration inclut les logiciels/licences tiers suivants :
+ [pysnow](https://github.com/rbw/pysnow)/MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="servicenow-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>Ajout du paramètre `IsolationMode` pour configurer le mode de conteneurisation du connecteur. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="servicenow-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# connecteur SNS
<a name="sns-connector"></a>

Le [connecteur](connectors.md) 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 est disponible dans 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](#sns-connector-changelog).

## Prérequis
<a name="sns-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure.
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-sns-req-sns-config"></a>Rubrique SNS configurée. Pour plus d'informations, consultez [Création d'une rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html) dans le *Guide du développeur Amazon Simple Notification Service*.
+ <a name="conn-sns-req-iam-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`sns:Publish`action sur l'Amazon cible SNStopic, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "sns:Publish"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:sns:us-east-1:123456789012: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 \$1).

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Logiciel de base v1.7 ou version ultérieure.
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-sns-req-sns-config"></a>Rubrique SNS configurée. Pour plus d'informations, consultez [Création d'une rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html) dans le *Guide du développeur Amazon Simple Notification Service*.
+ <a name="conn-sns-req-iam-policy"></a>Le [rôle de groupe Greengrass](group-role.md) est configuré pour autoriser l'`sns:Publish`action sur l'Amazon cible SNStopic, comme illustré dans l'exemple de politique IAM suivant.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "sns:Publish"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:sns:us-east-1:123456789012: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 \$1).

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

------

## Paramètres du connecteur
<a name="sns-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Version 4 ]

`DefaultSNSArn`  <a name="sns-DefaultSNSArn"></a>
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.  
Le rôle de groupe doit permettre l'autorisation `sns:Publish` à toutes les rubriques cibles. Pour de plus amples informations, veuillez consulter [Prérequis](#sns-connector-req).
Nom affiché dans la AWS IoT console : ARN de la **rubrique SNS par défaut**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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`  
Schéma valide : `^NoContainer$|^GreengrassContainer$`

------
#### [ Versions 1 - 3 ]

`DefaultSNSArn`  <a name="sns-DefaultSNSArn"></a>
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.  
Le rôle de groupe doit permettre l'autorisation `sns:Publish` à toutes les rubriques cibles. Pour de plus amples informations, veuillez consulter [Prérequis](#sns-connector-req).
Nom affiché dans la AWS IoT console : ARN de la **rubrique SNS par défaut**  
Nécessaire : `true`  
Type : `string`  
Schéma 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)
<a name="sns-connector-create"></a>

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 de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="sns-connector-data-input"></a>

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.

<a name="topic-filter"></a>**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](#sns-connector-data-input-example).  
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`  
Schéma 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.  
Schéma 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.  
Le rôle de groupe doit permettre l'autorisation `sns:Publish` à n'importe quelles rubriques cibles. Pour de plus amples informations, veuillez consulter [Prérequis](#sns-connector-req).
Nécessaire : `false`  
Type : `string`  
Schéma 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`  
Schéma 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**  <a name="sns-connector-data-input-example"></a>
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
<a name="sns-connector-data-output"></a>

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

<a name="topic-filter"></a>**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
<a name="sns-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#sns-connector-req) pour le connecteur.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) ou [Gestion du rôle de groupe Greengrass (interface de ligne de commande)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#sns-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Ajoutez le connecteur et configurez ses [paramètres](#sns-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#sns-connector-data-input) et d'envoyer des [données de sortie](#sns-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="sns-connector-usage-example"></a>

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
<a name="sns-connector-license"></a>

Le connecteur SNS inclut les logiciels/licences tiers suivants :<a name="boto-3-licenses"></a>
+ [AWS SDK pour Python (Boto3)](https://pypi.org/project/boto3/)/Licence Apache 2.0
+ [botocore](https://pypi.org/project/botocore/)/Licence Apache 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/Licence PSF
+ [docutils](https://pypi.org/project/docutils/)/Licence BSD, licence GPL (General Public License) GNU, licence Python Software Foundation, domaine public
+ [jmespath](https://pypi.org/project/jmespath/)/Licence MIT
+ [s3transfer](https://pypi.org/project/s3transfer/)/Licence Apache 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/Licence MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="sns-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>Ajout du paramètre `IsolationMode` pour configurer le mode de conteneurisation du connecteur. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="sns-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [ Publier une action](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns.html#SNS.Client.publish) dans la documentation Boto 3
+ [Qu'est-ce qu'Amazon Simple Notification Service ?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) dans le *Guide du développeur Amazon Simple Notification Service*

# Connecteur d'intégration Splunk
<a name="splunk-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le [connecteur](connectors.md) d'intégration Splunk publie les données des appareils Greengrass sur Splunk. Cela vous permet d'utiliser Splunk pour surveiller et analyser l'environnement Greengrass Core et d'agir sur les événements locaux. Le connecteur s'intègre avec HTTP Event Collector (HEC). Pour plus d'informations, consultez la section [Introduction to HTTP Event Collector](https://dev.splunk.com/view/event-collector/SP-CAAAE6M) dans la documentation Splunk.

Ce connecteur reçoit la journalisation et les données d'événement dans une rubrique MQTT et publie les données en l'état dans l'API Splunk.

Vous pouvez utiliser ce connecteur pour prendre en charge des scénarios professionnels, par exemple :
+ Les opérateurs peuvent utiliser les données périodiques des actionneurs et des capteurs (par exemple, les relevés de température, de pression et d'eau) pour déclencher des alarmes lorsque les valeurs dépassent certains seuils.
+ les développeurs utilisent des données collectées à partir de machines industrielles pour créer des modèles de ML qui peuvent surveiller l'équipement pour les problèmes potentiels.

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#splunk-connector-changelog).

## Prérequis
<a name="splunk-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure. AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-splunk-req-http-event-collector"></a>La fonctionnalité HTTP Event Collector doit être activée dans Splunk. Pour de plus amples informations, veuillez consulter [Set up and use HTTP eEvent Collector in Splunk Web](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector) dans la documentation Splunk.
+ <a name="conn-splunk-req-secret"></a>Secret de type texte dans AWS Secrets Manager lequel est stocké votre jeton Splunk HTTP Event Collector. Pour plus d'informations, consultez [À propos des jetons de collecte d'événements](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector#About_Event_Collector_tokens) dans la documentation Splunk et [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de l'AWS Secrets Manager utilisateur*.
**Note**  
Pour créer le secret dans la console Secrets Manager, entrez votre jeton dans l'onglet **Plaintext**. N'incluez pas de guillemets ni d'autres mises en forme. Dans l'API, spécifiez le jeton comme valeur de la `SecretString` propriété.
+ Une ressource secrète du groupe Greengrass qui fait référence au secret du Secrets Manager. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass Logiciel de base v1.7 ou version ultérieure. AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ <a name="conn-splunk-req-http-event-collector"></a>La fonctionnalité HTTP Event Collector doit être activée dans Splunk. Pour de plus amples informations, veuillez consulter [Set up and use HTTP eEvent Collector in Splunk Web](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector) dans la documentation Splunk.
+ <a name="conn-splunk-req-secret"></a>Secret de type texte dans AWS Secrets Manager lequel est stocké votre jeton Splunk HTTP Event Collector. Pour plus d'informations, consultez [À propos des jetons de collecte d'événements](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector#About_Event_Collector_tokens) dans la documentation Splunk et [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de l'AWS Secrets Manager utilisateur*.
**Note**  
Pour créer le secret dans la console Secrets Manager, entrez votre jeton dans l'onglet **Plaintext**. N'incluez pas de guillemets ni d'autres mises en forme. Dans l'API, spécifiez le jeton comme valeur de la `SecretString` propriété.
+ Une ressource secrète du groupe Greengrass qui fait référence au secret du Secrets Manager. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

------

## Paramètres du connecteur
<a name="splunk-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Version 4 ]

`SplunkEndpoint`  <a name="splunk-SplunkEndpoint"></a>
Point de terminaison de votre instance Splunk. Cette valeur doit contenir le protocole, le nom d'hôte et le port.  
Nom affiché dans la AWS IoT console : point de **terminaison Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$`

`MemorySize`  <a name="splunk-MemorySize"></a>
Quantité de mémoire (en Ko) allouée au connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[0-9]+$`

`SplunkQueueSize`  <a name="splunk-SplunkQueueSize"></a>
Nombre maximal d'éléments à enregistrer dans la mémoire avant que les éléments ne soient envoyés ou supprimés. Lorsque cette limite est atteinte, les éléments les plus anciens de la file d'attente sont remplacés par des éléments plus récents. Cette limite s'applique généralement lorsqu'il n'y a pas de connexion à Internet.  
Nom affiché dans la AWS IoT console : **nombre maximum d'éléments à conserver**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[0-9]+$`

`SplunkFlushIntervalSeconds`  <a name="splunk-SplunkFlushIntervalSeconds"></a>
Intervalle (en secondes) pour publier les données reçues dans Splunk HEC. La valeur maximale est 900. Pour configurer le connecteur afin qu'il publie les éléments au fur et à mesure qu'elles sont reçues (sans traitement par lot), spécifiez 0.  
Nom affiché dans la AWS IoT console : intervalle de **publication Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `[0-9]|[1-9]\d|[1-9]\d\d|900`

`SplunkTokenSecretArn`  <a name="splunk-SplunkTokenSecretArn"></a>
Le secret réside dans AWS Secrets Manager le stockage du jeton Splunk. Il doit s'agir d'un secret de type texte.  
Nom affiché dans la AWS IoT console : **ARN du code secret du jeton d'authentification Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `arn:aws:secretsmanager:[a-z]{2}-[a-z]+-\d{1}:\d{12}?:secret:[a-zA-Z0-9-_]+-[a-zA-Z0-9-_]+`

`SplunkTokenSecretArn-ResourceId`  <a name="splunk-SplunkTokenSecretArn-ResourceId"></a>
La ressource de secret dans le groupe Greengrass qui référence le secret Splunk.  
Nom affiché dans la AWS IoT console : ressource de jeton d'**authentification Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `.+`

`SplunkCustomCALocation`  <a name="splunk-SplunkCustomCALocation"></a>
Chemin d'accès au fichier d'autorité de certification (CA) personnalisée pour Splunk (par exemple, `/etc/ssl/certs/splunk.crt`).  
Nom d'affichage dans la AWS IoT console : emplacement de l'**autorité de certification personnalisée de Splunk**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^$|/.*`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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`  
Schéma valide : `^NoContainer$|^GreengrassContainer$`

------
#### [ Version 1 - 3 ]

`SplunkEndpoint`  <a name="splunk-SplunkEndpoint"></a>
Point de terminaison de votre instance Splunk. Cette valeur doit contenir le protocole, le nom d'hôte et le port.  
Nom affiché dans la AWS IoT console : point de **terminaison Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$`

`MemorySize`  <a name="splunk-MemorySize"></a>
Quantité de mémoire (en Ko) allouée au connecteur.  
Nom affiché dans la AWS IoT console : **Taille de la mémoire**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[0-9]+$`

`SplunkQueueSize`  <a name="splunk-SplunkQueueSize"></a>
Nombre maximal d'éléments à enregistrer dans la mémoire avant que les éléments ne soient envoyés ou supprimés. Lorsque cette limite est atteinte, les éléments les plus anciens de la file d'attente sont remplacés par des éléments plus récents. Cette limite s'applique généralement lorsqu'il n'y a pas de connexion à Internet.  
Nom affiché dans la AWS IoT console : **nombre maximum d'éléments à conserver**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `^[0-9]+$`

`SplunkFlushIntervalSeconds`  <a name="splunk-SplunkFlushIntervalSeconds"></a>
Intervalle (en secondes) pour publier les données reçues dans Splunk HEC. La valeur maximale est 900. Pour configurer le connecteur afin qu'il publie les éléments au fur et à mesure qu'elles sont reçues (sans traitement par lot), spécifiez 0.  
Nom affiché dans la AWS IoT console : intervalle de **publication Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `[0-9]|[1-9]\d|[1-9]\d\d|900`

`SplunkTokenSecretArn`  <a name="splunk-SplunkTokenSecretArn"></a>
Le secret réside dans AWS Secrets Manager le stockage du jeton Splunk. Il doit s'agir d'un secret de type texte.  
Nom affiché dans la AWS IoT console : **ARN du code secret du jeton d'authentification Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `arn:aws:secretsmanager:[a-z]{2}-[a-z]+-\d{1}:\d{12}?:secret:[a-zA-Z0-9-_]+-[a-zA-Z0-9-_]+`

`SplunkTokenSecretArn-ResourceId`  <a name="splunk-SplunkTokenSecretArn-ResourceId"></a>
La ressource de secret dans le groupe Greengrass qui référence le secret Splunk.  
Nom affiché dans la AWS IoT console : ressource de jeton d'**authentification Splunk**  
Nécessaire : `true`  
Type : `string`  
Schéma valide : `.+`

`SplunkCustomCALocation`  <a name="splunk-SplunkCustomCALocation"></a>
Chemin d'accès au fichier d'autorité de certification (CA) personnalisée pour Splunk (par exemple, `/etc/ssl/certs/splunk.crt`).  
Nom d'affichage dans la AWS IoT console : emplacement de l'**autorité de certification personnalisée de Splunk**  
Nécessaire : `false`  
Type : `string`  
Schéma valide : `^$|/.*`

------

### Exemple de création de connecteur (AWS CLI)
<a name="splunk-connector-create"></a>

La commande CLI suivante crée un `ConnectorDefinition` avec une version initiale contenant le connecteur d'intégration Splunk.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MySplunkIntegrationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/4",
            "Parameters": {
                "SplunkEndpoint": "https://myinstance.cloud.splunk.com:8088",
                "MemorySize": 200000,
                "SplunkQueueSize": 10000,
                "SplunkFlushIntervalSeconds": 5,
                "SplunkTokenSecretArn":"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "SplunkTokenSecretArn-ResourceId": "MySplunkResource", 
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

**Note**  
La fonction Lambda de ce connecteur a un cycle de [vie](lambda-functions.md#lambda-lifecycle) prolongé.

Dans la AWS IoT Greengrass console, vous pouvez ajouter un connecteur depuis la page **Connecteurs** du groupe. Pour de plus amples informations, veuillez consulter [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="splunk-connector-data-input"></a>

Ce connecteur accepte les données de journalisation et d'événement sur un sujet MQTT et publie les données reçues telles quelles dans l'API Splunk. Les messages d'entrée doivent être au format JSON.

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`splunk/logs/put`

**Propriétés des messages**    
`request`  
Données d'événements à envoyer à l'API Splunk. Les événements doivent répondre aux spécifications de l'API [services/collector](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector).  
Nécessaire : `true`  
Type :`object`. Seule la propriété `event` est obligatoire.  
`id`  
ID arbitraire de la demande. Cette propriété est utilisée pour mapper une demande d'entrée à un statut de sortie.  
Nécessaire : `false`  
Type : `string`

**Restrictions**  
Toutes les limites imposées par l'API Splunk s'appliquent lorsque ce connecteur est utilisé. Pour plus d'informations, consultez [services/collector](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector).

**Exemple d'entrée**  

```
{
    "request": {
        "event": "some event",
        "fields": {
            "severity": "INFO",
            "category": [
                "value1",
                "value2"
            ]
        }
    },
    "id": "request123"
}
```

## Données de sortie
<a name="splunk-connector-data-output"></a>

Ce connecteur publie des données de sortie dans deux rubriques :
+ Informations de statut dans la rubrique `splunk/logs/put/status`.
+ Erreurs dans la rubrique `splunk/logs/put/error`.

**Filtre de rubriques :** `splunk/logs/put/status`  
Utilisez cette rubrique pour écouter le statut des demandes. Chaque fois que le connecteur envoie un lot de données reçues à l'API Splunk, il publie une liste IDs des demandes réussies et échouées.    
**Exemple de sortie**  

```
{
    "response": {
        "succeeded": [
            "request123",
            ...
        ],
        "failed": [
            "request789",
            ...
        ]
    }
}
```

**Filtre de rubriques :** `splunk/logs/put/error`  
Utilisez cette rubrique pour écouter les erreurs du connecteur. La propriété `error_message` qui décrit l'erreur ou l'expiration rencontrée lors du traitement de la demande.    
**Exemple de sortie**  

```
{
    "response": {
        "error": "UnauthorizedException",
        "error_message": "invalid splunk token",
        "status": "fail"
    }
}
```
Si le connecteur détecte une erreur réessayable (par exemple, des erreurs de connexion), il réessaie de publier dans le lot suivant.

## Exemple d'utilisation
<a name="splunk-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si vous utilisez d'autres environnements d'exécution Python, vous pouvez créer un lien symbolique entre Python3.x et Python 3.7.
Les rubriques [Démarrer avec les connecteurs (console)](connectors-console.md) et [Démarrer avec les connecteurs (CLI)](connectors-cli.md) contiennent des étapes détaillées qui vous montrent comment configurer et déployer un exemple de connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#splunk-connector-req) pour le connecteur.

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#splunk-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass principal pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-secret-resource"></a>Ajoutez la ressource secrète requise et accordez un accès en lecture à la fonction Lambda.

   1. Ajoutez le connecteur et configurez ses [paramètres](#splunk-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#splunk-connector-data-input) et d'envoyer des [données de sortie](#splunk-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>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
<a name="splunk-connector-usage-example"></a>

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 = 'splunk/logs/put'

def create_request_with_all_fields():
    return {
        "request": {
            "event": "Access log test message."
        },
        "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
<a name="splunk-connector-license"></a>

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="splunk-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>Ajout du paramètre `IsolationMode` pour configurer le mode de conteneurisation du connecteur. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="splunk-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)

# Connecteur de notifications Twilio
<a name="twilio-notifications-connector"></a>

**Avertissement**  <a name="connectors-extended-life-phase-warning"></a>
Ce connecteur est passé à la *phase de durée de vie prolongée* et AWS IoT Greengrass ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations aux fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour de plus amples informations, veuillez consulter [AWS IoT Greengrass Version 1 politique de maintenance](maintenance-policy.md).

Le [connecteur](connectors.md) Twilio Notifications effectue des appels téléphoniques automatisés ou envoie des SMS via Twilio. Vous pouvez utiliser ce connecteur pour envoyer des notifications en réponse à des événements dans le groupe Greengrass. Pour les appels téléphoniques, le connecteur peut transmettre un message vocal au destinataire.

Ce connecteur reçoit les informations du message Twilio dans une rubrique MQTT, puis déclenche une notification Twilio.

**Note**  
Pour un didacticiel expliquant comment utiliser le connecteur de notifications Twilio, voir [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md) ou[Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md).

Ce connecteur est disponible dans les versions suivantes.


| Version | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/3` | 
| 2 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/1` | 

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le [Journal des modifications](#twilio-notifications-connector-changelog).

## Prérequis
<a name="twilio-notifications-connector-req"></a>

Ce connecteur possède les critères suivants :

------
#### [ Version 4 - 5 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass Logiciel de base v1.9.3 ou version ultérieure. AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ <a name="conn-req-py-3.7-and-3.8"></a>[Python](https://www.python.org/) version 3.7 ou 3.8 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
**Note**  <a name="use-runtime-py3.8"></a>
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.
+ Un SID de compte Twilio, un jeton d'authentification et un numéro de téléphone Twilio. Une fois que vous avez créé un projet Twilio, ces valeurs sont disponibles sur le tableau de bord du projet.
**Note**  
Vous pouvez utiliser un compte d'essai Twilio. Si vous utilisez un compte d'essai, vous devez ajouter des numéros de téléphone non destinataires de Twilio à une liste de numéros de téléphone vérifiés. Pour plus d'informations, consultez [Comment travailler avec votre compte d'essai gratuit Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).
+ <a name="conn-twilio-req-secret"></a>Un secret de type texte dans AWS Secrets Manager lequel est stocké le jeton d'authentification Twilio. Pour plus d'informations, consultez la section [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de AWS Secrets Manager l'utilisateur*.
**Note**  
Pour créer le secret dans la console Secrets Manager, entrez votre jeton dans l'onglet **Plaintext**. N'incluez pas de guillemets ni d'autres mises en forme. Dans l'API, spécifiez le jeton comme valeur de la `SecretString` propriété.
+ Une ressource secrète du groupe Greengrass qui fait référence au secret du Secrets Manager. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

------
#### [ Versions 1 - 3 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass Logiciel principal v1.7 ou version ultérieure. AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ [Python](https://www.python.org/) version 2.7 installé sur le périphérique principal et ajouté à la variable d'environnement PATH.
+ Un SID de compte Twilio, un jeton d'authentification et un numéro de téléphone Twilio. Une fois que vous avez créé un projet Twilio, ces valeurs sont disponibles sur le tableau de bord du projet.
**Note**  
Vous pouvez utiliser un compte d'essai Twilio. Si vous utilisez un compte d'essai, vous devez ajouter des numéros de téléphone non destinataires de Twilio à une liste de numéros de téléphone vérifiés. Pour plus d'informations, consultez [Comment travailler avec votre compte d'essai gratuit Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).
+ <a name="conn-twilio-req-secret"></a>Un secret de type texte dans AWS Secrets Manager lequel est stocké le jeton d'authentification Twilio. Pour plus d'informations, consultez la section [Création d'un secret de base](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *guide de AWS Secrets Manager l'utilisateur*.
**Note**  
Pour créer le secret dans la console Secrets Manager, entrez votre jeton dans l'onglet **Plaintext**. N'incluez pas de guillemets ni d'autres mises en forme. Dans l'API, spécifiez le jeton comme valeur de la `SecretString` propriété.
+ Une ressource secrète du groupe Greengrass qui fait référence au secret du Secrets Manager. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

------

## Paramètres du connecteur
<a name="twilio-notifications-connector-param"></a>

Ce connecteur fournit les paramètres suivants :

------
#### [ Version 5 ]

`TWILIO_ACCOUNT_SID`  <a name="twilio-TWILIO_ACCOUNT_SID"></a>
Le SID du compte Twilio qui est utilisé pour appeler l'API Twilio.  
Nom affiché dans la AWS IoT console : SID du **compte Twilio**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`TwilioAuthTokenSecretArn`  <a name="twilio-TwilioAuthTokenSecretArn"></a>
L'ARN du secret Secrets Manager qui stocke le jeton d'authentification Twilio.  
Il est utilisé pour accéder à la valeur du secret local sur le noyau.
Nom affiché dans la AWS IoT console : **ARN du code secret du jeton d'authentification Twilio**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`TwilioAuthTokenSecretArn-ResourceId`  <a name="twilio-TwilioAuthTokenSecretArn-ResourceId"></a>
L'ID de la ressource du secret dans le groupe Greengrass qui référence le secret du jeton d'authentification Twilio.  
Nom affiché dans la AWS IoT console : ressource de jeton d'**authentification Twilio**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`DefaultFromPhoneNumber`  <a name="twilio-DefaultFromPhoneNumber"></a>
Le numéro de téléphone activé par Twilio que Twilio utilise pour envoyer des messages. Twilio utilise ce numéro pour initier le texte ou l'appel.  
+ Si vous ne configurez pas un numéro de téléphone par défaut, vous devez spécifier un numéro de téléphone dans la propriété `from_number` dans le corps du message d'entrée.
+ Si vous configurez un numéro de téléphone par défaut, vous pouvez, si vous le souhaitez, remplacer le numéro par défaut en spécifiant la propriété `from_number` dans le corps du message d'entrée.
Nom d'affichage dans la AWS IoT console : **par défaut, il s'agit du numéro de téléphone**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^$|\+[0-9]+`

`IsolationMode`  <a name="IsolationMode"></a>
Mode [conteneurisation](connectors.md#connector-containerization) 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 AWS IoT Greengrass conteneur.  
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$`

------
#### [ Version 1 - 4 ]

`TWILIO_ACCOUNT_SID`  <a name="twilio-TWILIO_ACCOUNT_SID"></a>
Le SID du compte Twilio qui est utilisé pour appeler l'API Twilio.  
Nom affiché dans la AWS IoT console : SID du **compte Twilio**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`TwilioAuthTokenSecretArn`  <a name="twilio-TwilioAuthTokenSecretArn"></a>
L'ARN du secret Secrets Manager qui stocke le jeton d'authentification Twilio.  
Il est utilisé pour accéder à la valeur du secret local sur le noyau.
Nom affiché dans la AWS IoT console : **ARN du code secret du jeton d'authentification Twilio**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`TwilioAuthTokenSecretArn-ResourceId`  <a name="twilio-TwilioAuthTokenSecretArn-ResourceId"></a>
L'ID de la ressource du secret dans le groupe Greengrass qui référence le secret du jeton d'authentification Twilio.  
Nom affiché dans la AWS IoT console : ressource de jeton d'**authentification Twilio**  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`

`DefaultFromPhoneNumber`  <a name="twilio-DefaultFromPhoneNumber"></a>
Le numéro de téléphone activé par Twilio que Twilio utilise pour envoyer des messages. Twilio utilise ce numéro pour initier le texte ou l'appel.  
+ Si vous ne configurez pas un numéro de téléphone par défaut, vous devez spécifier un numéro de téléphone dans la propriété `from_number` dans le corps du message d'entrée.
+ Si vous configurez un numéro de téléphone par défaut, vous pouvez, si vous le souhaitez, remplacer le numéro par défaut en spécifiant la propriété `from_number` dans le corps du message d'entrée.
Nom d'affichage dans la AWS IoT console : **par défaut, il s'agit du numéro de téléphone**  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `^$|\+[0-9]+`

------

### Exemple de création de connecteur (AWS CLI)
<a name="twilio-notifications-connector-create"></a>

L'exemple de commande CLI suivant crée un `ConnectorDefinition` avec une version initiale qui contient le connecteur Twilio Notifications.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyTwilioNotificationsConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/5",
            "Parameters": {
                "TWILIO_ACCOUNT_SID": "abcd12345xyz",
                "TwilioAuthTokenSecretArn": "arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "TwilioAuthTokenSecretArn-ResourceId": "MyTwilioSecret",
                "DefaultFromPhoneNumber": "+19999999999",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

Pour des didacticiels expliquant comment ajouter le connecteur Twilio Notifications à un groupe, consultez [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md) et[Mise en route avec les connecteurs Greengrass (console)](connectors-console.md).

## Données d'entrée
<a name="twilio-notifications-connector-data-input"></a>

Ce connecteur accepte les informations des messages Twilio sur deux sujets MQTT. Les messages d'entrée doivent être au format JSON.
+ Informations des SMS dans la rubrique `twilio/txt`.
+ Informations des messages vocaux dans la rubrique `twilio/call`.

**Note**  
La charge utile d'un message entrant peut inclure un SMS (`message`) ou un message vocal (`voice_message_location`), mais pas les deux.

**Filtre des rubriques : `twilio/txt`**    
**Propriétés des messages**    
`request`  
Informations sur la notification Twilio.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`recipient`  
Destinataire du message. Un seul destinataire est pris en charge.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`name`  
le nom du destinataire.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.*`  
`phone_number`  
le numéro de téléphone du destinataire.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `\+[1-9]+`  
`message`  
le contenu du message du SMS. Seuls les SMS sont pris en charge dans cette rubrique. Pour les messages vocaux, utilisez `twilio/call`.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`  
`from_number`  
Le numéro de téléphone de l'expéditeur. Twilio utilise ce numéro pour initier le message. Cette propriété est obligatoire si le paramètre `DefaultFromPhoneNumber` n'est pas configuré. Si `DefaultFromPhoneNumber` est configuré, vous pouvez utiliser cette propriété pour remplacer le numéro par défaut.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `\+[1-9]+`  
`retries`  
Nombre de nouvelles tentatives. La valeur par défaut est 0.  
Nécessaire : `false`  
Type : `integer`  
`id`  
ID arbitraire de la demande. Cette propriété est utilisée pour mapper une demande d'entrée à une réponse de sortie.   
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`  
**Exemple d'entrée**  

```
{
    "request": {
        "recipient": {
            "name": "Darla",
            "phone_number": "+12345000000",
            "message": "Hello from the edge"
        },
        "from_number": "+19999999999",
        "retries": 3
    },
    "id": "request123"
}
```

**Filtre des rubriques : `twilio/call`**    
**Propriétés des messages**    
`request`  
Informations sur la notification Twilio.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`recipient`  
Destinataire du message. Un seul destinataire est pris en charge.  
Nécessaire : `true`  
Type : `object` qui inclut les propriétés suivantes :    
`name`  
le nom du destinataire.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`  
`phone_number`  
le numéro de téléphone du destinataire.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `\+[1-9]+`  
`voice_message_location`  
URL du contenu audio du message vocal. Elle doit être en format TwiML. Seuls les messages vocaux sont pris en charge dans cette rubrique. Pour les SMS, utilisez `twilio/txt`.  
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`  
`from_number`  
Le numéro de téléphone de l'expéditeur. Twilio utilise ce numéro pour initier le message. Cette propriété est obligatoire si le paramètre `DefaultFromPhoneNumber` n'est pas configuré. Si `DefaultFromPhoneNumber` est configuré, vous pouvez utiliser cette propriété pour remplacer le numéro par défaut.  
Nécessaire : `false`  
Type : `string`  
Modèle valide : `\+[1-9]+`  
`retries`  
Nombre de nouvelles tentatives. La valeur par défaut est 0.  
Nécessaire : `false`  
Type : `integer`  
`id`  
ID arbitraire de la demande. Cette propriété est utilisée pour mapper une demande d'entrée à une réponse de sortie.   
Nécessaire : `true`  
Type : `string`  
Modèle valide : `.+`  
**Exemple d'entrée**  

```
{
    "request": {
        "recipient": {
            "name": "Darla",
            "phone_number": "+12345000000",
            "voice_message_location": "https://some-public-TwiML"
        },
        "from_number": "+19999999999",
        "retries": 3
    },
    "id": "request123"
}
```

## Données de sortie
<a name="twilio-notifications-connector-data-output"></a>

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

<a name="topic-filter"></a>**Filtre de rubrique dans l'abonnement**  
`twilio/message/status`

**Exemple de sortie : réussite**  

```
{
    "response": {
        "status": "success",
        "payload": {
            "from_number": "+19999999999",
            "messages": {
                "message_status": "queued",
                "to_number": "+12345000000",
                "name": "Darla"
            }
        }
    },
    "id": "request123"
}
```

**Exemple de sortie : échec**  

```
{
    "response": {
        "status": "fail",
        "error_message": "Recipient name cannot be None",
        "error": "InvalidParameter",
        "payload": None
        }
    },
    "id": "request123"
}
```
La propriété `payload` dans la sortie est la réponse de l'API Twilio lorsque le message est envoyé. Si le connecteur détecte que les données d'entrée ne sont pas valides (par exemple, elles ne spécifient pas un champ d'entrée obligatoire), le connecteur renvoie une erreur et définit la valeur sur `None`. Voici quelques exemples de charges utiles :  

```
{
    'from_number':'+19999999999',
    'messages': {
        'name':'Darla',
        'to_number':'+12345000000',
        'message_status':'undelivered'
    }
}
```

```
{
    'from_number':'+19999999999',
    'messages': {
        'name':'Darla',
        'to_number':'+12345000000',
        'message_status':'queued'
    }
}
```

## Exemple d'utilisation
<a name="twilio-notifications-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Les [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md) rubriques [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md) et contiennent des end-to-end étapes qui montrent comment configurer, déployer et tester le connecteur Twilio Notifications.

1. Veillez à répondre aux [conditions requises](#twilio-notifications-connector-req) pour le connecteur.

1. <a name="connectors-setup-function"></a>Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

   Enregistrez l'[exemple de code](#twilio-notifications-connector-usage-example) en tant que fichier PY. <a name="connectors-setup-function-sdk"></a>Téléchargez et décompressez le [SDK AWS IoT Greengrass de base pour Python](lambda-functions.md#lambda-sdks-core). 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échargement AWS Lambda.

   <a name="connectors-setup-function-publish"></a>Après avoir créé la fonction Lambda de Python 3.7, publiez une version de la fonction et créez un alias.

1. Configurez votre groupe Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-secret-resource"></a>Ajoutez la ressource secrète requise et accordez un accès en lecture à la fonction Lambda.

   1. Ajoutez le connecteur et configurez ses [paramètres](#twilio-notifications-connector-param).

   1. Ajoutez des abonnements qui permettent au connecteur de recevoir des [données d'entrée](#twilio-notifications-connector-data-input) et d'envoyer des [données de sortie](#twilio-notifications-connector-data-output) sur des filtres de rubrique pris en charge.
      + <a name="connectors-setup-subscription-input-data"></a>Définissez la fonction Lambda comme source, le connecteur comme cible et utilisez un filtre de rubrique d'entrée compatible.
      + <a name="connectors-setup-subscription-output-data"></a>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.

1. <a name="connectors-setup-deploy-group"></a>Déployez le groupe.

1. <a name="connectors-setup-test-sub"></a>Dans la AWS IoT console, sur la page **Test**, abonnez-vous à la rubrique relative aux données de sortie pour consulter les messages d'état provenant 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
<a name="twilio-notifications-connector-usage-example"></a>

L'exemple suivant de fonction Lambda envoie un message d'entrée au connecteur. Cet exemple déclenche l'envoi d'un SMS.

```
import greengrasssdk
import json

iot_client = greengrasssdk.client('iot-data')
TXT_INPUT_TOPIC = 'twilio/txt'
CALL_INPUT_TOPIC = 'twilio/call'

def publish_basic_message():

    txt = {
        "request": {
            "recipient" : {
                "name": "Darla",
                "phone_number": "+12345000000",
                "message": 'Hello from the edge'
            },
            "from_number" : "+19999999999"
        },
        "id" : "request123"
    }
    
    print("Message To Publish: ", txt)

    client.publish(topic=TXT_INPUT_TOPIC,
                   payload=json.dumps(txt))

publish_basic_message()

def lambda_handler(event, context):
    return
```

## Licences
<a name="twilio-notifications-connector-license"></a>

Le connecteur Twilio Notifications inclut les logiciels/licences tiers suivants :
+ [twilio de python](https://github.com/twilio/twilio-python)/MIT

Ce connecteur est publié dans le cadre du contrat de [licence logicielle Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Journal des modifications
<a name="twilio-notifications-connector-changelog"></a>

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


| Version | Modifications | 
| --- | --- | 
| 5 | <a name="isolation-mode-changelog"></a>Ajout du paramètre `IsolationMode` pour configurer le mode de conteneurisation du connecteur. | 
| 4 | <a name="upgrade-runtime-py3.7"></a>Mise à niveau de l'environnement d'exécution Lambda vers Python 3.7, ce qui modifie les exigences d'exécution. | 
| 3 | Correctif pour réduire la journalisation excessive. | 
| 2 | Correctifs de bogues mineurs et améliorations. | 
| 1 | Première version.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Consultez aussi
<a name="twilio-notifications-connector-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [Démarrage avec les connecteurs Greengrass (CLI)](connectors-cli.md)
+ [Twilio API Reference](https://www.twilio.com/docs/api)

# Mise en route avec les connecteurs Greengrass (console)
<a name="connectors-console"></a>

Cette fonctionnalité est disponible pour AWS IoT Greengrass Core v1.7 et versions ultérieures.

Ce didacticiel montre comment utiliser le AWS Management Console pour travailler avec des connecteurs.

Utilisez des connecteurs pour accélérer votre cycle de développement. Les connecteurs sont des modules réutilisables prédéfinis qui contribuent à interagir avec les services, les protocoles et les ressources. Ils peuvent vous aider à déployer plus rapidement une logique métier pour les appareils Greengrass. Pour de plus amples informations, veuillez consulter [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md).

Dans ce didacticiel, vous allez configurer et déployer le connecteur [Twilio Notifications](twilio-notifications-connector.md). Le connecteur reçoit des informations du message Twilio en tant que données d'entrée, puis déclenche un SMS Twilio. Le flux de données est illustré dans le diagramme suivant.

![\[Flux de données entre la fonction Lambda et le connecteur Twilio Notifications vers Twilio.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/connectors/twilio-solution.png)


Après avoir configuré le connecteur, vous créez une fonction Lambda et un abonnement.
+ La fonction évalue les données simulées à partir d'un capteur de température. Elle publie les informations du message Twilio sous certaines conditions dans une rubrique MQTT. Il s'agit de la rubrique à laquelle le connecteur est abonné.
+ L'abonnement autorise la fonction à publier dans la rubrique et le connecteur à recevoir des données provenant de la rubrique.

Le connecteur Twilio Notifications nécessite un jeton d'authentification Twilio pour interagir avec l'API Twilio. Le jeton est un secret de type texte créé AWS Secrets Manager et référencé à partir d'une ressource de groupe. Cela permet AWS IoT Greengrass de créer une copie locale du secret sur le cœur de Greengrass, où il est crypté et mis à la disposition du connecteur. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

Le didacticiel contient les étapes détaillées suivantes :

1. [Création d'un secret dans le Gestionnaire de Secrets](#connectors-console-create-secret)

1. [Ajouter une ressource de secret à un groupe](#connectors-console-create-resource)

1. [Ajouter un connecteur au groupe](#connectors-console-create-connector)

1. [Création d'un package de déploiement de fonctions Lambda](#connectors-console-create-deployment-package)

1. [Création d’une fonction Lambda ](#connectors-console-create-function)

1. [Ajouter une fonction au groupe](#connectors-console-create-gg-function)

1. [Ajouter des abonnements au groupe](#connectors-console-create-subscription)

1. [Déployer le groupe](#connectors-console-create-deployment)

1. [Tester la solution](#connectors-console-test-solution)

Le didacticiel devrait prendre environ 20 minutes.

## Conditions préalables
<a name="connectors-console-prerequisites"></a>

Pour suivre ce didacticiel, vous devez disposer des éléments suivants :
+ Un groupe Greengrass et un appareil principal (noyau) Greengrass (version 1.9.3 ou ultérieure). Pour savoir comment créer un groupe et un service principal Greengrass, consultez [Commencer avec AWS IoT Greengrass](gg-gs.md). Le didacticiel Mise en route comprend également les étapes d'installation du logiciel AWS IoT Greengrass Core.
+ Python 3.7 installé sur le périphérique AWS IoT Greengrass principal.
+  AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ Un SID de compte Twilio, un jeton d'authentification et un numéro de téléphone Twilio. Une fois que vous avez créé un projet Twilio, ces valeurs sont disponibles sur le tableau de bord du projet.
**Note**  
Vous pouvez utiliser un compte d'essai Twilio. Si vous utilisez un compte d'essai, vous devez ajouter des numéros de téléphone non destinataires de Twilio à une liste de numéros de téléphone vérifiés. Pour plus d'informations, consultez [Comment travailler avec votre compte d'essai gratuit Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).

## Étape 1 : Création d'un secret du Gestionnaire de Secrets
<a name="connectors-console-create-secret"></a>

Dans cette étape, vous allez utiliser la AWS Secrets Manager console pour créer un secret de type texte pour votre jeton d'authentification Twilio.

1. <a name="create-secret-step-signin"></a>Connectez-vous à la [console AWS Secrets Manager](https://console.aws.amazon.com/secretsmanager/).
**Note**  
Pour plus d'informations sur ce processus, voir [Étape 1 : Création et stockage de votre secret AWS Secrets Manager dans](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html) le *guide de AWS Secrets Manager l'utilisateur*.

1. <a name="create-secret-step-create"></a>Choisissez **Store a new secret** (Stocker un nouveau secret).

1. <a name="create-secret-step-othertype"></a>Sous **Choisir le type de secret**, choisissez **Autre type de secret**.

1. Sous **Spécifier les key/value paires à stocker pour ce secret**, dans l'onglet **Texte en clair**, entrez votre jeton d'authentification Twilio. Supprimez tout le formatage JSON et entrez uniquement la valeur du jeton.

1. <a name="create-secret-step-encryption"></a>**Gardez **aws/secretsmanager** sélectionné pour la clé de chiffrement, puis choisissez Next.**
**Note**  
Vous n'êtes pas débité AWS KMS si vous utilisez la clé AWS gérée par défaut créée par Secrets Manager dans votre compte.

1. Pour **Secret name**, entrez **greengrass-TwilioAuthToken** et choisissez **Next**.
**Note**  
Par défaut, le rôle de service Greengrass permet d' AWS IoT Greengrass obtenir la valeur des secrets dont le nom commence par *greengrass* -. Pour plus d'informations, consultez les [exigences liées aux secrets](secrets.md#secrets-reqs).

1. <a name="create-secret-step-rotation"></a>Ce didacticiel ne nécessite pas de rotation. Choisissez donc désactiver la rotation automatique, puis cliquez sur **Suivant**.

1. <a name="create-secret-step-review"></a>Dans la page **Révision**, passez en revue vos paramètres, puis choisissez **Stocker**.

   Ensuite, vous créez une ressource de secret dans votre groupe Greengrass qui référence le secret.

## Étape 2 : Ajouter une ressource de secret à un groupe Greengrass
<a name="connectors-console-create-resource"></a>

Au cours de cette étape, vous ajoutez une *ressource de secret* au groupe Greengrass. Cette ressource est une référence au secret que vous avez créé à l'étape précédente.

1. <a name="console-gg-groups"></a>Dans le volet de navigation de la AWS IoT console, sous **Gérer**, développez les **appareils Greengrass**, puis choisissez **Groups (V1)**.

1. <a name="create-secret-resource-step-choosegroup"></a>Choisissez le groupe auquel vous souhaitez ajouter la ressource de secret.

1. <a name="create-secret-resource-step-secretstab"></a>Sur la page de configuration du groupe, choisissez l'onglet **Ressources**, puis faites défiler la page jusqu'à la section **Secrets**. La section **Secrets** affiche les ressources secrètes appartenant au groupe. Vous pouvez ajouter, modifier et supprimer des ressources secrètes dans cette section.
**Note**  
La console vous permet également de créer une ressource secrète et secrète lorsque vous configurez un connecteur ou une fonction Lambda. Vous pouvez le faire depuis la page **Configurer les paramètres** du connecteur ou depuis la page **Ressources** de la fonction Lambda.

1. <a name="create-secret-resource-step-addsecretresource"></a>Choisissez **Ajouter** dans la section **Secrets**.

1. Sur la page **Ajouter une ressource secrète**, entrez le **nom **MyTwilioAuthToken** de la ressource**.

1. Pour le **Secret**, choisissez **Greengrass- TwilioAuthToken**.

1. <a name="create-secret-resource-step-selectlabels"></a>Dans la section **Sélectionner les étiquettes (facultatif)**, AWSCURRENT l'étiquette intermédiaire représente la dernière version du secret. Cette étiquette est toujours incluse dans une ressource de secret.
**Note**  
Ce didacticiel ne nécessite que l' AWSCURRENT étiquette. Vous pouvez éventuellement inclure des étiquettes requises par votre fonction ou connecteur Lambda.

1. Choisissez **Add resource (Ajouter ressource)**.

## Étape 3 : Ajouter un connecteur au groupe Greengrass
<a name="connectors-console-create-connector"></a>

Au cours de cette étape, vous configurez les paramètres du [connecteur Twilio Notifications](twilio-notifications-connector.md) et vous l'ajoutez au groupe.

1. Sur la page de configuration de groupe, choisissez **Connecteurs**, puis choisissez **Ajouter un connecteur**.

1. Sur la page **Ajouter un connecteur**, choisissez **Twilio Notifications**.

1. Choisissez la version .

1. Dans la section **Configuration** :
   + Pour la **ressource de jeton d'authentification Twilio**, entrez la ressource que vous avez créée à l'étape précédente.
**Note**  
Lorsque vous entrez dans la ressource, l'**ARN de la propriété secrète du jeton d'authentification Twilio** est renseigné pour vous.
   + Pour **Par défaut à partir de numéro de téléphone**, saisissez votre numéro de téléphone activé Twilio.
   + Pour le **SID du compte Twilio**, saisissez le SID de votre compte Twilio.

1. Choisissez **Add resource (Ajouter ressource)**.

## Étape 4 : Création d'un package de déploiement de fonctions Lambda
<a name="connectors-console-create-deployment-package"></a>

Pour créer une fonction Lambda, vous devez d'abord créer un *package de déploiement* de fonction Lambda contenant le code de la fonction et les dépendances. Les fonctions Lambda de Greengrass nécessitent le [SDK AWS IoT Greengrass principal](lambda-functions.md#lambda-sdks-core) pour des tâches telles que la communication avec les messages MQTT dans l'environnement principal et l'accès aux secrets locaux. Ce didacticiel crée une fonction Python afin que vous utilisiez la version Python du SDK dans le package de déploiement.

1. <a name="download-ggc-sdk"></a> Sur la page de téléchargement du [SDK AWS IoT Greengrass Core](what-is-gg.md#gg-core-sdk-download), téléchargez le SDK AWS IoT Greengrass Core pour Python sur votre ordinateur.

1. <a name="unzip-ggc-sdk"></a>Décompressez le package téléchargé pour obtenir le kit SDK. Le kit SDK est représenté par le dossier `greengrasssdk`.

1. Enregistrez la fonction de code Python suivante dans un fichier local nommé `temp_monitor.py`.

   ```
   import greengrasssdk
   import json
   import random
   
   client = greengrasssdk.client('iot-data')
   
   # publish to the Twilio Notifications connector through the twilio/txt topic
   def function_handler(event, context):
       temp = event['temperature']
       
       # check the temperature
       # if greater than 30C, send a notification
       if temp > 30:
           data = build_request(event)
           client.publish(topic='twilio/txt', payload=json.dumps(data))
           print('published:' + str(data))
           
       print('temperature:' + str(temp))
       return
   
   # build the Twilio request from the input data
   def build_request(event):
       to_name = event['to_name']
       to_number = event['to_number']
       temp_report = 'temperature:' + str(event['temperature'])
   
       return {
           "request": {
               "recipient": {
                   "name": to_name,
                   "phone_number": to_number,
                   "message": temp_report
               }
           },
           "id": "request_" + str(random.randint(1,101))
       }
   ```

1. Compressez les éléments suivants dans un fichier nommé `temp_monitor_python.zip`. Lorsque vous créez le fichier zip, insérez uniquement le code et ses dépendances, pas le dossier dans lequel il se trouve.
   + **temp\$1monitor.py**. Logique d'application.
   + **greengrasssdk**. Bibliothèque requise pour les fonctions Python Greengrass Lambda qui publient des messages MQTT.

   Il s'agit de votre package de déploiement de fonctions Lambda.

Créez à présent une fonction Lambda qui utilise le package de déploiement.

## Étape 5 : Création d'une fonction Lambda dans la console AWS Lambda
<a name="connectors-console-create-function"></a>

Au cours de cette étape, vous allez utiliser la AWS Lambda console pour créer une fonction Lambda et la configurer pour utiliser votre package de déploiement. Vous publiez ensuite une version de fonction et créez un alias.

1. Créez d'abord la fonction Lambda.

   1. <a name="lambda-console-open"></a>Dans le AWS Management Console, choisissez **Services**, puis ouvrez la AWS Lambda console.

   1. <a name="lambda-console-create-function"></a>Choisissez **Créer une fonction**, puis sélectionnez **Auteur à partir de zéro**.

   1. Dans la section **Informations de base**, spécifiez les valeurs suivantes :
      + Sous **Nom de la fonction**, saisissez **TempMonitor**.
      + Pour **Runtime**, sélectionnez **Python 3.7**.
      + Pour **les autorisations**, conservez le paramètre par défaut. Cela crée un rôle d'exécution qui accorde des autorisations Lambda de base. Ce rôle n'est pas utilisé par AWS IoT Greengrass.

   1. <a name="lambda-console-save-function"></a>Dans le bas de la page, choisissez **Create function**.

1. Enregistrez ensuite le gestionnaire et téléchargez le package de déploiement de votre fonction Lambda.

   1. <a name="lambda-console-upload"></a>Dans l'onglet **Code**, sous **Source du code**, choisissez **Télécharger depuis**. Dans le menu déroulant, sélectionnez le **fichier .zip.**  
![\[La liste déroulante Upload from avec le fichier .zip surligné.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Choisissez **Upload**, puis choisissez votre package `temp_monitor_python.zip` de déploiement. Ensuite, choisissez **Enregistrer**.

   1. <a name="lambda-console-runtime-settings-para"></a>Dans l'onglet **Code** de la fonction, sous **Paramètres d'exécution**, choisissez **Modifier**, puis entrez les valeurs suivantes.
      + Pour **Runtime**, sélectionnez **Python 3.7**.
      + Pour **Handler (Gestionnaire)**, entrez **temp\$1monitor.function\$1handler**.

   1. <a name="lambda-console-save-config"></a>Choisissez **Enregistrer**.
**Note**  
Le bouton **Test** de la AWS Lambda console ne fonctionne pas avec cette fonction. Le SDK AWS IoT Greengrass principal ne contient pas les modules nécessaires pour exécuter vos fonctions Greengrass Lambda de manière indépendante dans la console. AWS Lambda Ces modules (par exemple`greengrass_common`) sont fournis aux fonctions après leur déploiement sur votre noyau Greengrass.

1. À présent, publiez la première version de votre fonction Lambda et créez un [alias pour](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html) cette version.
**Note**  
Les groupes Greengrass peuvent référencer une fonction Lambda par alias (recommandé) ou par version. L'utilisation d'un alias facilite la gestion des mises à jour du code, car vous n'avez pas à modifier votre table d'abonnement ou la définition de groupe lorsque le code de fonction est mis à jour. Au lieu de cela, il vous suffit de pointer l'alias vers la nouvelle version de la fonction.

   1. <a name="shared-publish-function-version"></a>Dans le menu **Actions**, sélectionnez **Publier une nouvelle version**.

   1. <a name="shared-publish-function-version-description"></a>Dans **Description de la version**, saisissez **First version**, puis choisissez **Publish**.

   1. Sur la page de configuration **TempMonitor: 1**, dans le menu **Actions**, choisissez **Créer un alias**.

   1. Sur la page **Create a new alias**, utilisez les valeurs suivantes :
      + Pour **Nom**, saisissez **GG\$1TempMonitor**.
      + Pour **Version**, choisissez **1**.
**Note**  
AWS IoT Greengrass **ne prend pas en charge les alias Lambda pour les versions \$1LATEST.**

   1. Choisissez **Créer**.

Vous êtes maintenant prêt à ajouter la fonction Lambda à votre groupe Greengrass.

## Étape 6 : Ajouter une fonction Lambda au groupe Greengrass
<a name="connectors-console-create-gg-function"></a>

Au cours de cette étape, vous ajoutez la fonction Lambda au groupe, puis vous configurez son cycle de vie et ses variables d'environnement. Pour de plus amples informations, veuillez consulter [Contrôle de l'exécution des fonctions Greengrass Lambda à l'aide d'une configuration spécifique au groupe](lambda-group-config.md).

1. <a name="choose-add-lambda"></a>Sur la page de configuration du groupe, choisissez l'onglet **Fonctions Lambda**.

1. **Sous **Mes fonctions Lambda**, choisissez Ajouter.**

1. Sur la page **Ajouter une fonction Lambda**, choisissez votre **TempMonitor**fonction Lambda.

1. Pour la **version de la fonction Lambda**, choisissez **Alias : GG\$1**. TempMonitor

1. Choisissez **Ajouter une fonction Lambda**.

## Étape 7 : Ajouter des abonnements au groupe Greengrass
<a name="connectors-console-create-subscription"></a>

<a name="connectors-how-to-add-subscriptions-p1"></a>Au cours de cette étape, vous ajoutez un abonnement qui permet à la fonction Lambda d'envoyer des données d'entrée au connecteur. Le connecteur définit les rubriques MQTT auxquelles il est abonné, de sorte que cet abonnement utilise l'une des rubriques. Il s'agit de la même rubrique dans laquelle l'exemple de fonction effectue la publication.

<a name="connectors-how-to-add-subscriptions-p2"></a>Dans le cadre de ce didacticiel, vous créez également des abonnements qui permettent à la fonction de recevoir des relevés de température simulés AWS IoT et des informations d'état provenant du connecteur. AWS IoT 

1. <a name="shared-subscriptions-addsubscription"></a>Sur la page de configuration du groupe, choisissez l'onglet **Abonnements**, puis choisissez **Ajouter un abonnement**.

1. Sur la page **Créer un abonnement**, configurez la source et la cible comme suit :

   1. Pour **Type de source**, choisissez **Fonction Lambda**, puis choisissez. **TempMonitor**

   1. Pour le **type de cible**, choisissez **Connector**, puis **Twilio Notifications**.

1. Pour le **filtre de sujet**, choisissez**twilio/txt**.

1. Choisissez **Créer un abonnement**.

1. Répétez les étapes 1 à 4 pour créer un abonnement permettant AWS IoT de publier des messages sur la fonction.

   1. Pour **Type de source**, choisissez **Service**, puis **IoT Cloud**.

   1. Pour **Sélectionner une cible**, choisissez la **fonction Lambda**, puis choisissez. **TempMonitor**

   1. Pour **Filtre de rubrique**, tapez **temperature/input**.

1. Répétez les étapes 1 à 4 pour créer un abonnement qui permet au connecteur de publier des messages dans AWS IoT.

   1. Pour **Type de source**, choisissez **Connector**, puis **Twilio Notifications**.

   1. Pour **Type de cible**, choisissez **Service**, puis **IoT Cloud**.

   1. Pour **Topic filter**, **twilio/message/status** est entré pour vous. Il s'agit de la rubrique prédéfinie dans laquelle le connecteur effectue la publication.

## Étape 8 : Déployer le groupe Greengrass
<a name="connectors-console-create-deployment"></a>

Déployer le groupe sur l'appareil principal (noyau)

1. <a name="shared-deploy-group-checkggc"></a>Assurez-vous que le AWS IoT Greengrass noyau fonctionne. Dans la fenêtre de terminal de votre Raspberry Pi, exécutez les commandes suivantes, si nécessaire.

   1. Pour vérifier si le démon est en cours d'exécution :

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Si la sortie contient une entrée `root` pour `/greengrass/ggc/packages/ggc-version/bin/daemon`, le démon est en cours d'exécution.
**Note**  
La version indiquée dans le chemin dépend de la version du logiciel AWS IoT Greengrass Core installée sur votre appareil principal.

   1. Pour démarrer le daemon, procédez comme suit :

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="shared-deploy-group-deploy"></a>Sur la page de configuration du groupe, choisissez **Deploy**.

1. <a name="shared-deploy-group-ipconfig"></a>

   1. **Dans l'onglet **Fonctions Lambda**, sous la section **Fonctions Lambda** du système, sélectionnez **Détecteur IP** et choisissez Modifier.**

   1. Dans la boîte de dialogue **Modifier les paramètres du détecteur IP**, sélectionnez **Détecter et remplacer automatiquement les points de terminaison du broker MQTT**.

   1. Choisissez **Enregistrer**.

      Les appareils peuvent ainsi acquérir automatiquement des informations de connectivité pour le noyau, telles que l'adresse IP, le DNS et le numéro de port. La détection automatique est recommandée, mais elle prend AWS IoT Greengrass également en charge les points de terminaison spécifiés manuellement. Vous êtes uniquement invité à indiquer la méthode de découverte lors du déploiement initial du groupe.
**Note**  
Si vous y êtes invité, autorisez la création du rôle de [service Greengrass et associez-le à votre rôle](service-role.md) Compte AWS dans le service actuel. Région AWS Ce rôle permet d'accéder AWS IoT Greengrass à vos ressources dans les AWS services.

      La page **Déploiements** indique l'horodatage, l'ID de version et l'état du déploiement. Une fois terminé, le statut affiché pour le déploiement doit être **Terminé**.

      Pour bénéficier d'une aide à la résolution des problèmes, consultez [Résolution des problèmes AWS IoT Greengrass](gg-troubleshooting.md).

**Note**  
<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Tester la solution
<a name="connectors-console-test-solution"></a>

1. <a name="choose-test-page"></a>Sur la page d'accueil de la AWS IoT console, choisissez **Test**.

1. Pour **S'abonner à la rubrique**, utilisez les valeurs suivantes, puis choisissez **S'abonner**. Le connecteur Twilio Notifications publie des informations d'état dans cette rubrique.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-console.html)

1. Pour **Publier dans le sujet**, utilisez les valeurs suivantes, puis choisissez **Publier** pour appeler la fonction.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-console.html)

   En cas de réussite, le destinataire reçoit le SMS et la console affiche le statut `success` depuis les [données de sortie](twilio-notifications-connector.md#twilio-notifications-connector-data-output).

   Maintenant, passez la `temperature` dans le message d'entrée à **29** et publiez. Comme ce chiffre est inférieur à 30, la TempMonitor fonction ne déclenche pas de message Twilio.

## Consultez aussi
<a name="connectors-console-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+  [AWS- connecteurs Greengrass fournis](connectors-list.md)

# Démarrage avec les connecteurs Greengrass (CLI)
<a name="connectors-cli"></a>

Cette fonctionnalité est disponible pour AWS IoT Greengrass Core v1.7 et versions ultérieures.

Ce didacticiel montre comment utiliser le AWS CLI pour travailler avec des connecteurs.

Utilisez des connecteurs pour accélérer votre cycle de développement. Les connecteurs sont des modules réutilisables prédéfinis qui contribuent à interagir avec les services, les protocoles et les ressources. Ils peuvent vous aider à déployer plus rapidement une logique métier pour les appareils Greengrass. Pour de plus amples informations, veuillez consulter [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md).

Dans ce didacticiel, vous allez configurer et déployer le connecteur [Twilio Notifications](twilio-notifications-connector.md). Le connecteur reçoit des informations du message Twilio en tant que données d'entrée, puis déclenche un SMS Twilio. Le flux de données est illustré dans le diagramme suivant.

![\[Flux de données entre la fonction Lambda et le connecteur Twilio Notifications vers Twilio.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/connectors/twilio-solution.png)


Après avoir configuré le connecteur, vous créez une fonction Lambda et un abonnement.
+ La fonction évalue les données simulées à partir d'un capteur de température. Elle publie les informations du message Twilio sous certaines conditions dans une rubrique MQTT. Il s'agit de la rubrique à laquelle le connecteur est abonné.
+ L'abonnement autorise la fonction à publier dans la rubrique et le connecteur à recevoir des données provenant de la rubrique.

Le connecteur Twilio Notifications nécessite un jeton d'authentification Twilio pour interagir avec l'API Twilio. Le jeton est un secret de type texte créé AWS Secrets Manager et référencé à partir d'une ressource de groupe. Cela permet AWS IoT Greengrass de créer une copie locale du secret sur le cœur de Greengrass, où il est crypté et mis à la disposition du connecteur. Pour de plus amples informations, veuillez consulter [Déployez les secrets jusqu'au AWS IoT Greengrass cœur](secrets.md).

Le didacticiel contient les étapes détaillées suivantes :

1. [Création d'un secret dans le Gestionnaire de Secrets](#connectors-cli-create-secret)

1. [Créer une version et une définition de ressource](#connectors-cli-create-resource-definition)

1. [Créer une version et une définition de connecteur](#connectors-cli-create-connector-definition)

1. [Création d'un package de déploiement de fonctions Lambda](#connectors-cli-create-deployment-package)

1. [Création d’une fonction Lambda ](#connectors-cli-create-function)

1. [Créer une version et une définition de fonction](#connectors-cli-create-function-definition)

1. [Créer une version et une définition d'abonnement](#connectors-cli-create-subscription-definition)

1. [Créer une version de groupe](#connectors-cli-create-group-version)

1. [Création d’un déploiement](#connectors-cli-create-deployment)

1. [Tester la solution](#connectors-cli-test-solution)

Le didacticiel devrait prendre environ 30 minutes.

**Utilisation de l' AWS IoT Greengrass API**

Il est utile de comprendre les modèles suivants lorsque vous utilisez des groupes Greengrass et des composants de groupe (par exemple, les fonctions, les connecteurs et les ressources du groupe).
+ En haut de la hiérarchie, un composant possède un objet de *définition* qui est un conteneur d'objets de *version*. En revanche, une version est un conteneur pour les connecteurs, les fonctions ou d'autres types de composants.
+ Lorsque vous déployez vers le noyau Greengrass, vous déployez une version de groupe spécifique. Une version de groupe peut contenir une version de chaque type de composant. Un noyau est obligatoire, mais les autres sont inclus en fonction des besoins.
+ Les versions sont immuables. Ainsi, vous devez créer de nouvelles versions lorsque vous souhaitez apporter des modifications. 

**Astuce**  
Si vous recevez un message d'erreur lorsque vous exécutez une AWS CLI commande, ajoutez le `--debug` paramètre, puis réexécutez la commande pour obtenir plus d'informations sur l'erreur.

L' AWS IoT Greengrass API vous permet de créer plusieurs définitions pour un type de composant. Par exemple, vous pouvez créer un objet `FunctionDefinition` à chaque fois que vous créez une `FunctionDefinitionVersion` ou vous pouvez ajouter de nouvelles versions à une définition existante. Cette flexibilité vous permet de personnaliser votre système de gestion de version.

## Conditions préalables
<a name="connectors-cli-prerequisites"></a>

Pour suivre ce didacticiel, vous devez disposer des éléments suivants :
+ Un groupe Greengrass et un appareil principal (noyau) Greengrass (version 1.9.3 ou ultérieure). Pour savoir comment créer un groupe et un service principal Greengrass, consultez [Commencer avec AWS IoT Greengrass](gg-gs.md). Le didacticiel Mise en route comprend également les étapes d'installation du logiciel AWS IoT Greengrass Core.
+ Python 3.7 installé sur le périphérique AWS IoT Greengrass principal.
+  AWS IoT Greengrass doit être configuré pour prendre en charge les secrets locaux, comme décrit dans la section [Exigences relatives aux secrets](secrets.md#secrets-reqs).
**Note**  
Cette exigence inclut l'autorisation d'accéder aux secrets de votre Gestionnaire de Secrets. *Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont le nom commence par greengrass-.*
+ Un SID de compte Twilio, un jeton d'authentification et un numéro de téléphone Twilio. Une fois que vous avez créé un projet Twilio, ces valeurs sont disponibles sur le tableau de bord du projet.
**Note**  
Vous pouvez utiliser un compte d'essai Twilio. Si vous utilisez un compte d'essai, vous devez ajouter des numéros de téléphone non destinataires de Twilio à une liste de numéros de téléphone vérifiés. Pour plus d'informations, consultez [Comment travailler avec votre compte d'essai gratuit Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).
+ AWS CLI installé et configuré sur votre ordinateur. Pour plus d'informations, voir [Installation AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) et [configuration du AWS CLI dans le](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) *guide de AWS Command Line Interface l'utilisateur*.

   

  Les exemples de ce didacticiel sont écrits pour Linux et d'autres systèmes Unix. Si vous utilisez Windows, reportez-vous à la section [Spécification des valeurs de paramètres AWS Command Line Interface pour](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html) en savoir plus sur les différences de syntaxe.

  Si la commande contient une chaîne JSON, le didacticiel fournit un exemple qui possède le fichier JSON sur une seule ligne. Sur certains systèmes, il peut être plus facile de modifier et exécuter des commandes à l'aide de ce format.

## Étape 1 : Création d'un secret du Gestionnaire de Secrets
<a name="connectors-cli-create-secret"></a>

Dans cette étape, vous allez utiliser l' AWS Secrets Manager API pour créer un secret pour votre jeton d'authentification Twilio.

1. D'abord, créez le secret.
   + *twilio-auth-token*Remplacez-le par votre jeton d'authentification Twilio.

   ```
   aws secretsmanager create-secret --name greengrass-TwilioAuthToken --secret-string twilio-auth-token
   ```
**Note**  
Par défaut, le rôle de service Greengrass permet d' AWS IoT Greengrass obtenir la valeur des secrets dont le nom commence par *greengrass* -. Pour plus d'informations, consultez les [exigences liées aux secrets](secrets.md#secrets-reqs).

1. Copiez l'`ARN` du secret à partir de la sortie. Vous l'utilisez pour créer la ressource secrète et pour configurer le connecteur Twilio Notifications.

## Étape 2 : Créer une version et une définition de ressource
<a name="connectors-cli-create-resource-definition"></a>

Au cours de cette étape, vous allez utiliser l' AWS IoT Greengrass API pour créer une ressource secrète pour votre secret Secrets Manager.

1. Créez une définition de ressource qui inclut une version initiale.
   + *secret-arn*Remplacez-le par `ARN` le secret que vous avez copié à l'étape précédente.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{
       "Resources": [
           {
               "Id": "TwilioAuthToken",
               "Name": "MyTwilioAuthToken",
               "ResourceDataContainer": {
                   "SecretsManagerSecretResourceData": {
                       "ARN": "secret-arn"
                   }
               }
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-resource-definition \
   --name MyGreengrassResources \
   --initial-version '{"Resources": [{"Id": "TwilioAuthToken", "Name": "MyTwilioAuthToken", "ResourceDataContainer": {"SecretsManagerSecretResourceData": {"ARN": "secret-arn"}}}]}'
   ```

------

1. Copiez l'`LatestVersionArn` de la définition de ressource à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de ressource à la version de groupe que vous déployez pour le noyau.

## Étape 3 : Créer une version et une définition de connecteur
<a name="connectors-cli-create-connector-definition"></a>

Au cours de cette étape, vous configurez les paramètres du connecteur Twilio Notifications.

1. Créez une définition de connecteur avec une version initiale.
   + *account-sid*Remplacez-le par le SID de votre compte Twilio.
   + *secret-arn*Remplacez-le par le secret `ARN` de votre Secrets Manager. Le connecteur utilise ceci pour obtenir la valeur du secret local.
   + *phone-number*Remplacez-le par votre numéro de téléphone compatible avec Twilio. Twilio utilise celui-ci pour initier le SMS. Cela peut être remplacé dans la charge utile du message d'entrée. Utilisez le format suivant : `+19999999999`.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
       "Connectors": [
           {
               "Id": "MyTwilioNotificationsConnector",
               "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4",
               "Parameters": {
                   "TWILIO_ACCOUNT_SID": "account-sid",
                   "TwilioAuthTokenSecretArn": "secret-arn",
                   "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken",
                   "DefaultFromPhoneNumber": "phone-number"
               }
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-connector-definition \
   --name MyGreengrassConnectors \
   --initial-version '{"Connectors": [{"Id": "MyTwilioNotificationsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Parameters": {"TWILIO_ACCOUNT_SID": "account-sid", "TwilioAuthTokenSecretArn": "secret-arn", "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken", "DefaultFromPhoneNumber": "phone-number"}}]}'
   ```

------
**Note**  
`TwilioAuthToken` est l'ID que vous avez utilisé à l'étape précédente pour créer les ressources de secret.

1. Copiez l'`LatestVersionArn` de la définition de connecteur à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de connecteur à la version de groupe que vous déployez pour le noyau.

## Étape 4 : Création d'un package de déploiement de fonctions Lambda
<a name="connectors-cli-create-deployment-package"></a>

Pour créer une fonction Lambda, vous devez d'abord créer un *package de déploiement* de fonction Lambda contenant le code de la fonction et les dépendances. Les fonctions Lambda de Greengrass nécessitent le [SDK AWS IoT Greengrass principal](lambda-functions.md#lambda-sdks-core) pour des tâches telles que la communication avec les messages MQTT dans l'environnement principal et l'accès aux secrets locaux. Ce didacticiel crée une fonction Python afin que vous utilisiez la version Python du SDK dans le package de déploiement.

1. <a name="download-ggc-sdk"></a> Sur la page de téléchargement du [SDK AWS IoT Greengrass Core](what-is-gg.md#gg-core-sdk-download), téléchargez le SDK AWS IoT Greengrass Core pour Python sur votre ordinateur.

1. <a name="unzip-ggc-sdk"></a>Décompressez le package téléchargé pour obtenir le kit SDK. Le kit SDK est représenté par le dossier `greengrasssdk`.

1. Enregistrez la fonction de code Python suivante dans un fichier local nommé `temp_monitor.py`.

   ```
   import greengrasssdk
   import json
   import random
   
   client = greengrasssdk.client('iot-data')
   
   # publish to the Twilio Notifications connector through the twilio/txt topic
   def function_handler(event, context):
       temp = event['temperature']
       
       # check the temperature
       # if greater than 30C, send a notification
       if temp > 30:
           data = build_request(event)
           client.publish(topic='twilio/txt', payload=json.dumps(data))
           print('published:' + str(data))
           
       print('temperature:' + str(temp))
       return
   
   # build the Twilio request from the input data
   def build_request(event):
       to_name = event['to_name']
       to_number = event['to_number']
       temp_report = 'temperature:' + str(event['temperature'])
   
       return {
           "request": {
               "recipient": {
                   "name": to_name,
                   "phone_number": to_number,
                   "message": temp_report
               }
           },
           "id": "request_" + str(random.randint(1,101))
       }
   ```

1. Compressez les éléments suivants dans un fichier nommé `temp_monitor_python.zip`. Lorsque vous créez le fichier zip, insérez uniquement le code et ses dépendances, pas le dossier dans lequel il se trouve.
   + **temp\$1monitor.py**. Logique d'application.
   + **greengrasssdk**. Bibliothèque requise pour les fonctions Python Greengrass Lambda qui publient des messages MQTT.

   Il s'agit de votre package de déploiement de fonctions Lambda.

## Étape 5 : Création d'une fonction Lambda
<a name="connectors-cli-create-function"></a>

Créez à présent une fonction Lambda qui utilise le package de déploiement.

1. <a name="cli-create-empty-lambda-role"></a>Créez un rôle IAM afin de pouvoir transmettre l'ARN du rôle lors de la création de la fonction.

------
#### [ JSON Expanded ]

   ```
   aws iam create-role --role-name Lambda_empty --assume-role-policy '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "lambda.amazonaws.com"
               },
              "Action": "sts:AssumeRole"
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws iam create-role --role-name Lambda_empty --assume-role-policy '{"Version": "2012-10-17",		 	 	  "Statement": [{"Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"},"Action": "sts:AssumeRole"}]}'
   ```

------
**Note**  
AWS IoT Greengrass n'utilise pas ce rôle car les autorisations pour vos fonctions Greengrass Lambda sont spécifiées dans le rôle du groupe Greengrass. Dans le cadre de ce didacticiel, vous créez un rôle vide.

1. <a name="cli-copy-lambda-role-arn"></a>Copiez la `Arn` à partir de la sortie.

1. Utilisez l' AWS Lambda API pour créer la TempMonitor fonction. La commande suivante suppose que le fichier ZIP se trouve dans le répertoire actuel.
   + Remplacez *role-arn* par l’`Arn` que vous avez copié.

   ```
   aws lambda create-function \
   --function-name TempMonitor \
   --zip-file fileb://temp_monitor_python.zip \
   --role role-arn \
   --handler temp_monitor.function_handler \
   --runtime python3.7
   ```

1. Publiez une version de la fonction.

   ```
   aws lambda publish-version --function-name TempMonitor --description 'First version'
   ```

1. Créez un alias pour la version publiée.

   Les groupes Greengrass peuvent référencer une fonction Lambda par alias (recommandé) ou par version. L'utilisation d'un alias facilite la gestion des mises à jour du code, car vous n'avez pas à modifier votre table d'abonnement ou la définition de groupe lorsque le code de fonction est mis à jour. Au lieu de cela, il vous suffit de pointer l'alias vers la nouvelle version de la fonction.
**Note**  
AWS IoT Greengrass **ne prend pas en charge les alias Lambda pour les versions \$1LATEST.**

   ```
   aws lambda create-alias --function-name TempMonitor --name GG_TempMonitor --function-version 1
   ```

1. Copiez la `AliasArn` à partir de la sortie. Vous utilisez cette valeur lorsque vous configurez la fonction pour AWS IoT Greengrass et lorsque vous créez un abonnement.

Vous êtes maintenant prêt à configurer la fonction pour AWS IoT Greengrass.

## Étape 6 : Créer une version et une définition de fonction
<a name="connectors-cli-create-function-definition"></a>

Pour utiliser une fonction Lambda sur un AWS IoT Greengrass noyau, vous créez une version de définition de fonction qui référence la fonction Lambda par un alias et définit la configuration au niveau du groupe. Pour de plus amples informations, veuillez consulter [Contrôle de l'exécution des fonctions Greengrass Lambda à l'aide d'une configuration spécifique au groupe](lambda-group-config.md).

1. Créez une définition de fonction qui inclut une version initiale.
   + *alias-arn*Remplacez-le par celui `AliasArn` que vous avez copié lors de la création de l'alias.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{
       "Functions": [
           {
               "Id": "TempMonitorFunction",
               "FunctionArn": "alias-arn",
               "FunctionConfiguration": {
                   "Executable": "temp_monitor.function_handler",
                   "MemorySize": 16000,
                   "Timeout": 5
               }
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-function-definition \
   --name MyGreengrassFunctions \
   --initial-version '{"Functions": [{"Id": "TempMonitorFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": {"Executable": "temp_monitor.function_handler", "MemorySize": 16000,"Timeout": 5}}]}'
   ```

------

1. Copiez la `LatestVersionArn` à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de fonction à la version de groupe que vous déployez pour le noyau.

1. Copiez la `Id` à partir de la sortie. Vous utiliserez cette valeur ultérieurement lorsque vous mettrez à jour la fonction.

## Étape 7 : Créer une version et une définition d'abonnement
<a name="connectors-cli-create-subscription-definition"></a>

<a name="connectors-how-to-add-subscriptions-p1"></a>Au cours de cette étape, vous ajoutez un abonnement qui permet à la fonction Lambda d'envoyer des données d'entrée au connecteur. Le connecteur définit les rubriques MQTT auxquelles il est abonné, de sorte que cet abonnement utilise l'une des rubriques. Il s'agit de la même rubrique dans laquelle l'exemple de fonction effectue la publication.

<a name="connectors-how-to-add-subscriptions-p2"></a>Dans le cadre de ce didacticiel, vous créez également des abonnements qui permettent à la fonction de recevoir des relevés de température simulés AWS IoT et des informations d'état provenant du connecteur. AWS IoT 

1. Création d'une définition d'abonnement qui contient une version initiale qui inclut les abonnements.
   + *alias-arn*Remplacez-le par celui `AliasArn` que vous avez copié lorsque vous avez créé l'alias de la fonction. Utilisez cet ARN pour les deux abonnements qui l'utilisent.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-subscription-definition --initial-version '{
       "Subscriptions": [
           {
               "Id": "TriggerNotification",
               "Source": "alias-arn",
               "Subject": "twilio/txt",
               "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4"
           },        
           {
               "Id": "TemperatureInput",
               "Source": "cloud",
               "Subject": "temperature/input",
               "Target": "alias-arn"
           },
           {
               "Id": "OutputStatus",
               "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4",
               "Subject": "twilio/message/status",
               "Target": "cloud"
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-subscription-definition \
   --initial-version '{"Subscriptions": [{"Id": "TriggerNotification", "Source": "alias-arn", "Subject": "twilio/txt", "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4"},{"Id": "TemperatureInput", "Source": "cloud", "Subject": "temperature/input", "Target": "alias-arn"},{"Id": "OutputStatus", "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Subject": "twilio/message/status", "Target": "cloud"}]}'
   ```

------

1. Copiez la `LatestVersionArn` à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition d'abonnement à la version de groupe que vous déployez pour le noyau.

## Étape 8 : Créer une version de groupe
<a name="connectors-cli-create-group-version"></a>

Maintenant, vous êtes prêt à créer une version de groupe qui contient tous les éléments que vous souhaitez déployer. Pour ce faire, vous devez créer une version de groupe qui fait référence à la version cible de chaque type de composant.

Tout d'abord, obtenez l'ID de groupe et l'ARN de la version de définition du noyau. Ces valeurs sont requises pour créer la version de groupe.

1. Obtenir l'ID du groupe et la dernière version du groupe :

   1. <a name="get-group-id-latestversion"></a>Obtenez le IDs groupe Greengrass cible et la version du groupe. Cette procédure suppose qu'il s'agit de la dernière version du groupe et du groupe. La requête suivante renvoie le dernier groupe créé.

      ```
      aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
      ```

      Vous pouvez également procéder à une interrogation par nom. Les noms de groupe ne devant pas nécessairement être uniques, plusieurs groupes peuvent être renvoyés.

      ```
      aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
      ```
**Note**  
<a name="find-group-ids-console"></a>Vous pouvez également trouver ces valeurs dans la AWS IoT console. L'ID du groupe s'affiche sur la page **Paramètres** du groupe. IDs Les versions du groupe sont affichées dans l'onglet **Déploiements** du groupe.

   1. <a name="copy-target-group-id"></a>Copiez l'`Id` du groupe cible à partir de la sortie. Vous utilisez cela pour obtenir la version de définition du noyau et lorsque vous déployez le groupe.

   1. <a name="copy-latest-group-version-id"></a>Copiez l'élément `LatestVersion` à partir de la sortie (ID de la dernière version ajoutée au groupe). Vous utilisez cela pour obtenir la version de la définition du noyau.

1. Obtenir l'ARN de la version de la définition du noyau :

   1. Obtenez la version de groupe. Pour cette étape, nous supposons que la dernière version de groupe inclut une version de définition du noyau.
      + *group-id*Remplacez-le par celui `Id` que vous avez copié pour le groupe.
      + *group-version-id*Remplacez-le par celui `LatestVersion` que vous avez copié pour le groupe.

      ```
      aws greengrass get-group-version \
      --group-id group-id \
      --group-version-id group-version-id
      ```

   1. Copiez la `CoreDefinitionVersionArn` à partir de la sortie.

1. Créer une version de groupe.
   + *group-id*Remplacez-le par celui `Id` que vous avez copié pour le groupe.
   + *core-definition-version-arn*Remplacez-le par celui `CoreDefinitionVersionArn` que vous avez copié pour la version de définition de base.
   + *resource-definition-version-arn*Remplacez-le par celui `LatestVersionArn` que vous avez copié pour la définition de la ressource.
   + *connector-definition-version-arn*Remplacez-le par celui `LatestVersionArn` que vous avez copié pour la définition du connecteur.
   + *function-definition-version-arn*Remplacez-le par celui `LatestVersionArn` que vous avez copié pour la définition de la fonction.
   + *subscription-definition-version-arn*Remplacez-le par celui `LatestVersionArn` que vous avez copié pour la définition de l'abonnement.

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --connector-definition-version-arn connector-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. Copiez la valeur `Version` à partir de la sortie. Il s'agit de l'ID de la version de groupe. Vous utilisez cette valeur pour déployer la version de groupe.

## Étape 9 : Créer un déploiement
<a name="connectors-cli-create-deployment"></a>

Déployer le groupe sur l'appareil principal (noyau)

1. <a name="check-gg-daemon-is-running"></a>Dans un terminal principal, assurez-vous que le AWS IoT Greengrass daemon est en cours d'exécution.

   1. Pour vérifier si le démon est en cours d'exécution :

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Si la sortie contient une entrée `root` pour `/greengrass/ggc/packages/1.11.6/bin/daemon`, le démon est en cours d'exécution.

   1. Pour démarrer le daemon, procédez comme suit :

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="create-deployment"></a>Créez un déploiement .
   + *group-id*Remplacez-le par celui `Id` que vous avez copié pour le groupe.
   + *group-version-id*Remplacez-le par celui `Version` que vous avez copié pour la nouvelle version du groupe.

   ```
   aws greengrass create-deployment \
   --deployment-type NewDeployment \
   --group-id group-id \
   --group-version-id group-version-id
   ```

1. <a name="copy-deployment-id"></a>Copiez la `DeploymentId` à partir de la sortie.

1. <a name="get-deployment-status"></a>Obtenir le statut du déploiement.
   + *group-id*Remplacez-le par celui `Id` que vous avez copié pour le groupe.
   + *deployment-id*Remplacez-le par celui `DeploymentId` que vous avez copié pour le déploiement.

   ```
   aws greengrass get-deployment-status \
   --group-id group-id \
   --deployment-id deployment-id
   ```

   Si le statut est le cas`Success`, le déploiement a été effectué avec succès. Pour bénéficier d'une aide à la résolution des problèmes, consultez [Résolution des problèmes AWS IoT Greengrass](gg-troubleshooting.md).

## Tester la solution
<a name="connectors-cli-test-solution"></a>

1. <a name="choose-test-page"></a>Sur la page d'accueil de la AWS IoT console, choisissez **Test**.

1. Pour **S'abonner à la rubrique**, utilisez les valeurs suivantes, puis choisissez **S'abonner**. Le connecteur Twilio Notifications publie des informations d'état dans cette rubrique.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-cli.html)

1. Pour **Publier dans le sujet**, utilisez les valeurs suivantes, puis choisissez **Publier** pour appeler la fonction.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/connectors-cli.html)

   En cas de réussite, le destinataire reçoit le SMS et la console affiche le statut `success` depuis les [données de sortie](twilio-notifications-connector.md#twilio-notifications-connector-data-output).

   Maintenant, passez la `temperature` dans le message d'entrée à **29** et publiez. Comme ce chiffre est inférieur à 30, la TempMonitor fonction ne déclenche pas de message Twilio.

## Consultez aussi
<a name="connectors-cli-see-also"></a>
+ [Intégrer à des services et protocoles à l'aide de connecteurs Greengrass](connectors.md)
+ [AWS- connecteurs Greengrass fournis](connectors-list.md)
+ [Mise en route avec les connecteurs Greengrass (console)](connectors-console.md)
+ [AWS Secrets Manager commandes](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager) dans la *référence des AWS CLI commandes*
+ <a name="see-also-iam-cli"></a>Gestion des identités et des accès AWS commandes [(IAM) dans la référence des *AWS CLI commandes*](https://docs.aws.amazon.com/cli/latest/reference/iam)
+ <a name="see-also-lambda-cli"></a>[AWS Lambda commandes](https://docs.aws.amazon.com/cli/latest/reference/lambda) dans la *référence des AWS CLI commandes*
+ <a name="see-also-gg-cli"></a>[AWS IoT Greengrass commandes](https://docs.aws.amazon.com/cli/latest/reference/greengrass/index.html) dans la *référence des AWS CLI commandes*