Résoudre les problèmes de déploiement dans Lambda
Lorsque vous mettez à jour votre fonction, Lambda déploie la modification en lançant de nouvelles instances de cette fonction avec le code ou les paramètres mis à jour. Les erreurs de déploiement empêchent l’utilisation de la nouvelle version et peuvent résulter de problèmes liés au package de déploiement, au code, à vos autorisations ou à vos outils.
Lorsque vous déployez des mises à jour de votre fonction directement avec l’API Lambda ou avec un client tel que l’AWS CLI, les erreurs sont directement visibles dans la sortie. Si vous utilisez des services comme AWS CloudFormation, AWS CodeDeploy ou AWS CodePipeline, recherchez la réponse de Lambda dans les journaux ou le flux d’événements de ce service.
Les rubriques suivantes fournissent des conseils de dépannage pour les erreurs et les problèmes que vous pouvez rencontrer lors de l’utilisation de l’API, de la console ou des outils Lambda. Si vous rencontrez un problème qui n’est pas répertorié ici, vous pouvez utiliser le bouton Commentaire sur cette page pour le signaler.
Pour plus de conseils de dépannage et de réponses aux questions courantes de support, visitez le Centre de connaissances AWS
Pour plus d’informations sur le débogage et le dépannage des applications Lambda, consultez Débogage
Rubriques
Général : autorisation refusée/impossible de charger ce fichier
Erreur : EACCES : autorisation refusée, ouvrir ’/var/task/index.js’
Erreur : impossible de charger ce fichier - cette fonction
Erreur : [Errno 13] Autorisation refusée : ’/var/task/function.py’
Le runtime Lambda a besoin d’une autorisation pour lire les fichiers de votre package de déploiement. Dans la notation octale des autorisations Linux, Lambda a besoin de 644 autorisations pour les fichiers non exécutables (rw-r--r--) et de 755 autorisations (rwxr-xr-x) pour les répertoires et les fichiers exécutables.
Sous Linux et macOS, utilisez la commande chmod pour modifier les autorisations de fichiers sur les fichiers et les répertoires de votre package de déploiement. Par exemple, pour octroyer à un fichier non exécutable les autorisations correctes, exécutez la commande suivante.
chmod 644 <filepath>
Pour modifier les autorisations relatives aux fichiers dans Windows, voir Définir, afficher, modifier ou supprimer des autorisations sur un objet
Note
Si vous n’octroyez pas à Lambda les autorisations dont il a besoin pour accéder aux répertoires de votre package de déploiement, Lambda définit les autorisations de ces répertoires à 755 (rwxr-xr-x).
Général : une erreur se produit lors de l’appel de UpdateFunctionCode
Erreur : une erreur s’est produite (RequestEntityTooLargeException) lors de l’appel de l’opération UpdateFunctionCode
Lorsque vous chargez un package de déploiement ou une archive de couche directement dans Lambda, la taille du fichier ZIP est limitée à 50 Mo. Pour charger un fichier plus volumineux, stockez-le dans Amazon S3, puis utilisez les paramètres S3Bucket et S3Key.
Note
Lorsque vous chargez un fichier directement avec l’AWS CLI, le kit AWS SDK ou tout autre outil, le fichier ZIP binaire est converti en base64, ce qui augmente sa taille d’environ 30 %. Pour permettre cela et aussi prendre en compte la taille d’autres paramètres dans la demande, la limite de taille réelle de demande que Lambda applique est supérieure. Pour cette raison, la limite de 50 Mo est approximative.
Amazon S3 : code d’erreur PermanentRedirect.
Erreur : Une erreur s’est produite pendant GetObject. Code d’erreur S3 : PermanentRedirect. Message d’erreur S3 : Le compartiment se trouve dans cette région : us-east-2. Veuillez utiliser cette région pour renouveler la demande
Lorsque vous chargez le package de déploiement d’une fonction à partir d’un compartiment Amazon S3, le compartiment doit se trouver dans la même région que la fonction. Ce problème peut se produire quand vous spécifiez un objet Amazon S3 dans un appel à UpdateFunctionCode, ou utilisez le package et déployez des commandes dans l’AWS CLI ou l’interface de ligne de commande AWS SAM. Créez un compartiment d’artefact de déploiement pour chaque région dans laquelle vous développez des applications.
Général : impossible de trouver, impossible de charger, impossible d’importer, classe introuvable, aucun fichier ou répertoire de ce type
Erreur : module ’function’ introuvable
Erreur : impossible de charger ce fichier - cette fonction
Erreur : impossible d’importer le module ’function’
Erreur : Classe introuvable : Function.handler
Erreur : fork/exec /var/task/function : aucun fichier ou répertoire de ce type
Erreur : impossible de charger le type ’Function.Handler’ à partir de l’assemblage ’Function’.
Le nom du fichier ou de la classe dans la configuration du gestionnaire de votre fonction ne correspond pas à votre code. Consultez la section suivante pour plus d’informations.
Général : gestionnaire de méthode non défini
Erreur : index.handler n’est pas défini ou n’est pas exporté
Erreur : gestionnaire ’handler’ manquant dans le module ’function’
Erreur : méthode non définie ’handler’ pour #<LambdaHandler:0x000055b76ccebf98>
Erreur : aucune méthode publique nommée handleRequest avec la signature de méthode appropriée trouvée dans la classe function.Handler
Erreur : méthode ’handleRequest’ introuvable dans le type ’Function.Handler’ de l’assemblage ’Function’
Le nom de la méthode du gestionnaire dans la configuration du gestionnaire de votre fonction ne correspond pas à votre code. Chaque exécution définit une convention d’affectation de noms pour les gestionnaires, tels que le nom de fichier.nom de la méthode. Le gestionnaire correspond à la méthode dans le code de votre fonction que l’environnement d’exécution exécute lorsque la fonction est invoquée.
Pour certains langages, Lambda fournit une bibliothèque avec une interface pour laquelle une méthode de gestionnaire doit avoir un nom spécifique. Pour plus d’informations sur l’attribution de noms de gestionnaire pour chaque langue, consultez les rubriques suivantes.
Général : limite de stockage du code Lambda dépassée
Erreur : limite de stockage de code dépassée.
Lambda stocke le code de votre fonction dans un compartiment S3 interne réservé à votre compte. Chaque compte AWS dispose de 75 Go de stockage dans chaque région. Le stockage de code inclut le stockage total utilisé à la fois par les fonctions et les couches Lambda. Si vous atteignez le quota, vous recevez une exception CodeStorageExceededException lorsque vous tentez de déployer de nouvelles fonctions.
Gérez l’espace de stockage disponible en nettoyant les anciennes versions des fonctions, en supprimant le code inutilisé ou en utilisant des couches Lambda. En outre, il est recommandé d’utiliser des comptes AWS distincts pour des charges de travail distinctes afin de gérer les quotas de stockage.
Vous pouvez consulter votre utilisation totale du stockage dans la console Lambda, dans le sous-menu Tableau de bord :
Lambda : échec de la conversion de couche
Erreur : la conversion de la couche Lambda a échoué. Pour obtenir des conseils sur la résolution de ce problème, consultez la page Résolution des problèmes de déploiement dans Lambda du Guide de l’utilisateur Lambda.
Lorsque vous configurez une fonction Lambda avec une couche, Lambda fusionne la couche avec le code de votre fonction. Si ce processus échoue, Lambda renvoie cette erreur. Si vous rencontrez cette erreur, réalisez les actions suivantes :
-
Supprimer tous les fichiers inutiles de votre couche
-
Supprimer tous les liens symboliques de votre couche
-
Renommer tous les fichiers qui ont le même nom qu’un répertoire dans l’une des couches de votre fonction
Lambda : InvalidParameterValueException ou RequestItyToolArgeException
Erreur : InvalidParameterValueException : Lambda n’a pas pu configurer vos variables d’environnement car les variables d’environnement que vous avez fournies dépassaient la limite de 4 Ko. Chaîne mesurée : {"A1":"uSFeY5cyPiPn7AtnX5BsM...
Erreur : RequestEntityTooLargeException : La demande doit être inférieure à 5 120 octets pour l’opération UpdateFunctionConfiguration
La taille maximale de l’objet variable stocké dans la configuration de la fonction ne doit pas dépasser 4096 octets. Cela inclut les noms de clés, les valeurs, les guillemets, les virgules et les crochets. La taille totale du corps de requête HTTP est également limitée.
{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs22.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables":{ "BUCKET": "amzn-s3-demo-bucket", "KEY": "file.txt" }}, ... }
Dans cet exemple, l’objet comporte 39 caractères et utilise 39 octets lorsqu’il est stocké (sans espace) comme chaîne {"BUCKET":"amzn-s3-demo-bucket","KEY":"file.txt"}. Les caractères ASCII standard dans les valeurs des variables d’environnement utilisent un octet chacun. Les caractères ASCII et Unicode étendus peuvent utiliser entre 2 et 4 octets par caractère.
Lambda : InvalidParameterValueException
Erreur : InvalidParameterValueException : Lambda n’a pas pu configurer vos variables d’environnement car les variables d’environnement que vous avez fournies contiennent des clés réservées qui ne sont actuellement pas prises en charge pour la modification.
Lambda réserve certaines clés de variables d’environnement pour une utilisation interne. Par exemple, AWS_REGION est utilisé par l’environnement d’exécution pour déterminer la région actuelle et ne peut pas être remplacé. D’autres variables, comme PATH, sont utilisées par l’environnement d’exécution, mais peuvent être étendues dans la configuration de votre fonction. Pour obtenir une liste complète, veuillez consulter Variables d’environnement d’exécution définies.
Lambda : quotas de simultanéité et de mémoire
Erreur :ConcurrentExecutions spécifiées pour la fonction diminuent les UnreservedConcurrentExecution du compte en dessous de sa valeur minimale
Erreur : « MemorySize » ne remplit pas la condition : le membre doit avoir une valeur inférieure ou égale à 3008
Ces erreurs se produisent lorsque vous dépassez les quotas de simultanéité ou de mémoire pour votre compte. Les nouveaux comptes AWS ont des quotas de simultanéité et de mémoire réduits. Pour résoudre les erreurs liées à la simultanéité, vous pouvez demander une augmentation des quotas. Vous ne pouvez pas demander d’augmentation des quotas de mémoire.
-
Simultanéité : vous pouvez recevoir un message d’erreur si vous essayez de créer une fonction à l’aide de la simultanéité réservée ou provisionnée, ou si votre demande de simultanéité par fonction (PutFunctionConcurrency) excède le quota de simultanéité de votre compte.
-
Mémoire : des erreurs surviennent lorsque la capacité de mémoire allouée à la fonction dépasse le quota de mémoire de votre compte.
Lambda : configuration d’alias non valide pour la simultanéité provisionnée.
Erreur : configuration d’alias non valide pour la simultanéité provisionnée
Cette erreur se produit lorsque vous essayez de mettre à jour le code ou la configuration d’une fonction Lambda alors qu’un alias doté d’une simultanéité provisionnée pointe vers une version présentant des problèmes. Lambda pré-initialise les environnements d’exécution pour une simultanéité provisionnée, et si ces environnements ne peuvent pas être correctement initialisés en raison d’erreurs de code, de contraintes de ressources ou de l’utilisation d’une pile ou d’un alias affecté, le déploiement échoue. Si vous rencontrez ce problème, réalisez les actions suivantes :
-
Restaurer l’alias : mettez temporairement à jour l’alias pour qu’il pointe vers la version qui fonctionnait auparavant.
aws lambda update-alias \ --function-name <function-name> \ --name <alias-name> \ --function-version <known-good-version> -
Corriger le code d’initialisation Lambda : assurez-vous que le code d’initialisation exécuté en dehors du gestionnaire ne contient aucune exception non détectée et initialisez les clients et les connexions.
-
Redéployer de façon sûre : déployez le code corrigé et publiez une nouvelle version. Mettez ensuite à jour l’alias pour qu’il pointe vers la version corrigée. Réactivez éventuellement la simultanéité provisionnée, si nécessaire.
Si vous utilisez AWS CloudFormation, mettez à jour la définition de pile FunctionVersion:!GetAtt
version.Version afin que l’alias pointe vers la version de travail :
alias: Type: AWS::Lambda::Alias Properties:FunctionName: !Ref function FunctionVersion: !GetAtt version.Version Name: BLUE ProvisionedConcurrencyConfig: ProvisionedConcurrentExecutions: 1