View a markdown version of this page

Résolution des problèmes liés aux fonctions Web Lambda - AWS Lambda

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.

Résolution des problèmes liés aux fonctions Web Lambda

Commencez par l'état de la ressource, la réponse HTTP et les journaux de la demande. Les fonctions Web exposent un état distinct pour la fonction, la révision, le point de terminaison et chaque région d'un point de PerRegion terminaison MultiRegion ou d'un point de terminaison. La défaillance d'une ressource ne change pas toujours l'état des autres.

Note

Avant d'exécuter les commandes de diagnostic décrites dans cette rubrique, assurez-vous que vous disposez des droits d' AWS CLI accès et des autorisations nécessaires pour appeler les opérations de la fonction get-* Web Lambda.

Collecter des informations de diagnostic

  1. Obtenez la fonction Web, la révision et le point de terminaison. Enregistrez chaquestate, stateReasonupdateStatus, et chaque updateStatusReason valeur.

    aws lambda-web get-web-function \ --function-name my-web-app aws lambda-web get-web-function-revision \ --function-name my-web-app \ --revision-id revision-id aws lambda-web get-web-function-endpoint \ --function-name my-web-app \ --endpoint-name prod

    my-web-appRemplacez-le par le nom de votre fonction, revision-id par la révision à inspecter et prod par le nom de votre point de terminaison.

  2. Envoyez une demande et enregistrez le code d'état et les en-têtes de réponse.

    curl --include https://endpoint-domain/path

    L'lambda-web-request-iden-tête identifie la demande. Lorsqu'il est présent, l'lambda-web-logstreamen-tête identifie le flux de journal Amazon CloudWatch Logs qui a traité la demande, et l'lambda-web-error-typeen-tête identifie une erreur de plateforme.

  3. Consultez les journaux des applications et du système dans le groupe de journaux centralisé de la région d'origine de la fonction Web. Pour les noms des groupes de logs et les conseils de corrélation, voirJournaux des fonctions Web dans Amazon CloudWatch Logs.

  4. Pour les PerRegion terminaux MultiRegion et les terminaux, inspectez chaque entrée. regionalEndpoints Un état satisfaisant au niveau du point de terminaison ne signifie pas que la dernière mise à jour a réussi dans toutes les régions.

Problèmes de déploiement et de démarrage

Symptôme Ce qu'il faut vérifier Résolution
Une révision est Failed La révisionstateReason, la version de l'objet Amazon S3 référencé, la politique du bucket, le rôle d'exécution, le runtime et AWS KMS la clé. Corrigez la configuration sous-jacente et créez une nouvelle révision. Les révisions sont immuables et une révision échouée ne revient pas àActive.
Le point de terminaison l'estActive, mais les demandes échouent lors du démarrage de l'application Journaux du système et des applications pour détecter les erreurs de fichier d'entrée, les erreurs de dépendance ou un serveur qui n'écoute jamais. AWS_LAMBDA_HTTP_ENDPOINT Exécutez l'application packagée localement, vérifiez le fichier d'entrée et les dépendances de production, et écoutez l'hôte et le port exacts fournis par Lambda. Déployez la correction en tant que nouvelle révision.
La mise à jour d'un terminal échoue updateStatusReasonsur le point de terminaison et, pour MultiRegion et pour les PerRegion points de terminaison, sur chaque entrée régionale. Corrigez la dépendance signalée ou la défaillance régionale, puis appelez à UpdateWebFunctionEndpoint nouveau pour réessayer la mise à jour.
does not have s3:GetObject sur create-web-function-revision Le code est lu depuis Amazon S3, et la politique du compartiment ou la politique d'identité de l'appelant ne disposent pas d'un accès en lecture. Grant s3:GetObject et s3:GetObjectVersion à la fois dans la politique de compartiment (pour le service Lambda) et dans la politique d'identité de l'appelant.
AccessDenied sur get-web-function-endpoint La politique IAM n'inclut Resource pas le point de terminaison. Inclure web-function/name/* dans la politiqueResource.

Pour éviter les échecs de déploiement répétés, validez la configuration et le démarrage dans une révision de test avant de créer une révision de production.

Erreurs de CLI et de package

