View a markdown version of this page

Utilisation de l’API de l’environnement d’exécution Lambda pour des environnements d’exécution personnalisés - 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.

Utilisation de l’API de l’environnement d’exécution Lambda pour des environnements d’exécution personnalisés

AWS Lambda fournit une API HTTP pour les environnements d'exécution personnalisés afin de recevoir des événements d'invocation de Lambda et de renvoyer les données de réponse dans l'environnement d'exécution Lambda. Cette section contient la référence de l’API de l’environnement d’exécution Lambda.

Les instances gérées Lambda prennent en charge les demandes simultanées

Les instances gérées Lambda utilisent la même API d'exécution que les fonctions Lambda (par défaut). La principale différence réside dans le fait que les instances gérées peuvent accepter des demandes simultanées /next et /response des demandes allant jusqu'à la AWS_LAMBDA_MAX_CONCURRENCY limite configurée. Cela permet de traiter plusieurs appels simultanément dans un environnement d'exécution unique. Pour plus d'informations sur les instances gérées, consultezComprendre l'environnement d'exécution des instances gérées Lambda.

Diagramme d’architecture de l’environnement d’exécution.

La spécification OpenAPI pour la version d’API de l’exécution 2018-06-01 est disponible dans runtime-api.zip

Pour créer une URL de requête d’API, les exécutions obtiennent le point de terminaison de l’API à partir de la variable d’environnement AWS_LAMBDA_RUNTIME_API et ajoutent la version de l’API ainsi que le chemin d’accès de ressource souhaité.

Exemple Demande
curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next"

Invocation suivante

Chemin/runtime/invocation/next

MéthodeGET

L’exécution envoie ce message à Lambda pour demander un événement d’invocation. Le corps de la réponse contient la charge utile provenant de l’invocation, qui est un document JSON contenant les données d’événements du déclencheur de la fonction. Les en-têtes de la réponse contiennent des données supplémentaires sur l’invocation.

En-têtes de réponse
  • Lambda-Runtime-Aws-Request-Id— L'événement qui a déclenché l'invocation de la fonction. Les sources d'événements fournissent des ID de demande, ou Lambda les génère automatiquement lors de l'ingestion. Un seul identifiant de demande peut entraîner plusieurs tentatives d'invocation. Utilisez-le dans le chemin de l'URL lors de l'envoi de la réponse ou de l'erreur.

    Par exemple, 8476a536-e9f4-11e8-9739-2dfe598c3fcd.

  • Lambda-Runtime-Deadline-Ms – Date à laquelle la fonction expire, exprimée en millisecondes au format horaire Unix.

    Par exemple, 1542409706888.

  • Lambda-Runtime-Invoked-Function-Arn – ARN de la fonction Lambda, de la version ou de l’alias spécifiés dans l’invocation.

    Par exemple, arn:aws:lambda:us-east-2:123456789012:function:custom-runtime.

  • Lambda-Runtime-Trace-IdEn-tête de suivi AWS X-Ray.

    Par exemple, Root=1-5bef4de7-ad49b0e87f6ef6c87fc2e700;Parent=9a9197af755a6419;Sampled=1.

  • Lambda-Runtime-Client-Context— Pour les appels depuis le SDK AWS mobile, données relatives à l'application cliente et à l'appareil.

  • Lambda-Runtime-Cognito-Identity— Pour les appels depuis le SDK AWS mobile, données relatives au fournisseur d'identité Amazon Cognito.

  • Lambda-Runtime-Invocation-Id— Identifiant unique pour cette tentative d'invocation.

Ne définissez pas de délai d’expiration pour la demande GET, car la réponse peut être retardée. Entre le moment où Lambda démarre le moteur d'exécution et le moment où celui-ci doit renvoyer un événement, le processus d'exécution peut être bloqué pendant plusieurs secondes.

Un ID de demande (Lambda-Runtime-Aws-Request-Id) identifie un événement unique. Les ID de demande sont fournis par les sources d'événements ou générés automatiquement par Lambda lors de l'ingestion. Utilisez l'ID de demande dans le chemin de l'URL lors de l'envoi de la réponse ou de l'erreur.

Un ID d'invocation (Lambda-Runtime-Invocation-Id) représente une seule tentative d'invocation pour un événement. Un seul identifiant de demande peut entraîner plusieurs tentatives d'invocation, chacune ayant son propre identifiant d'appel unique. Lambda utilise chaque identifiant d'appel exactement une fois et ne le réutilise jamais. Réactivez cette valeur /response et lancez les /error appels. L'en-tête est facultatif pour des raisons de compatibilité descendante avec les environnements d'exécution existants. Son omission n'entraîne pas de rejet. Lambda rejette uniquement 400 InvalidInvocationId lorsque l'en-tête est présent mais que sa valeur ne correspond pas à l'invocation active.

