Exécuter AWS Lambda des fonctions - AWS IoT Greengrass

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.

Exécuter AWS Lambda des fonctions

Note

AWS IoT Greengrassne prend actuellement pas en charge cette fonctionnalité sur les appareils Windows principaux.

Vous pouvez importer des AWS Lambda fonctions sous forme de composants qui s'exécutent sur des appareils AWS IoT Greengrass principaux. Vous souhaiterez peut-être procéder ainsi dans les cas suivants :

Les fonctions Lambda incluent des dépendances sur les composants suivants. Il n'est pas nécessaire de définir ces composants comme des dépendances lorsque vous importez la fonction. Lorsque vous déployez le composant de fonction Lambda, le déploiement inclut ces dépendances du composant Lambda.

  • Le composant Lambda Launcher (aws.greengrass.LambdaLauncher) gère les processus et la configuration de l'environnement.

  • Le composant Lambda Manager (aws.greengrass.LambdaManager) gère la communication entre les processus et le dimensionnement.

  • Le composant Lambda runtimes (aws.greengrass.LambdaRuntimes) fournit des artefacts pour chaque environnement d'exécution Lambda pris en charge.

Prérequis

Vos appareils principaux et vos fonctions Lambda doivent répondre aux exigences suivantes pour que vous puissiez exécuter les fonctions sur le logiciel AWS IoT Greengrass principal :

  • Votre appareil principal doit répondre aux exigences pour exécuter les fonctions Lambda. Si vous souhaitez que le périphérique principal exécute des fonctions Lambda conteneurisées, le périphérique doit répondre aux exigences requises. Pour plus d’informations, consultez Exigences relatives à la fonction Lambda.

  • Vous devez installer les langages de programmation utilisés par la fonction Lambda sur vos appareils principaux.

    Astuce

    Vous pouvez créer un composant qui installe le langage de programmation, puis spécifier ce composant en tant que dépendance de votre composant de fonction Lambda. Greengrass prend en charge toutes les versions compatibles avec Lambda des environnements d'exécution Python, Node.js et Java. Greengrass n'applique aucune restriction supplémentaire aux versions d'exécution Lambda obsolètes. Vous pouvez exécuter des fonctions Lambda qui utilisent ces environnements d'exécution obsolètesAWS IoT Greengrass, mais vous ne pouvez pas les créer dans. AWS Lambda Pour plus d'informations sur la AWS IoT Greengrass prise en charge des environnements d'exécution Lambda, consultez. Exécuter AWS Lambda des fonctions

Configurer le cycle de vie des fonctions Lambda

Le cycle de vie de la fonction Greengrass Lambda détermine le moment où une fonction démarre et la manière dont elle crée et utilise les conteneurs. Le cycle de vie détermine également la manière dont le logiciel AWS IoT Greengrass Core conserve les variables et la logique de prétraitement qui se situent en dehors du gestionnaire de fonctions.

AWS IoT Greengrassprend en charge les cycles de vie à la demande (par défaut) et de longue durée :

  • Les fonctions à la demande démarrent lorsqu'elles sont appelées et s'arrêtent lorsqu'il ne reste plus aucune tâche à exécuter. Chaque appel de la fonction crée un conteneur distinct, également appelé sandbox, pour traiter les invocations, sauf si un conteneur existant est disponible pour être réutilisé. Tous les conteneurs peuvent traiter les données que vous envoyez à la fonction.

    Plusieurs invocations d'une fonction à la demande peuvent être exécutées simultanément.

    Les variables et la logique de prétraitement que vous définissez en dehors du gestionnaire de fonctions ne sont pas conservées lors de la création de nouveaux conteneurs.

  • Les fonctions de longue durée (ou épinglées) démarrent lorsque le logiciel AWS IoT Greengrass Core démarre et s'exécutent dans un conteneur unique. Le même conteneur traite toutes les données que vous envoyez à la fonction.

    Les appels multiples sont mis en file d'attente jusqu'à ce que le logiciel AWS IoT Greengrass Core exécute les appels précédents.

    Les variables et la logique de prétraitement que vous définissez en dehors du gestionnaire de fonctions sont conservées à chaque appel du gestionnaire.

    Utilisez des fonctions Lambda de longue durée lorsque vous devez commencer à travailler sans aucune intervention initiale. Par exemple, une fonction de longue durée peut charger et commencer à traiter un modèle d'apprentissage automatique afin qu'il soit prêt lorsque la fonction reçoit les données de l'appareil.

    Note

    Les fonctions de longue durée ont des délais d'expiration associés à chaque appel de leur gestionnaire. Si vous souhaitez invoquer du code qui s'exécute indéfiniment, vous devez le démarrer en dehors du gestionnaire. Assurez-vous qu'aucun code de blocage en dehors du gestionnaire ne puisse empêcher l'initialisation de la fonction.

    Ces fonctions s'exécutent sauf si le logiciel AWS IoT Greengrass Core s'arrête, par exemple lors d'un déploiement ou d'un redémarrage. Ces fonctions ne s'exécuteront pas si la fonction rencontre une exception non détectée, dépasse ses limites de mémoire ou entre dans un état d'erreur, tel qu'un délai d'expiration du gestionnaire.