Erreur ou symptôme Cause Résolution
invalid choice: lambda-web La version installée est AWS CLI antérieure aux commandes Web Function. Mettez à jour AWS CLI et vérifiez que aws lambda-web help les opérations de la fonction Web sont répertoriées.
Unknown parameter: BuildConfig La demande utilise les noms des PascalCase membres. Utilisez les membres de demande CamelCase présentés dans ce guide, buildConfig tels quecodeConfig, et. serviceConfig
Cannot find module '/var/task/index.js' Le fichier d'entrée requis est absent de la racine de l'archive. index.jsÀ placer à la racine du package de déploiement. Incluez tous les fichiers et dépendances de production qu'il importe.
ERR_MODULE_NOT_FOUNDpour un dossier de candidature L'archive omet un fichier source ou compilé importé parindex.js. Inspectez l'archive avecunzip -l, ajoutez le fichier manquant et créez une nouvelle révision.
Application.TimeoutListenError, ou HTTP 502 sur la première requête L'application écoute uniquement sur une adresse de boucle, telle que 127.0.0.1 oulocalhost, ou sur un port autre que celui d'entrée. AWS_LAMBDA_HTTP_ENDPOINT Analysez AWS_LAMBDA_HTTP_ENDPOINT et écoutez exactement sur cet hôte et ce port.
EMFILE ou too many open files L'application fuit des sockets, des fichiers ou des connexions à des bases de données lors de demandes simultanées. Fermez les descripteurs par demande, les pools de connexions liés et surveillez les descripteurs ouverts dans le cadre d'une simultanéité prolongée.
JavaScript heap out of memory L'application a atteint la limite de mémoire V8 par défaut, qui est inférieure à la limite de mémoire de 2 Go de l'environnement d'exécution, ou les demandes simultanées ont épuisé la mémoire restante de l'environnement. Vérifiez les objets conservés et les caches illimités, et réduisez la simultanéité. Si l'application nécessite un tas plus important, définissez une limite de tas V8 plus importante avec in. --max-old-space-size NODE_OPTIONS Laissez de la mémoire pour les tampons, les allocations natives et le temps d'exécution.
Cannot find moduleDépendance/ ERR_MODULE_NOT_FOUND au moment de l'exécution node_modulesn'était pas inclus dans le package de déploiement. Installez les dépendances de production et incluez-les dans le package : exécuteznpm ci --omit=dev, puis confirmez avecunzip -l function.zip.
Les fichiers statiques renvoient HTTP 404 L'application résout les chemins de fichiers relatifs au répertoire de travail ou les fichiers n'ont pas été empaquetés. Résolvez les chemins depuis le répertoire du module (__dirnamedans CommonJS ou import.meta.dirname dans les modules ES) et vérifiez que les fichiers se trouvent dans le package avecunzip -l.
Erreurs d'importation ESM, telles que « Impossible d'utiliser l'instruction d'importation en dehors d'un module » package.jsonne déclare pas le type de module. Ajoutez "type": "module" ou utilisez CommonJS de manière cohérente. package.json

Défaillances des requêtes HTTP

Réponse Cause courante Résolution
HTTP 400 Le client a utilisé une méthode HTTP non prise en charge ou a envoyé une demande que le terminal n'a pas pu traiter. Utilisez une méthode prise en charge et passez en revue les en-têtes et les limites des demandes dansRequêtes et réponses HTTP.
HTTP 403

L'autorisation d'une IamAuth demande a échoué pour l'une des raisons suivantes :

  • La demande n'est pas signée.

  • La demande omet l'en-tête de hachage de contenu requis.

  • La signature de la demande n'est pas valide.

  • L'appelant n'a pas l'autorisation. Pour les appels entre comptes, la politique d'identité ou la politique basée sur les ressources peuvent être absentes.