L’en-tête de suivi contient l’ID de suivi, l’ID parent et la décision d’échantillonnage. Si la demande est échantillonnée, elle a été échantillonnée par Lambda ou un service en amont. Le runtime doit définir l’_X_AMZN_TRACE_ID avec la valeur de l’en-tête. Le X-Ray SDK lit ceci pour obtenir les identifiants et déterminer s'il faut suivre la demande.

Réponse d’invocation

Chemin/runtime/invocation/AwsRequestId/response

MéthodePOST

Une fois l’exécution de la fonction terminée, le runtime envoie une réponse à l’invocation à Lambda. Pour les invocations synchrones, Lambda envoie la réponse au client.

En-têtes de demandes

Lambda-Runtime-Invocation-Id— Renvoie la valeur reçue de/next. Lambda rejette la demande 400 InvalidInvocationId si la valeur ne correspond pas à l'appel actif.

Exemple demande d’opération réussie
REQUEST_ID=156cb537-e2d4-11e8-9b34-d36013741fb9 INVOCATION_ID=<value from Lambda-Runtime-Invocation-Id response header> curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response" -d "SUCCESS" --header "Lambda-Runtime-Invocation-Id: $INVOCATION_ID"

Erreur d’initialisation

Si la fonction renvoie une erreur ou si le runtime rencontre une erreur lors de l’initialisation, le runtime utilise cette méthode pour signaler l’erreur à Lambda.

Chemin/runtime/init/error

MéthodePOST

En-têtes

Lambda-Runtime-Function-Error-Type : le type d’erreur que l’exécution a rencontré. Cet en-tête est facultatif. Lambda accepte n'importe quelle valeur de chaîne ; nous vous recommandons d'utiliser le format<Category.Reason>, où Category est Runtime ou Function et Reason commence par une majuscule. Par exemple :

  • Runtime.NoSuchHandler

  • Runtime.APIKeyNotFound

  • Runtime.ConfigInvalid

  • Runtime.BeforeSnapshotError(pour SnapStart)

  • Runtime.UnknownReason

Les valeurs qui ne correspondent pas à ce modèle sont normalisées à Runtime.Unknown ouFunction.Unknown.

Paramètres de corps

ErrorRequest : informations sur l’erreur. Requis : non.

Ce champ est un objet JSON avec la structure suivante :

{ errorMessage: string (text description of the error), errorType: string, stackTrace: array of strings }

Notez que Lambda accepte n’importe quelle valeur pour errorType.

L’exemple suivant montre un message d’erreur de fonction Lambda indiquant que la fonction n’a pas pu analyser les données d’événement fournies dans l’invocation.

Exemple Erreur de fonction
{ "errorMessage" : "Error parsing event data.", "errorType" : "InvalidEventDataException", "stackTrace": [ ] }
Paramètres du corps de la réponse
  • StatusResponse – String. Informations d’état, envoyées avec les codes de réponse 202.

  • ErrorResponse— Informations d'erreur supplémentaires, envoyées avec les codes de réponse aux erreurs. ErrorResponse contient un type d'erreur et un message d'erreur.

Codes de réponse
  • 202 – Accepté

  • 403 – Interdit

  • 500 — Erreur de conteneur. Non-recoverable état. L’environnement d’exécution doit se terminer rapidement.

Exemple demande d’erreur d’initialisation
ERROR="{\"errorMessage\" : \"Failed to load function.\", \"errorType\" : \"InvalidFunctionException\"}" curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/init/error" -d "$ERROR" --header "Lambda-Runtime-Function-Error-Type: Unhandled"

Erreur d’invocation

Si la fonction renvoie une erreur ou si le runtime rencontre une erreur, le runtime utilise cette méthode pour signaler l’erreur à Lambda.

Chemin/runtime/invocation/AwsRequestId/error

MéthodePOST

En-têtes

Lambda-Runtime-Function-Error-Type – Type d’erreur que l’environnement d’exécution a rencontré. Requis : non.

Cet en-tête se compose d’une valeur de chaîne. Lambda accepte n’importe quelle chaîne, mais nous recommandons le format <category.reason>. Par exemple :

  • Runtime.NoSuchHandler

  • Runtime.APIKeyNotFound

  • Runtime.ConfigInvalid

  • Runtime.UnknownReason

Lambda-Runtime-Invocation-Id— Renvoie la valeur reçue de/next. Lambda rejette la demande 400 InvalidInvocationId si la valeur ne correspond pas à l'appel actif.

Paramètres de corps

ErrorRequest : informations sur l’erreur. Requis : non.

Ce champ est un objet JSON avec la structure suivante :

{ errorMessage: string (text description of the error), errorType: string, stackTrace: array of strings }

Notez que Lambda accepte n’importe quelle valeur pour errorType.

