Configurer une intégration de proxy Lambda avec le streaming des réponses de charge utile dans API Gateway - Amazon API Gateway

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.

Configurer une intégration de proxy Lambda avec le streaming des réponses de charge utile dans API Gateway

Vous pouvez diffuser la réponse d'une fonction Lambda pour améliorer les performances du délai d'obtention du premier octet (TTFB) et renvoyer des réponses partielles au client dès qu'elles sont disponibles. API Gateway nécessite que vous utilisiez l'API InvokeWithResponseStreamLambda pour appeler votre fonction Lambda. API Gateway transmet un objet d'événement à la fonction Lambda. La fonction Lambda du backend analyse les données de la demande entrante pour déterminer la réponse qu’elle renvoie. Pour qu'API Gateway diffuse la sortie Lambda, la fonction Lambda doit générer le format requis par API Gateway.

Différences entre les intégrations de proxy Lambda entre le mode de transfert de réponse en flux et le mode de transfert de réponse en mémoire tampon

La liste suivante décrit les différences entre une intégration de proxy Lambda et une intégration de proxy Lambda pour le streaming de réponses :

  • API Gateway utilise l'InvokeWithResponseStreamAPI pour appeler l'intégration du proxy Lambda pour le streaming des réponses. Il en résulte un URI différent, qui est le suivant :

    arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations

    Cet ARN utilise une date différente pour la version de l'API et une action de service différente par rapport à l'intégration du proxy Lambda.

    Si vous utilisez la console API Gateway pour le streaming des réponses, la console utilise l'URI qui vous convient.

  • Dans le cadre d'une intégration de proxy Lambda, API Gateway envoie la réponse au client uniquement après avoir reçu la réponse complète de Lambda. Dans une intégration de proxy Lambda pour le streaming des réponses, API Gateway lance le flux de charge utile après avoir reçu les métadonnées et le délimiteur valides de Lambda.

  • L'intégration du proxy Lambda pour le streaming des réponses utilise le même format d'entrée que l'intégration du proxy, mais elle nécessite un format de sortie différent.

Format d'intégration du proxy Lambda pour le streaming des réponses

Lorsqu'API Gateway invoque une fonction Lambda avec flux de réponse, le format d'entrée est le même que celui d'une fonction Lambda pour l'intégration de proxy. Pour de plus amples informations, veuillez consulter Format d’entrée d’une fonction Lambda pour l’intégration de proxy.

Lorsque Lambda diffuse une réponse à API Gateway, la réponse doit respecter le format suivant. Ce format utilise un délimiteur pour séparer les métadonnées JSON de la charge utile brute. Dans ce cas, les données de charge utile sont diffusées telles qu'elles sont transmises par votre fonction Lambda de streaming :

{ "headers": {"headerName": "headerValue", ...}, "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... }, "cookies" : ["cookie1", "cookie2"], "statusCode": httpStatusCode }<DELIMITER>PAYLOAD1 | PAYLOAD2 | PAYLOAD3

Dans la sortie :

  • Les statusCode touches headersmultiValueHeaders,cookies, et peuvent ne pas être spécifiées si aucun en-tête de réponse supplémentaire ne doit être renvoyé.

  • La clé headers ne peut contenir que des en-têtes à valeur unique.

  • La sortie s'attend à ce que les en-têtes contiennent l'un Transfer-Encoding: chunked ou Content-length: number l'autre. Si votre fonction ne renvoie aucun de ces en-têtes, API Gateway les ajoute Transfer-Encoding: chunked à l'en-tête de réponse.

  • La clé multiValueHeaders peut contenir des en-têtes à valeurs multiples, ainsi que des en-têtes à valeur unique. Vous pouvez utiliser la clé multiValueHeaders pour spécifier l’ensemble de vos en-têtes supplémentaires, y compris n’importe quel en-tête à valeur unique.

  • Si vous spécifiez des valeurs pour headers et multiValueHeaders, API Gateway les fusionne en une seule liste. Si la même paire clé-valeur est spécifiée dans les deux, seules les valeurs de multiValueHeaders s’afficheront dans la liste fusionnée.

  • Les métadonnées doivent être au format JSON valide. Seulement headersmultiValueHeaders, cookies et les statusCode touches sont prises en charge.

  • Vous devez fournir un délimiteur après le JSON des métadonnées. Le délimiteur doit être de 8 octets nuls et doit apparaître dans les 16 premiers Ko de données de flux.

  • API Gateway ne nécessite pas de format spécifique pour la charge utile de réponse de la méthode.

Si vous utilisez une URL de fonction pour diffuser votre fonction Lambda, vous devez modifier l'entrée et la sortie de votre fonction Lambda pour répondre à ces exigences.

Si la sortie de votre fonction Lambda ne répond pas aux exigences de ce format, API Gateway peut toujours appeler votre fonction Lambda. Le tableau suivant présente les combinaisons de paramètres de demande d'intégration d'API et de code de fonction Lambda pris en charge par API Gateway. Cela inclut les combinaisons prises en charge pour le mode de transfert des réponses en mode tampon.

Mode de transfert de réponse Le code de fonction est conforme au format requis API d'appel Lambda Pris en charge par API Gateway

Stream

Oui

InvokeWithResponseStream

Oui. API Gateway diffuse votre réponse.

Stream

Non

InvokeWithResponseStream

Non. API Gateway appelle votre fonction Lambda et renvoie une réponse d'erreur 500.

Stream

Oui

Invoke

Non. API Gateway ne prend pas en charge cette configuration d'intégration.

Stream

Non

Invoke

Non. API Gateway ne prend pas en charge cette configuration d'intégration.

Buffé

Oui

InvokeWithResponseStream

Non. API Gateway ne prend pas en charge cette configuration d'intégration.

Buffé

Non

InvokeWithResponseStream

Non. API Gateway ne prend pas en charge cette configuration d'intégration.

Buffé

Oui

Invoke

API Gateway renvoie les en-têtes HTTP et le code d'état, mais pas le corps de la réponse.

Buffé

Non

Invoke

Oui. Il s'agit d'une intégration de proxy Lambda. Pour plus d'informations, consultez la section Intégration du proxy Lambda.