Vérifiez que la demande inclut l'X-Amz-Content-SHA256en-tête requis, vérifiez la signature et vérifiez lambda:InvokeWebFunctionEndpoint les politiques d'identité et de ressources requises. Pour les exigences de signature, voirSignature des requêtes. Pour les exigences en matière d'autorisation, voirOctroi d'une autorisation d'appel à un directeur.
HTTP 404 L'application ne définit pas l'itinéraire demandé ou le client utilise un domaine de point de terminaison obsolète. L'Hosten-tête peut également ne pas correspondre au domaine du point de terminaison. Si vous configurez une porte d'entrée telle qu'Amazon CloudFront pour transférer l'Hosten-tête du visiteur vers l'origine, Lambda renvoie cette erreur avec lambda-web-error-type set to. Platform.InvalidEndpoint Vérifiez le chemin actueldomainName, le chemin de la demande et les itinéraires de l'application. Utilisation lambda-web-error-type et journaux pour distinguer une réponse de plateforme d'une réponse d'application.
HTTP 409 Le point de terminaison ne l'est pasActive, ou le point de terminaison a été résolu selon une révision qui ne l'est pasActive. Inspectez la révision et l'état des terminaux. Si c'est le casPending, attendez et réessayez ; si c'est le casFailed, créez un nouveau point de terminaison. Pour les révisions, supprimez les révisions échouées ou inactives des pondérations des points de terminaison et créez une révision de remplacement si nécessaire.
HTTP 429

L'une des erreurs suivantes s'est produite :

  • La demande a dépassé une limite de débit pour les terminaux.

  • Le terminal a épuisé la capacité de l'environnement.

  • Le compte a atteint une limite de requêtes régionales ou de vCPU.

  • Trop d'environnements d'exécution s'initialisaient en même temps pour le point de terminaison.

Lisez l'lambda-web-error-typeen-tête pour identifier la limite appliquée. Consultez Types d'erreur liés aux fonctions Web. Passez en revue les mesures d'accélération (EndpointRequestThrottles,AccountRequestThrottles, etAccountActiveVCPUArm64Throttles)EndpointActiveEnvironmentThrottles, les mesures de capacité active, les paramètres des terminaux et les limites de compte appliquées. L'initialisation simultanée throttling (Platform.EndpointConcurrentInitThrottle) n'incrémente pas une métrique d'accélération. Réessayez uniquement les requêtes idempotentes, en utilisant backoff et jitter.
HTTP 502 Votre application a échoué avant de commencer à envoyer des requêtes, Lambda n'a pas pu préparer l'environnement d'exécution de votre fonction Web ou votre application a renvoyé une réponse non valide. Journaux d'utilisation lambda-web-error-type et du système pour identifier la cause. Consultez Types d'erreur liés aux fonctions Web.
HTTP 503 L'application s'est bloquée lors du traitement d'une demande, le point de terminaison est désactivé ou Lambda n'a pas pu obtenir de capacité ou accéder à l'application. Utilisezlambda-web-error-type, le cas échéant, les journaux des applications et du système pour identifier la cause. Consultez Types d'erreur liés aux fonctions Web. Un 503 dépourvu lambda-web-error-type peut indiquer un délestage temporaire ou une erreur interne. Dans les deux cas, réessayez les requêtes idempotentes avec backoff et jitter.
HTTP 504 L'application n'a pas répondu dans le délai de révision (Runtime.RequestTimeout). Vérifiez la révision timeoutSeconds et la latence en aval.
Autre HTTP 5xx L'application a renvoyé un statut 5xx, ou Lambda a rencontré une erreur interne (lambda-web-error-typeaucun en-tête). Utilisez l'ID de demande, l'en-tête du flux de données, les journaux de l'application et les journaux du système pour identifier la source et vérifier l'état du processus.
La demande se bloque ou expire en raison d'un téléchargement important ; les journaux indiquent que 0 octet n'a été reçu Le gestionnaire a commencé à écrire la réponse alors que le corps de la demande était encore en train d'arriver. Le chemin de requête de la fonction Web est semi-duplex : Lambda transmet le corps complet de la requête avant de fournir la réponse de votre application. Lisez le corps de la demande dans son intégralité avant de rédiger la réponse. Les boîtiers d'une taille inférieure à environ 1 Mo s'adaptent aux sockets buffers et peuvent masquer cela.

Limites des en-têtes de demande

Deux limites s'appliquent aux en-têtes de demande. Lambda limite le bloc d'en-tête à 128 KiB et rejette les demandes plus importantes avant qu'elles n'atteignent votre fonction. Le serveur Node.js HTTP de votre fonction limite également le nombre de lignes d'en-tête qu'il accepte. Les deux renvoient des champs d'en-tête de demande HTTP 431 trop grands, comme indiqué dans le tableau suivant. Pour les limites de la plateforme, voirLimites d'en-têtes.