L’exemple suivant montre un message d’erreur de fonction Lambda indiquant que la fonction n’a pas pu analyser les données d’événement fournies dans l’invocation.

Exemple Erreur de fonction
{ "errorMessage" : "Error parsing event data.", "errorType" : "InvalidEventDataException", "stackTrace": [ ] }
Paramètres du corps de la réponse
  • StatusResponse – String. Informations d’état, envoyées avec les codes de réponse 202.

  • ErrorResponse— Informations d'erreur supplémentaires, envoyées avec les codes de réponse aux erreurs. ErrorResponse contient un type d'erreur et un message d'erreur.

Codes de réponse
  • 202 – Accepté

  • 400 – Demande erronée.

  • 403 – Interdit

  • 500 — Erreur de conteneur. Non-recoverable état. L’environnement d’exécution doit se terminer rapidement.

Exemple demande d’erreur
REQUEST_ID=156cb537-e2d4-11e8-9b34-d36013741fb9 ERROR="{\"errorMessage\" : \"Error parsing event data.\", \"errorType\" : \"InvalidEventDataException\"}" curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/error" -d "$ERROR" --header "Lambda-Runtime-Function-Error-Type: Unhandled"

After-Restore (applicable uniquement pour SnapStart)

Chemin/runtime/restore/next

MéthodeGET

Une fois les hooks antérieurs à la capture d'écran terminés, le moteur d'exécution appelleGET /runtime/restore/next. Il s'agit d'un appel de blocage de type itérateur, similaire à/runtime/invocation/next, qui signale à Lambda que le moteur d'exécution est prêt pour la capture instantanée de l'environnement d'exécution. La requête se bloque jusqu'à ce que Lambda restaure l'environnement d'exécution à partir d'un instantané, puis renvoie une réponse HTTP 200 avec un corps vide.

En-têtes

Aucun en-tête n'est requis.

Codes de réponse
  • 200 — Lambda a restauré l'environnement d'exécution. Exécutez des hooks après restauration. Le corps de la réponse est vide.

  • 403 — Interdit. L'environnement d'exécution n'est pas dans un état qui le permet /restore/next (par exemple, le moteur d'exécution a déjà appelé /invocation/next ou/restore/next).

  • 404 — n' SnapStart est pas activé pour cette fonction.

  • 500 – Erreur de conteneur. L'environnement d'exécution est dans un état non récupérable. Quittez le processus d'exécution.

Syntaxe de demande
GET /2018-06-01/runtime/restore/next HTTP/1.1 Host: ${AWS_LAMBDA_RUNTIME_API}
Syntaxe de réponse
HTTP/1.1 200 OK Content-Length: 0
Note

Ne définissez pas de socket côté client ni de délai de lecture pour cette demande d'API Runtime (ou toute autre). Il s'agit d'un appel de blocage de type itérateur ; Lambda gèle l'environnement d'exécution lorsque la demande est ouverte. La demande peut rester ouverte pendant toute la durée de vie du snapshot (éventuellement des jours, des semaines ou plus) sans que la connexion ne soit considérée comme inactive par le service Lambda.

Erreur de restauration (applicable uniquement pour SnapStart)

Si un hook après restauration échoue ou si le moteur d'exécution rencontre une erreur lors de la restauration, le moteur d'exécution utilise cette méthode pour signaler l'erreur à Lambda. Lambda échoue à l'invocation en vol et détruit l'environnement d'exécution.

Chemin/runtime/restore/error

MéthodePOST

En-têtes

Lambda-Runtime-Function-Error-Type : le type d’erreur que l’exécution a rencontré. Cet en-tête est facultatif. Lambda accepte n'importe quelle valeur de chaîne ; nous vous recommandons d'utiliser le format<Category.Reason>, où Category est Runtime ou Function et Reason commence par une majuscule (par exemple,Runtime.AfterRestoreError). Les valeurs qui ne correspondent pas à ce modèle sont normalisées à Runtime.Unknown ouFunction.Unknown.

Codes de réponse
  • 202 — Acceptée. Le corps de réponse est{"status":"OK"}. Le moteur d'exécution doit quitter le processus.

  • 403 — Interdit. L'environnement d'exécution n'est pas dans un état qui le permet /restore/error (par exemple, /restore/next il n'a pas été appelé).

  • 404 — n' SnapStart est pas activé pour cette fonction.

  • 500 – Erreur de conteneur. L'environnement d'exécution est dans un état non récupérable. Quittez le processus d'exécution.

Exemple Exemple de demande
POST /2018-06-01/runtime/restore/error HTTP/1.1 Host: ${AWS_LAMBDA_RUNTIME_API} Lambda-Runtime-Function-Error-Type: Runtime.AfterRestoreError
Exemple Exemple de réponse
HTTP/1.1 202 Accepted Content-Type: application/json {"status":"OK"}