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 exécutions personnalisées des fonctions d'événement Lambda afin de recevoir les é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 qui utilisent le fournisseur de capacité par défaut Lambda. La principale différence réside dans le fait que les instances gérées peuvent accepter /next des /response demandes simultanées et jusqu'à la AWS_LAMBDA_MAX_CONCURRENCY limite configurée. Cela permet de traiter plusieurs appels simultanément au sein d'un même environnement d'exécution. 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éthode – GET

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 identifiants de demande, ou Lambda les génère automatiquement lors de l'ingestion. Un identifiant de demande unique 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-Id – En-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, les données relatives à l'application client et à l'appareil.

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

  • Lambda-Runtime-Invocation-Id— Un 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 gelé pendant plusieurs secondes.

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

Un ID d'appel (Lambda-Runtime-Invocation-Id) représente une tentative d'invocation unique pour un événement. Un identifiant de demande unique peut entraîner plusieurs tentatives d'invocation, chacune ayant son propre identifiant d'appel unique. Lambda utilise chaque ID d'appel une seule fois et ne le réutilise jamais. Réactivez cette valeur /response et /error appelez. L'en-tête est facultatif pour des raisons de rétrocompatibilité avec les environnements d'exécution existants ; son omission ne déclenche pas de rejet. Lambda rejette uniquement with 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 le lit pour obtenir les identifiants et déterminer s'il convient de suivre la demande.

Réponse d’invocation

Chemin – /runtime/invocation/AwsRequestId/response

Méthode – POST

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'invocation active.

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éthode – POST

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> dans lequel Category est Runtime ou Function et Reason commence par une lettre 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 d'erreur. ErrorResponse contient un type d'erreur et un message d'erreur.

Codes de réponse
  • 202 – Accepté

  • 403 – Interdit

  • 500 — Erreur du 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éthode – POST

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'invocation active.

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 d'erreur. 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 du 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éthode – GET

Une fois les hooks antérieurs à la capture d'écran terminés, le moteur d'exécution appelle. GET /runtime/restore/next Il s'agit d'un appel de blocage de type itérateur, similaire à/runtime/invocation/next, qui indique à Lambda que le moteur d'exécution est prêt pour la capture instantanée de l'environnement d'exécution. La requête est bloquée 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 les 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 l'autorise /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 irré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 pour toute autre). Il s'agit d'un appel de blocage de type itérateur ; Lambda bloque l'environnement d'exécution pendant que la requête est ouverte. La demande peut rester ouverte pendant toute la durée de vie du snapshot (potentiellement 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éthode – POST

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> dans lequel Category est Runtime ou Function et Reason commence par une lettre 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 l'autorise /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 irrécupérable. Quittez le processus d'exécution.

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