Accédez aux ressources d'apprentissage automatique à partir des fonctions Lambda - AWS IoT Greengrass

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

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Accédez aux ressources d'apprentissage automatique à partir des fonctions Lambda

Les fonctions Lambda définies par l'utilisateur peuvent accéder aux ressources d'apprentissage automatique pour exécuter une inférence locale sur le cœur. AWS IoT Greengrass Une ressource de Machine Learning se compose du modèle formé et d'autres artefacts qui sont téléchargés sur l'appareil principal (noyau).

Pour permettre à une fonction Lambda d'accéder à une ressource d'apprentissage automatique sur le cœur, vous devez associer la ressource à la fonction Lambda et définir des autorisations d'accès. Le mode de conteneurisation de la fonction Lambda affiliée (ou attachée) détermine la manière dont vous procédez.

Autorisations d'accès pour les ressources de machine learning

À compter de la version 1.10.0 d'AWS IoT Greengrass Core, vous pouvez définir un propriétaire de ressource pour une ressource de Machine Learning. Le propriétaire de la ressource représente le groupe de système d'exploitation et les autorisations utilisés par AWS IoT Greengrass pour télécharger les artefacts de ressource. Si aucun propriétaire de ressource n'est défini, les artefacts de ressource téléchargés ne sont accessibles que pour l’utilisateur racine (root).

  • Si des fonctions Lambda non conteneurisées accèdent à une ressource d'apprentissage automatique, vous devez définir un propriétaire de ressource car le conteneur ne permet aucun contrôle d'autorisation. Les fonctions Lambda non conteneurisées peuvent hériter des autorisations du propriétaire de la ressource et les utiliser pour accéder à la ressource.

     

  • Si seules les fonctions Lambda conteneurisées accèdent à la ressource, nous vous recommandons d'utiliser des autorisations au niveau des fonctions au lieu de définir un propriétaire de ressource.

     

Propriétés du propriétaire de la ressource

Un propriétaire de ressource spécifie un propriétaire de groupe et des autorisations de propriétaire de groupe.

Propriétaire du groupe. ID (GID) d'un groupe d'OS Linux existant sur l'appareil principal (noyau). Les autorisations du groupe sont ajoutées au processus Lambda. Plus précisément, le GID est ajouté aux identifiants de groupe supplémentaires de la fonction Lambda.

Si une fonction Lambda du groupe Greengrass est configurée pour s'exécuter dans le même groupe de système d'exploitation que le propriétaire de la ressource d'une ressource d'apprentissage automatique, la ressource doit être attachée à la fonction Lambda. Dans le cas contraire, le déploiement échoue car cette configuration donne des autorisations implicites que la fonction Lambda peut utiliser pour accéder à la ressource sans AWS IoT Greengrass autorisation. La vérification de validation du déploiement est ignorée si la fonction Lambda s'exécute en tant que root (UID=0).

Nous vous recommandons d'utiliser un groupe de systèmes d'exploitation qui n'est pas utilisé par d'autres ressources, fonctions Lambda ou fichiers du noyau de Greengrass. L'utilisation d'un groupe de systèmes d'exploitation partagé donne aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin. Si vous utilisez un groupe de systèmes d'exploitation partagé, une fonction Lambda associée doit également être attachée à toutes les ressources d'apprentissage automatique qui utilisent le groupe de systèmes d'exploitation partagé. Sinon, le déploiement échoue.

Autorisations du propriétaire du groupe. L'autorisation de lecture seule ou de lecture et d'écriture à ajouter au processus Lambda.

Les fonctions Lambda non conteneurisées doivent hériter de ces autorisations d'accès à la ressource. Les fonctions Lambda conteneurisées peuvent hériter de ces autorisations au niveau des ressources ou définir des autorisations au niveau des fonctions. Si elles définissent des autorisations de niveau fonction, ces autorisations doivent être identiques ou plus restrictives que les autorisations de niveau ressource.

Le tableau suivant présente les configurations d'autorisation d'accès prises en charge.

GGC v1.10 or later
Propriété Si seules les fonctions Lambda conteneurisées accèdent à la ressource Si des fonctions Lambda non conteneurisées accèdent à la ressource
Propriétés de niveau fonction

Autorisations (lecture/écriture)

Obligatoires, sauf si la ressource définit un propriétaire de ressource. Si un propriétaire de ressource est défini, les autorisations de niveau fonction doivent être identiques ou plus restrictives que les autorisations du propriétaire de la ressource.

Si seules les fonctions Lambda conteneurisées accèdent à la ressource, nous vous recommandons de ne pas définir de propriétaire de ressource.

Fonctions Lambda non conteneurisées :

Non pris en charge. Les fonctions Lambda non conteneurisées doivent hériter des autorisations au niveau des ressources.

Fonctions Lambda conteneurisées :

