Erreurs, délais d'attente et tentatives
Comment lire ce que invoke renvoie en cas de problème et quand vous pouvez rappeler en toute sécurité.
1. L'objet d'erreur
invoke renvoie { data, error } et ne lance jamais. error est un AuraError, donc isAuraError(error) est vrai. Deux sous-classes vous indiquent qui a échoué:
| Champ | Signification |
|---|---|
error.status | Statut HTTP. 0 signifie que l'échec s'est produit sur le client (pas de réponse). |
error.code | Identifiant stable, par exemple NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body. |
error.message | Le texte renvoyé par votre fonction ou l'explication de la plateforme. |
error.context | Sur un FunctionsHttpError: le corps renvoyé par votre fonction (JSON ou texte analysé). |
error.details | Le corps d’erreur brut. Pour une erreur de plateforme, il contient error.request_id. |
2. De quelle erreur s’agit-il ?
Comportements observés par rapport à une pile en cours d’exécution. La ligne de quota suit le mappage des erreurs du backend et n'a pas été déclenchée lors de nos tests.
| Que s'est-il passé | Classe | status | code | message |
|---|---|---|---|---|
| La fonction n'existe pas | FunctionsHttpError | 404 | NOT_FOUND | "…Fonction 'non' introuvable" |
Votre fonction renvoie 500 avec du texte | FunctionsHttpError | 500 | http_500 | ce texte |
Votre fonction renvoie elle-même 503 | FunctionsHttpError | 503 | http_503 | ce que tu as rendu |
| Votre fonction lance | FunctionsHttpError | 500 | http_500 | "Erreur interne du serveur" |
Votre fonction dépasse son timeout_secs | FunctionsHttpError | 500 ou 503 | http_500 / http_503 | "L'exécution de la fonction a échoué" ou "La fonction a renvoyé HTTP 503" |
| Le runtime est inaccessible | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | explique que la fonction était et non exécutée |
| Le réseau échoue avant toute réponse | FunctionsRelayError | 0 | network_error | l'erreur réseau |
| Quota du plan épuisé | FunctionsHttpError | 403 | QUOTA_EXCEEDED | le message des quotas |
| Trop d'appels d'un client | FunctionsHttpError | 429 | rate_limit_exceeded | message d'attente |
| Corps de la demande trop grand | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | "taille maximale de la charge utile dépassée" |
Vous avez annulé ou votre timeout est écoulé | AuraError | 0 | timeout | "Invocation de fonction interrompue ou expirée" |
| Le corps ne peut pas être envoyé en JSON | AuraError | 0 | invalid_body | nomme le type à éviter |
Si votre propre code renvoie 502, 503 ou 504, vous obtenez un FunctionsHttpError: la classe vous indique qui a répondu, pas quel est le numéro de statut.
3. Décidez si vous devez réessayer
Le SDK ne relance jamais une invocation à votre place : votre fonction peut avoir des effets secondaires et un POST répété n'est pas sûr par défaut. Vous décidez, à l’aide du tableau ci-dessous.
| Échec | La fonction a-t-elle été exécutée ? | Vous pouvez réessayer en toute sécurité ? |
|---|---|---|
503 depuis la plateforme (FunctionsRelayError) | Non, le runtime était inaccessible | Oui, avec un court recul |
429 | Non | Oui, après le délai de error.retryAfter |
403 QUOTA_EXCEEDED | Non | Non, jusqu'à ce que le quota soit réinitialisé ou que vous changiez de forfait |
status 0 (network_error) | Inconnu | Uniquement si votre fonction est idempotente |
timeout sur le client | Inconnu | Uniquement si votre fonction est idempotente |
FunctionsHttpError 5xx | Oui, partiellement ou entièrement | Uniquement si votre fonction est idempotente |
FunctionsHttpError 4xx | Oui | Non : corrigez la demande |
La plateforme ne déduplique pas les appels et ignore Idempotency-Key. Pour les paiements ou les e-mails, stockez une clé que vous passez dans body et vérifiez-la au démarrage de la fonction.
4. Délais d'attente
Trois horloges fonctionnent en même temps :
| Horloge | Par défaut | Où le changer |
|---|---|---|
| Votre client | 30 s pour chaque responseType | invoke(…, { timeout }), { signal } ou requestTimeoutMs dans les options client |
| La fonction | 30 s, entre 1 et 300 | permissions.timeout_secs sur la fonction |
| La passerelle | 380 s | non configurable par projets |
Lorsque la fonction dépasse timeout_secs, le runtime l'annule et votre appel échoue après environ ce délai, avec le 500 ou 503 indiqué ci-dessus. La cause apparaît dans error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) en mode brut. Définissez votre client timeout légèrement au-dessus du timeout_secs de la fonction pour voir cette erreur au lieu d'un client timeout.
Pour un travail de plus de quelques secondes, met en file d'attente une tâche au lieu de maintenir une connexion ouverte.
5. Trouvez la cause
- Les erreurs de plate-forme portent un identifiant de demande :
error.details.error.request_id. Citez-le lorsque vous contactez le support. aura functions logs <name>répertorie les requêtes HTTP récentes avec la méthode, le chemin, le statut, la durée et l'identifiant de la requête. et non montrent ce que votre fonction a écrit avecconsole.logouconsole.error: cette sortie reste dans les propres journaux du runtime, que seul l'opérateur de la plate-forme peut lire. Voir les limites pour cela et les autres écarts de courant.- L'identifiant de l'appel n'est pas transmis à votre fonction. Transmettez votre propre identifiant dans
headerset enregistrez-le.