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
-
Obtenez la fonction Web, la révision et le point de terminaison. Enregistrez chaque
state,stateReasonupdateStatus, et chaqueupdateStatusReasonvaleur.aws lambda-web get-web-function \ --function-namemy-web-appaws lambda-web get-web-function-revision \ --function-namemy-web-app\ --revision-idrevision-idaws lambda-web get-web-function-endpoint \ --function-namemy-web-app\ --endpoint-nameprodmy-web-appRemplacez-le par le nom de votre fonction,revision-idpar la révision à inspecter etprodpar le nom de votre point de terminaison. -
Envoyez une demande et enregistrez le code d'état et les en-têtes de réponse.
curl --include https://endpoint-domain/pathL'
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. -
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.
-
Pour les
PerRegionterminauxMultiRegionet les terminaux, inspectez chaque entrée.regionalEndpointsUn é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/ 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
|
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 :
|
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
.localcompagnon. -
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
.localjournaux temporaires. -
Réglez
systemLogLevelleDEBUGmoment 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:Decryptdu service Lambda. Pour les points dePerRegionterminaisonMultiRegionet 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é :
Exécutez
get-web-function-endpoint. Vérifiez le mode de déploiement automatique et confirmez quelles révisions reçoivent du trafic.Exécuter
get-web-function-revisionpour chaque révision de service. Vérifiez que son état est correctActiveet qu'il fait référence à la version de connecteur attendue.Exécutez
aws lambda-core get-network-connector --identifieravec l'ARN du connecteur indiqué dans la versionegressNetworkConnectorArn. Confirmez queStatec'est le casACTIVEet, si le connecteur a été mis à jour, c'LastUpdateStatusest le casSuccessful. Sinon, utilisezStateReasonCodeouLastUpdateStatusReasonCodepour identifier la cause, telle queInsufficientRolePermissionsInvalidSubnet, ouSubnetOutOfIPAddresses.Testez la destination par adresse IP pour séparer l'accessibilité du réseau de la résolution DNS.
Vérifiez les itinéraires du sous-réseau du connecteur, les groupes de sécurité de destination et les ACL du réseau.
Consultez les journaux de flux VPC sur les sous-réseaux du connecteur.
Les symptômes courants sont les suivants.
| Symptôme | Check |
|---|---|
| Internet public fonctionne, mais pas les ressources VPC | La version de service ne contient aucune référence de connecteur. |
| L'accès au VPC fonctionne pour certaines demandes | Le point de terminaison est acheminé vers deux révisions avec des configurations de connecteur différentes. |
| Une mise à jour du connecteur n'a aucun effet | La 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 connecteur | Les sous-réseaux du connecteur ne disposent pas de la route NAT ou IPv6 requise. |
| Le délai d'expiration d'une destination VPC | Le 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 correspondant | Le 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 fonctionnent | Vérifiez les attributs DNS du VPC et les associations de zones hébergées privées. |
| IPv4 fonctionne mais IPv6 échoue | Vé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-typeréponse HTTP et de statut.lambda-web-request-idlambda-web-logstream -
La fonction, la révision, le point de terminaison et les
updateStatusReasonvaleurs régionalesstatestateReasonupdateStatus,, 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.