Facultatives, mais doivent être identiques ou plus restrictives que les autorisations de niveau ressource.

Propriétés de niveau ressource

Propriétaire de ressource

Facultatif (non recommandé).

Obligatoire.

Autorisations (lecture/écriture)

Facultatif (non recommandé).

Obligatoire.

GGC v1.9 or earlier
Propriété Si seules les fonctions Lambda conteneurisées accèdent à la ressource Si des fonctions Lambda non conteneurisées accèdent à la ressource
Propriétés de niveau fonction

Autorisations (lecture/écriture)

Obligatoire.

Non pris en charge.

Propriétés de niveau ressource

Propriétaire de ressource

Non pris en charge.

Non pris en charge.

Autorisations (lecture/écriture)

Non pris en charge.

Non pris en charge.

Note

Lorsque vous utilisez l'AWS IoT GreengrassAPI pour configurer des fonctions et des ressources Lambda, la ResourceId propriété au niveau de la fonction est également requise. La ResourceId propriété associe la ressource d'apprentissage automatique à la fonction Lambda.

Définition des autorisations d'accès pour les fonctions Lambda (console)

Dans la AWS IoT console, vous définissez les autorisations d'accès lorsque vous configurez une ressource de machine learning ou que vous en associez une à une fonction Lambda.

Fonctions Lambda conteneurisées

Si seules des fonctions Lambda conteneurisées sont associées à la ressource d'apprentissage automatique :

  • Choisissez Aucun groupe système comme propriétaire de la ressource d'apprentissage automatique. Il s'agit du paramètre recommandé lorsque seules les fonctions Lambda conteneurisées accèdent à la ressource d'apprentissage automatique. Dans le cas contraire, vous pourriez accorder aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin.

     

 

Fonctions Lambda non conteneurisées (nécessite GGC v1.10 ou version ultérieure)

Si des fonctions Lambda non conteneurisées sont associées à la ressource d'apprentissage automatique :

  • Spécifiez l'ID de groupe système (GID) à utiliser en tant que propriétaire de la ressource d'apprentissage automatique. Choisissez Spécifier le groupe système et les autorisations, puis entrez le GID. Vous pouvez utiliser la getent group commande sur votre appareil principal pour rechercher l'ID d'un groupe de systèmes.

     

  • Choisissez Accès en lecture seule ou Accès en lecture et écriture pour les autorisations du groupe système.

Définition des autorisations d'accès pour les fonctions Lambda (API)

Dans l'AWS IoT GreengrassAPI, vous définissez les autorisations d'accès aux ressources de machine learning dans la ResourceAccessPolicy propriété de la fonction Lambda ou dans la OwnerSetting propriété de la ressource.

Fonctions Lambda conteneurisées

Si seules des fonctions Lambda conteneurisées sont associées à la ressource d'apprentissage automatique :

  • Pour les fonctions Lambda conteneurisées, définissez les autorisations d'accès dans la Permission propriété de la propriété. ResourceAccessPolicies Par exemple :

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Pour les ressources de Machine Learning, omettez la propriété OwnerSetting. Par exemple :

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package" } } } ]

    Il s'agit de la configuration recommandée lorsque seules les fonctions Lambda conteneurisées accèdent à la ressource d'apprentissage automatique. Dans le cas contraire, vous pourriez accorder aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin.

 

Fonctions Lambda non conteneurisées (nécessite GGC v1.10 ou version ultérieure)