Symptôme Cause Résolution
HTTP 431 aveclambda-web-error-type: Platform.HeaderTooLarge. Aucune invocation et aucune entrée dans le journal des applications. La tête de demande dépasse 131 072 octets (128 KiB), mesurée sur la tête de demande complète lorsque le client l'envoie. Réduisez la taille des en-têtes de demande. Cette limite ne peut pas être augmentée.
HTTP 431 avec lambda-web-request-id et lambda-web-logstream mais nonlambda-web-error-type. Le gestionnaire ne s'exécute pas. La demande comporte plus de 1 000 lignes d'en-tête reçues par le Node.js serveur, y compris les en-têtes ajoutés par Lambda. Augmentez server.maxHeadersCount le code de votre serveur ou réduisez le nombre de lignes d'en-tête envoyées par le client.

La limite de taille compte chaque octet de la tête de requête lorsque le client l'envoie. Cela inclut la ligne de requête, chaque ligne d'en-tête (y compris Host les en-têtes ajoutés par la bibliothèque cliente) et les terminateurs de ligne. Les en-têtes ajoutés par Lambda ne sont pas pris en compte dans la limite de taille.

Lorsqu'une demande dépasse la limite de taille, Lambda la rejette avant qu'elle n'atteigne votre fonction. La demande ne produit donc aucun appel ni entrée dans le journal de l'application. L'en-tête de lambda-web-error-type réponse identifie la cause.

La limite de Node.js nombre compte les lignes d'en-tête, et non les noms d'en-tête distincts. Un en-tête répété trois fois compte trois fois. Par conséquent, une demande qui accumule x-forwarded-for ou suit des en-têtes par le biais d'une chaîne de proxys peut atteindre la limite. Aucun en-tête ne doit paraître inhabituel pour que cela se produise. La limite est mesurée en fonction de la demande que reçoit votre fonction, qui inclut les en-têtes ajoutés par Lambda. Par conséquent, un client qui envoie un peu moins de 1 000 lignes d'en-tête peut l'atteindre. Lorsque cela se produit, la demande atteint votre environnement d'exécution et le Node.js serveur la rejette lors de l'analyse. Votre gestionnaire ne fonctionne pas. La réponse contient les lambda-web-logstream en-têtes lambda-web-request-id et, mais pas l'lambda-web-error-typeen-tête.

Si votre application doit accepter un nombre de lignes d'en-tête supérieur à celui Node.js autorisé par défaut, augmentez la Node.js limite dans le code de votre serveur. Définissez server.maxHeadersCount le nombre de lignes d'en-tête à accepter ou définissez-le 0 pour désactiver le contrôle du Node.js comptage. La limite de taille de 128 KiB s'applique toujours.

const server = http.createServer(handler); server.maxHeadersCount = 2000; server.listen(port, host);

Il n'est pas nécessaire de modifier la limite de taille de l'Node.jsen-tête. Les environnements d'Node.jsexécution gérés le définissent pour qu'il corresponde à la limite de plate-forme, de sorte que la limite de plate-forme s'applique à la taille de l'en-tête. Vous ne pouvez pas augmenter la limite de plate-forme à partir du code de l'application.

Pour respecter les limites, déplacez l'état en bloc hors des en-têtes vers le corps de la demande, supprimez les cookies et réduisez les en-têtes de proxy et de suivi redondants avant que la demande n'atteigne le point de terminaison. Si une CloudFront distribution se trouve devant le point de terminaison, transmettez uniquement les en-têtes dont votre application a besoin dans la politique de demande d'origine.

Types d'erreur liés aux fonctions Web

Lorsqu'une demande adressée à un point de terminaison Web Function échoue, Lambda renvoie un en-tête de lambda-web-error-type réponse qui identifie le problème. La valeur utilise le format <Prefix>.<ErrorReason> : le préfixe indique où l'erreur s'est produite, et la raison indique la cause.

Préfixe Où l'erreur s'est produite
Platform. La couche de plateforme de Lambda, qui achemine et valide les demandes, vérifie les autorisations et applique les limites.
Runtime. Le runtime géré qui charge et exécute votre fonction.
Application. Votre code de fonction.

Par exemple, Runtime.RequestTimeout cela signifie que le runtime géré a signalé que votre fonction n'a pas répondu dans le délai d'expiration configuré et Application.InitCodeError que votre propre code d'initialisation a généré une erreur.