Pour plus d'informations sur la réutilisation des conteneurs, consultez la section Comprendre la réutilisation des conteneurs AWS Lambda dans le blog AWS Compute.

Configuration de la conteneurisation des fonctions Lambda

Par défaut, les fonctions Lambda s'exécutent à l'intérieur d'un AWS IoT Greengrass conteneur. Les conteneurs Greengrass isolent vos fonctions de l'hôte. Cette isolation augmente la sécurité de l'hôte et des fonctions du conteneur.

Nous vous recommandons d'exécuter les fonctions Lambda dans un conteneur Greengrass, sauf si votre cas d'utilisation exige qu'elles s'exécutent sans conteneurisation. En exécutant vos fonctions Lambda dans un conteneur Greengrass, vous pouvez mieux contrôler la manière dont vous limitez l'accès aux ressources.

Vous pouvez exécuter une fonction Lambda sans conteneurisation dans les cas suivants :

  • Vous souhaitez exécuter AWS IoT Greengrass sur un appareil qui ne prend pas en charge le mode conteneur. Par exemple, si vous souhaitez utiliser une distribution Linux spéciale ou si vous avez une version antérieure du noyau qui n'est plus à jour.

  • Vous souhaitez exécuter votre fonction Lambda dans un autre environnement de conteneurs avec son propre OverlayFS, mais vous rencontrez des conflits OverlayFS lorsque vous l'exécutez dans un conteneur Greengrass.

  • Vous devez accéder à des ressources locales dont les chemins ne peuvent pas être déterminés au moment du déploiement ou dont les chemins peuvent changer après le déploiement. Un exemple de cette ressource serait un périphérique enfichable.

  • Vous avez une application antérieure qui a été écrite en tant que processus, et vous rencontrez des problèmes lorsque vous l'exécutez dans un conteneur Greengrass.

Différences de conteneurisation
Conteneurisation Remarques

Conteneur Greengrass

  • Toutes les AWS IoT Greengrass fonctionnalités sont disponibles lorsque vous exécutez une fonction Lambda dans un conteneur Greengrass.

  • Les fonctions Lambda qui s'exécutent dans un conteneur Greengrass n'ont pas accès au code déployé des autres fonctions Lambda, même si elles s'exécutent avec le même groupe de systèmes. En d'autres termes, vos fonctions Lambda s'exécutent de manière plus isolée les unes des autres.

  • Étant donné que le logiciel AWS IoT Greengrass Core exécute tous les processus enfants dans le même conteneur que la fonction Lambda, les processus enfants s'arrêtent lorsque la fonction Lambda s'arrête.

Aucun conteneur

  • Les fonctionnalités suivantes ne sont pas disponibles pour les fonctions Lambda non conteneurisées :

    • Limites de mémoire de la fonction Lambda.

    • Ressources de volumes et d'appareils locales. Vous devez accéder à ces ressources en utilisant leurs chemins de fichiers sur le périphérique principal plutôt qu'en tant que ressources de fonction Lambda.

  • Si votre fonction Lambda non conteneurisée accède à une ressource d'apprentissage automatique, vous devez identifier le propriétaire de la ressource et définir des autorisations d'accès sur la ressource, et non sur la fonction Lambda.

  • Les fonctions Lambda non conteneurisées ont un accès en lecture seule au code déployé des autres fonctions Lambda exécutées avec le même groupe de systèmes.

Si vous modifiez la conteneurisation d'une fonction Lambda lorsque vous la déployez, la fonction risque de ne pas fonctionner comme prévu. Si la fonction Lambda utilise des ressources locales qui ne sont plus disponibles avec le nouveau paramètre de conteneurisation, le déploiement échoue.

  • Lorsque vous remplacez l'exécution d'une fonction Lambda dans un conteneur Greengrass par une fonction sans conteneurisation, les limites de mémoire de la fonction sont supprimées. Vous devez accéder au système de fichiers directement au lieu d'utiliser les ressources locales attachées. Vous devez supprimer toutes les ressources associées avant de déployer la fonction Lambda.

  • Lorsque vous passez d'une fonction Lambda exécutée sans conteneurisation à une fonction Lambda exécutée dans un conteneur, votre fonction Lambda perd l'accès direct au système de fichiers. Vous devez définir une limite de mémoire pour chaque fonction ou accepter la limite de mémoire par défaut de 16 Mo. Vous pouvez configurer ces paramètres pour chaque fonction Lambda lorsque vous la déployez.

Pour modifier les paramètres de conteneurisation d'un composant de fonction Lambda, définissez la valeur du paramètre de containerMode configuration sur l'une des options suivantes lorsque vous déployez le composant.

  • NoContainer— Le composant ne s'exécute pas dans un environnement d'exécution isolé.

  • GreengrassContainer— Le composant s'exécute dans un environnement d'exécution isolé à l'intérieur du AWS IoT Greengrass conteneur.

Pour plus d'informations sur le déploiement et la configuration des composants, reportez-vous aux sections Déployer AWS IoT Greengrass des composants sur des appareils etMettre à jour les configurations des composants.