Si des fonctions Lambda non conteneurisées sont associées à la ressource d'apprentissage automatique :

  • Pour les fonctions Lambda non conteneurisées, omettez la propriété dans. Permission ResourceAccessPolicies Cette configuration est requise et permet à la fonction d'hériter de l'autorisation de niveau ressource. Par exemple :

    "Functions": [ { "Id": "my-non-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "Execution": { "IsolationMode": "NoContainer", }, "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id" } ] }, "Pinned": true, "Timeout": 5 } } ]
  • Pour les fonctions Lambda conteneurisées qui accèdent également à la ressource d'apprentissage automatique, omettez la Permission propriété ResourceAccessPolicies ou définissez une autorisation identique ou plus restrictive que l'autorisation au niveau de la ressource. Par exemple :

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource. } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Pour les ressources de Machine Learning, définissez la propriété OwnerSetting, ainsi que les propriétés enfants GroupOwner et GroupPermission. Par exemple :

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package", "OwnerSetting": { "GroupOwner": "os-group-id", "GroupPermission": "ro-or-rw" } } } } ]

Accès aux ressources d'apprentissage automatique à partir du code de fonction Lambda

Les fonctions Lambda définies par l'utilisateur utilisent des interfaces de système d'exploitation spécifiques à la plate-forme pour accéder aux ressources d'apprentissage automatique sur un périphérique principal.

GGC v1.10 or later

Pour les fonctions Lambda conteneurisées, la ressource est montée dans le conteneur Greengrass et disponible sur le chemin de destination local défini pour la ressource. Pour les fonctions Lambda non conteneurisées, la ressource est liée symboliquement à un répertoire de travail spécifique à Lambda et transmise à la variable d'environnement dans le processus Lambda. AWS_GG_RESOURCE_PREFIX

Pour obtenir le chemin d'accès aux artefacts téléchargés d'une ressource d'apprentissage automatique, les fonctions Lambda ajoutent la variable d'AWS_GG_RESOURCE_PREFIXenvironnement au chemin de destination local défini pour la ressource. Pour les fonctions Lambda conteneurisées, la valeur renvoyée est une barre oblique unique (). /

resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path" with open(resourcePath, 'r') as f: # load_model(f)
GGC v1.9 or earlier

Les artefacts téléchargés d'une ressource de Machine Learning se trouvent dans le chemin de destination local défini pour la ressource. Seules les fonctions Lambda conteneurisées peuvent accéder aux ressources d'apprentissage automatique dans AWS IoT Greengrass Core v1.9 et versions antérieures.

resourcePath = "/local-destination-path" with open(resourcePath, 'r') as f: # load_model(f)

Votre implémentation du chargement du modèle dépend de votre bibliothèque de Machine Learning.

Résolution des problèmes

Utilisez les informations suivantes pour résoudre les problèmes liés à l'accès aux ressources de Machine Learning.

InvalidML ModelOwner - GroupOwnerSetting est fourni dans la ressource du modèle ML, mais n' GroupOwner GroupPermission est pas présent

Solution : vous recevez cette erreur si une ressource d'apprentissage automatique contient l'ResourceDownloadOwnerSettingobjet mais que la GroupPermission propriété GroupOwner ou la propriété requise n'est pas définie. Pour résoudre ce problème, définissez la propriété manquante.

 

NoContainer La fonction ne peut pas configurer les autorisations lors de l'attachement de ressources Machine Learning. <function-arn>fait référence à une ressource d'apprentissage automatique <resource-id>avec autorisation <ro/rw> dans la politique d'accès aux ressources.

Solution : vous recevez cette erreur si une fonction Lambda non conteneurisée spécifie des autorisations au niveau de la fonction pour une ressource de machine learning. Les fonctions non conteneurisées doivent hériter des autorisations du propriétaire de la ressource définies sur la ressource de Machine Learning. Pour résoudre ce problème, choisissez d'hériter des autorisations du propriétaire des ressources (console) ou de supprimer les autorisations de la politique d'accès aux ressources (API) de la fonction Lambda.

 

<function-arn>La fonction fait référence à une ressource Machine Learning dont l'<resource-id>autorisation est manquante à la fois dans la ressource ResourceAccessPolicy et dans la ressource OwnerSetting.

Solution : vous recevez cette erreur si les autorisations d'accès à la ressource d'apprentissage automatique ne sont pas configurées pour la fonction Lambda attachée ou pour la ressource. Pour résoudre ce problème, configurez les autorisations dans la ResourceAccessPolicypropriété de la fonction Lambda ou dans la OwnerSettingpropriété de la ressource.

 

<function-arn>La fonction fait référence à la ressource Machine Learning <resource-id>avec l'autorisation \ "rw \ », tandis que le paramètre du propriétaire de la ressource autorise GroupPermission uniquement \ "ro \ ».

Solution : vous recevez cette erreur si les autorisations d'accès définies pour la fonction Lambda associée dépassent les autorisations du propriétaire de la ressource définies pour la ressource d'apprentissage automatique. Pour résoudre ce problème, définissez des autorisations plus restrictives pour la fonction Lambda ou des autorisations moins restrictives pour le propriétaire de la ressource.

 

NoContainer La fonction <function-arn>fait référence aux ressources du chemin de destination imbriqué.

Solution : vous recevez cette erreur si plusieurs ressources de machine learning associées à une fonction Lambda non conteneurisée utilisent le même chemin de destination ou un chemin de destination imbriqué. Pour résoudre ce problème, spécifiez des chemins de destination distincts pour les ressources.

 

La fonction Lambda <function-arn> accède à la ressource <resource-id> en partageant le même identifiant de propriétaire de groupe

Solution : vous recevez cette erreur runtime.log si le même groupe de système d'exploitation est spécifié comme identité Run as de la fonction Lambda et propriétaire de la ressource pour une ressource d'apprentissage automatique, mais que la ressource n'est pas attachée à la fonction Lambda. Cette configuration donne à la fonction Lambda des autorisations implicites qu'elle peut utiliser pour accéder à la ressource sans AWS IoT Greengrass autorisation.

Pour résoudre ce problème, utilisez un autre groupe de systèmes d'exploitation pour l'une des propriétés ou associez la ressource d'apprentissage automatique à la fonction Lambda.

Consultez aussi