Lambda inclut l'lambda-web-error-typeen-tête lorsque l'erreur a été provoquée par la demande elle-même ou par votre fonction, sa configuration ou son code. Lambda omet l'en-tête pour les erreurs de service internes et pour les échecs d'autorisation, de sorte qu'aucun détail n'est révélé à un appelant non autorisé. Une valeur indique un problème sur le chemin entre la plateforme Lambda et votre fonction. Sur le chemin de la demande, l'erreur identifie l'endroit où la demande a échoué. Sur le chemin de réponse, utilisez la valeur associée à la télémétrie de votre application pour comprendre ce qui s'est passé.

Error type (Type d'erreur) Description
Platform.MalformedRequest Lambda n'a pas pu analyser la demande, ou la ligne ou la méthode de demande n'ont pas été acceptées.
Platform.MissingHostHeader La demande n'incluait pas d'en-tête Host, Lambda n'a donc pas pu résoudre le point de terminaison cible.
Platform.InvalidEndpoint L'en-tête Host n'a pas été résolu vers un point de terminaison existant valide.
Platform.HeaderTooLarge La section d'en-tête de la demande a dépassé la limite de taille d'en-tête Lambda.
Platform.DisallowedHeader La demande contenait un en-tête que Lambda n'accepte pas. Lambda renvoie HTTP 400.
Platform.UnsupportedHttpVersion La requête utilisait une version HTTP autre que celle HTTP/1.1 requise par les fonctions Web.
Platform.CannotAssumeRole Lambda n'a pas pu assumer le rôle d'exécution de votre fonction.
Platform.KMSDecryptionError Lambda n'a pas pu utiliser la AWS KMS clé configurée pour déchiffrer vos variables d'environnement ou les autres données requises pour initialiser votre fonction.
Platform.InvalidNetworkConfiguration Une ressource réseau VPC dont dépend votre fonction n'est pas valide. Pour en trouver la cause, voirProblèmes de réseau et de connectivité.
Platform.RevisionNotActive La révision de fonction ciblée par la demande n'est pas à l'état Actif. La révision est peut-être toujours en cours d'activation ou n'a pas pu être activée. Vérifiez l'état de la révision ; si l'activation est toujours en cours, réessayez après un court laps de temps.
Platform.EndpointNotActive Le point de terminaison n'est pas dans l'état Actif. Le point de terminaison est peut-être toujours en cours de provisionnement ou peut être indisponible pour une autre raison. Vérifiez l'état du terminal ; s'il est toujours en cours de création, réessayez après un court laps de temps.
Platform.EndpointDisabled Le point de terminaison rateLimit étant 0, Lambda rejette toutes les demandes via HTTP 503. Définissez rateLimit une valeur différente de zéro pour reprendre le trafic.
Platform.AccountDisabled Les invocations de fonctions Web sont désactivées pour le compte. Lambda renvoie HTTP 403. Contacte AWS Support.
Platform.AccountRequestThrottle Le quota de taux de demandes au niveau du compte a été dépassé.
Platform.EndpointRequestThrottle Le quota de taux de demandes du point de terminaison a été dépassé.
Platform.AccountActiveVCPUArm64Throttle Le quota de vCPU actif du compte a été atteint.
Platform.EndpointMaxEnvThrottle La limite maximale d'environnements du point de terminaison a été atteinte.
Platform.EndpointConcurrentInitThrottle Trop d'environnements d'exécution s'initialisaient en même temps pour le point de terminaison. Réessayez avec un recul exponentiel.
Runtime.RequestTimeout Votre fonction n'a pas renvoyé de réponse dans le délai d'expiration configuré.
Runtime.OutOfMemory Votre fonction a dépassé sa limite de mémoire et le processus a été arrêté.
Runtime.Unreachable Le processus d'exécution s'est écrasé, a quitté ou a refusé la connexion.
Runtime.Exit Le processus d'exécution s'est terminé entre les demandes.
Runtime.ExitError Le processus d'exécution s'est terminé avec une erreur.
Runtime.InvalidResponse Les en-têtes de réponse du moteur d'exécution dépassaient la mémoire tampon de lecture.
Runtime.OriginRequestError Le processus de candidature a échoué lors du traitement d'une demande. Consultez les journaux des applications pour plus de détails.
Runtime.ImportCodeError Le moteur d'exécution n'a pas pu importer ou résoudre votre point d'entrée, par exemple un module manquant ou un chemin incorrect.
Runtime.InitTimeout Votre fonction a dépassé le délai d'initialisation lors du provisionnement du sandbox.
Application.InitCodeError Votre code d'initialisation a généré une erreur avant que la fonction ne commence à traiter les demandes.
Application.TimeoutListenError Votre code d'initialisation n'a pas commencé à écouter sur le port avant la date limite d'initialisation.

Pour les mesures de régulation qui identifient la limite appliquée (pour les typesPlatform.AccountRequestThrottle, Platform.EndpointRequestThrottlePlatform.AccountActiveVCPUArm64Throttle, et Platform.EndpointMaxEnvThrottle d'erreur), voir. Indicateurs régionaux d'utilisation et de limitation

Des journaux ou des statistiques sont manquants

  • Vérifiez que le rôle d'exécution peut créer des groupes de journaux et des flux et enregistrer les événements de journal à la fois pour le groupe de journaux de destination et pour son .local compagnon.

  • Recherchez dans le groupe de journaux centralisé de la région d'origine. Ne créez pas de diagnostics qui dépendent d'une région de réplication ou de groupes de .local journaux temporaires.

  • Réglez systemLogLevel le DEBUG moment où vous en avez besoinplatform.requestComplete.

  • Prévoyez un délai de transmission de la télémétrie après la création ou la mise à jour des ressources. Ne considérez pas l'absence temporaire d'une métrique ou d'un événement de journal comme la preuve qu'une demande n'a pas été exécutée.

  • N'oubliez pas que les indicateurs sont rares. Configurez les alarmes pour traiter les mesures d'erreur manquantes comme ne constituant pas une violation, le cas échéant.

Si aucun journal d'application n'apparaît, il est possible que le rôle d'exécution ne dispose pas CloudWatch des autorisations Amazon Logs. Attachez la politique AWSLambdaBasicExecutionRole gérée au rôle d'exécution, ou accordez logs:CreateLogGrouplogs:CreateLogStream, etlogs:PutLogEvents. Pour les autorisations requises, consultez Rôle d'exécution.

Problèmes de stockage et de chiffrement du code

Version d'objet Amazon S3 manquante ou inaccessible

Vérifiez que le contrôle de version du bucket est toujours activé, que la version exacte de l'objet existe et que l'appelant et le principal du service Lambda disposent des autorisations de lecture requises. Si une révision active perd l'accès à la version de l'objet épinglé, créez une nouvelle révision qui fait référence à une version disponible. Pour plus de détails, consultez Déploiement du code de fonction Web depuis Amazon S3.

AWS KMS échec d'accès

Vérifiez les autorisations de l'appelant, la politique en matière de clés, le contexte de chiffrement, l'état de la clé et l'autorisation du principal kms:Decrypt du service Lambda. Pour les points de PerRegion terminaison MultiRegion et les points de terminaison, vérifiez qu'une réplique de la AWS KMS clé multirégionale existe et qu'elle est utilisable dans chaque région cible. Pour plus de détails, consultez Chiffrement au repos pour les fonctions Web.

Problèmes liés MultiRegionaux PerRegionterminaux

Utilisez le regionalEndpoints champ pour identifier la région affectée. Comparez ses régions stateReason et updateStatusReason celles des régions saines. Vérifiez les quotas régionaux, les répliques AWS KMS clés, la disponibilité de l'environnement d'exécution et l'état de réplication de la révision. Après avoir corrigé la cause, répétez la mise à jour du terminal. Pour le modèle de réplication, voirMulti-Region déploiement.

Pour un MultiRegion point de terminaison, le routage basé sur la latence (qui dirige les demandes vers la région présentant la latence mesurée la plus faible) ne garantit pas que chaque demande soit dirigée vers la région à latence la plus faible. Effectuez un test à partir de l'emplacement du client concerné et inspectez les journaux de l'application pour déterminer quelle région a traité la demande. Pour un PerRegion point de terminaison, vérifiez également la configuration de votre DNS externe ou de votre routage frontal.

Problèmes de réseau et de connectivité

La plupart des problèmes de connectivité proviennent d'une révision de service qui ne contient aucune référence de connecteur ou qui fait référence à une ancienne version de connecteur, ou de sous-réseaux de connecteurs, de groupes de sécurité ou d'itinéraires qui bloquent le trafic.

Utilisez la séquence suivante pour isoler un problème de connectivité :

  1. Exécutez get-web-function-endpoint. Vérifiez le mode de déploiement automatique et confirmez quelles révisions reçoivent du trafic.

  2. Exécuter get-web-function-revision pour chaque révision de service. Vérifiez que son état est correct Active et qu'il fait référence à la version de connecteur attendue.

  3. Exécutez aws lambda-core get-network-connector --identifier avec l'ARN du connecteur indiqué dans la versionegressNetworkConnectorArn. Confirmez que State c'est le cas ACTIVE et, si le connecteur a été mis à jour, c'LastUpdateStatusest le casSuccessful. Sinon, utilisez StateReasonCode ou LastUpdateStatusReasonCode pour identifier la cause, telle que InsufficientRolePermissionsInvalidSubnet, ouSubnetOutOfIPAddresses.

  4. Testez la destination par adresse IP pour séparer l'accessibilité du réseau de la résolution DNS.

  5. Vérifiez les itinéraires du sous-réseau du connecteur, les groupes de sécurité de destination et les ACL du réseau.

  6. Consultez les journaux de flux VPC sur les sous-réseaux du connecteur.

Les symptômes courants sont les suivants.

SymptômeCheck
Internet public fonctionne, mais pas les ressources VPCLa version de service ne contient aucune référence de connecteur.
L'accès au VPC fonctionne pour certaines demandesLe point de terminaison est acheminé vers deux révisions avec des configurations de connecteur différentes.
Une mise à jour du connecteur n'a aucun effetLa version de service fait référence à une ancienne version du connecteur.
L'accès public s'arrête après l'ajout d'un connecteurLes sous-réseaux du connecteur ne disposent pas de la route NAT ou IPv6 requise.
Le délai d'expiration d'une destination VPCLe groupe de sécurité de destination, la table de routage ou l'ACL réseau bloquent la connexion.
Les journaux de flux ne contiennent aucun enregistrement correspondantLe trafic n'est pas entré dans le VPC. Vérifiez à nouveau la révision du service et la référence du connecteur.
Les noms privés échouent mais les connexions IP directes fonctionnentVérifiez les attributs DNS du VPC et les associations de zones hébergées privées.
IPv4 fonctionne mais IPv6 échoueVérifiez la version DualStack du connecteur, les routes IPv6 et les règles de sécurité IPv6.
La version de service est la mêmeActive, mais la fonction ne peut pas atteindre les ressources VPC privées La version de service ne définit pas de connecteur réseau de sortie (egressNetworkConnectorArn). Lisez le champ avec get-web-function-revision ; s'il est vide, créez une révision qui définitegressNetworkConnectorArn. Pour plus de détails, consultez Configuration de la mise en réseau pour AWS Lambda Fonctions Web.

Il n'existe aucun accès interactif à un environnement d'exécution de fonctions Web. Utilisez les journaux des applications, les en-têtes de réponse des points de terminaison, les champs d'état des ressources, CloudWatch les métriques et les journaux de flux VPC pour diagnostiquer les défaillances.

Préparer un bundle d'escalade

Si les vérifications précédentes ne permettent pas d'identifier la cause, collectez les informations suivantes avant d'ouvrir un AWS Support dossier. Cela permet à l'ingénieur de support de corréler le fonctionnement du plan de contrôle, le déploiement régional, les demandes et la télémétrie :

  • L' Compte AWS ID, la région d'origine, le nom de la fonction, l'ID de révision, le nom du point de terminaison, le type de point de terminaison et les régions cibles.

  • L'horodatage UTC et le chemin de demande pour les échecs représentatifs, ainsi que les en-têtes de lambda-web-error-type réponse HTTP et de statut. lambda-web-request-id lambda-web-logstream

  • La fonction, la révision, le point de terminaison et les updateStatusReason valeurs régionales state stateReasonupdateStatus,, et.

  • Les événements pertinents du journal centralisé des applications et du système, les indicateurs de vitesse et de capacité, ainsi que le taux de trafic approximatif au moment où le problème s'est produit.

  • La AWS CLI version et une copie expurgée de la demande de gestion. Supprimez les informations d'identification, les secrets d'application, les jetons et les données de demande sensibles.