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.
Lorsque vous configurez le streaming de la charge utile de réponse, vous spécifiez le mode de transfert dans la demande d'intégration de votre ressource. Vous configurez ces paramètres dans la demande d'intégration pour contrôler le comportement d'API Gateway avant et pendant la réponse d'intégration.
Exemples de fonctions Lambda pour le streaming des réponses
Votre fonction Lambda doit respecter le. Format d'intégration du proxy Lambda pour le streaming des réponses Nous vous recommandons d'utiliser l'un des trois exemples de fonctions Lambda pour tester le streaming des réponses. Lorsque vous créez votre fonction Lambda, veillez à effectuer les opérations suivantes :
-
Prévoyez un délai d'attente suffisant pour votre fonction. Nous vous recommandons de configurer un délai d'au moins 1 minute pour en savoir plus sur le streaming des réponses. Lorsque vous créez vos ressources de production, assurez-vous que le délai d'expiration de votre fonction Lambda couvre l'ensemble du cycle de demande. Pour plus d'informations, voir Configurer le délai d'expiration de la fonction Lambda.
-
Utilisez le dernier moteur d'exécution de Node.js.
Utilisez une région dans laquelle le streaming des réponses Lambda est disponible.
- Using HttpResponseStream.from
-
L'exemple de code suivant renvoie les objets de métadonnées JSON et les charges utiles au client à l'aide de la awslambda.HttpResponseStream() méthode sans utiliser la méthode du pipeline. Il n'est pas nécessaire de créer le délimiteur. Pour plus d'informations, consultez la section Écrire des fonctions Lambda compatibles avec le streaming des réponses.
export const handler = awslambda.streamifyResponse(
async (event, responseStream, context) => {
const httpResponseMetadata = {
"statusCode": 200,
"headers": {
"x-foo": "bar"
},
"multiValueHeaders": {
"x-mv1": ["hello", "world"],
"Set-Cookie": ["c1=blue", "c2=red"]
}
};
responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
await new Promise(r => setTimeout(r, 1000)); // synthetic delay
responseStream.write("First payload ");
await new Promise(r => setTimeout(r, 1000)); // synthetic delay
responseStream.write("Final payload");
responseStream.end();
});
- Using the pipeline method
-
Lambda recommande que lorsque vous écrivez des fonctions activées pour le streaming de réponses, vous utilisiez le awslambda.streamifyResponse() décorateur fourni par les environnements d'exécution natifs de Node.js, ainsi que la méthode. pipeline() Lorsque vous utilisez la méthode du pipeline, vous n'avez pas besoin de créer le délimiteur, Lambda le fait pour vous. Pour plus d'informations, consultez la section Écrire des fonctions Lambda compatibles avec le streaming des réponses.
L'exemple de code suivant renvoie les objets de métadonnées JSON et trois charges utiles au client.
import { pipeline } from 'node:stream/promises';
import { Readable } from 'node:stream';
export const handler = awslambda.streamifyResponse(
async (event, responseStream, context) => {
const httpResponseMetadata = {
statusCode: 200,
headers: {
"Content-Type": "text/plain",
"X-Custom-Header": "Example-Custom-Header"
}
};
responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
const dataStream = Readable.from(async function* () {
yield "FIRST payload\n";
await new Promise(r => setTimeout(r, 1000));
yield "SECOND payload\n";
await new Promise(r => setTimeout(r, 1000));
yield "THIRD payload\n";
await new Promise(r => setTimeout(r, 1000));
}());
await pipeline(dataStream, responseStream);
}
);
- Without using the pipeline method
-
L'exemple de code suivant renvoie les objets de métadonnées JSON et trois charges utiles au client sans utiliser la awslambda.HttpResponseStream() méthode. Sans awslambda.HttpResponseStream() cette méthode, vous devez inclure un délimiteur de 8 octets nuls entre les métadonnées et la charge utile.
export const handler = awslambda.streamifyResponse(async (event, response, ctx) => {
response.write('{"statusCode": 200, "headers": {"hdr-x": "val-x"}}');
response.write("\x00".repeat(8)); // DELIMITER
await new Promise(r => setTimeout(r, 1000));
response.write("FIRST payload");
await new Promise(r => setTimeout(r, 1000));
response.write("SECOND payload");
await new Promise(r => setTimeout(r, 1000));
response.write("FINAL payload");
response.end();
});
Création d'une intégration de proxy Lambda avec diffusion en continu de la réponse à la charge utile
La procédure suivante montre comment créer une intégration de proxy Lambda avec le streaming de réponse de charge utile. Utilisez l'exemple de fonction Lambda ou créez la vôtre.
- AWS Management Console
-
Pour créer une intégration de proxy Lambda avec le streaming de réponse à la charge utile
-
Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.
Choisissez une API REST.
Choisissez Créer une ressource.
Sous Resource Name (Nom de la ressource), entrez streaming.
Choisissez Créer une ressource.
Lorsque la ressource /streaming est sélectionnée, choisissez Create method.
Pour Type de méthode, choisissez ANY.
Pour Type d’intégration, choisissez Lambda.
Choisissez l'intégration du proxy Lambda.
Pour le mode de transfert Response, choisissez Stream.
Pour la fonction Lambda, choisissez le nom de votre fonction Lambda.
La console API Gateway utilise automatiquement InvokeWithResponseStreaml'API pour appeler la fonction Lambda. Vous êtes responsable de l'écriture d'une fonction Lambda compatible avec le streaming des réponses. Pour obtenir un exemple, consultez Exemples de fonctions Lambda pour le streaming des réponses.
Choisissez Créer une méthode.
Après avoir créé votre méthode, déployez votre API.
Pour déployer votre API
Sélectionnez Deploy API (Déployer une API).
Pour Étape, sélectionnez Nouvelle étape.
Sous Stage name (Nom de l’étape), entrez prod.
(Facultatif) Sous Description, entrez une description.
Choisissez Déployer.
- AWS CLI
-
La procédure suivante explique comment importer une nouvelle API avec la valeur responseTransferMode définie surSTREAM. Si vous disposez d'une API d'intégration existante et que vous souhaitez la modifierresponseTransferMode, consultezMettre à jour le mode de transfert des réponses pour une intégration de proxy Lambda.
Pour créer une nouvelle API avec diffusion en continu des réponses à la charge utile
-
Copiez le fichier Open API suivant, puis enregistrez-le sousResponseStreamDemoSwagger.yaml. Dans ce fichier, responseTransferMode est défini surSTREAM, et l'URI d'intégration est défini surarn: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.
Remplacez le nom de la fonction par une fonction compatible my-function avec le streaming et remplacez les informations d'identification par un rôle IAM doté de politiques permettant au apigateway service d'invoquer des fonctions Lambda.
openapi: "3.0.1"
info:
title: "ResponseStreamingDemo"
version: "2025-04-28T17:28:25Z"
servers:
- url: "{basePath}"
variables:
basePath:
default: "prod"
paths:
/lambda:
get:
x-amazon-apigateway-integration:
httpMethod: "POST"
uri: "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"
type: "aws_proxy"
timeoutInMillis: 90000
responseTransferMode: "STREAM"
credentials: "arn:aws:iam::111122223333:role/apigateway-lambda-role"
Au lieu de fournir un rôle IAM pour les informations d'identification, vous pouvez utiliser la add-permission commande Lambda pour ajouter des autorisations basées sur les ressources.
Utilisez la import-rest-api commande suivante pour importer votre définition OpenAPI :
aws apigateway import-rest-api \
--body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
--parameters endpointConfigurationTypes=REGIONAL \
--region us-west-1
Utilisez la create-deployment commande suivante pour déployer votre nouvelle API sur une étape :
aws apigateway create-deployment \
--rest-api-id a1b2c2 \
--stage-name prod \
--region us-west-1
Mettre à jour le mode de transfert des réponses pour une intégration de proxy Lambda
La procédure suivante montre comment mettre à jour le mode de transfert des réponses pour une intégration de proxy Lambda. Lorsque vous passez du mode de transfert des réponses au streaming, mettez à jour votre fonction Lambda afin qu'elle soit conforme aux exigences du streaming des réponses. Utilisez l'exemple de fonction Lambda ou créez la vôtre.
- AWS Management Console
-
Pour mettre à jour le mode de transfert des réponses pour une intégration de proxy Lambda
-
Connectez-vous à la console API Gateway à l'adresse https://console.aws.amazon.com/apigateway.
Choisissez une API REST.
Choisissez une méthode.
Dans l’onglet Requête d’intégration, sous Paramètres de requête d’intégration, choisissez Modifier.
Pour le mode de transfert Response, choisissez Stream.
Pour la fonction Lambda, choisissez le nom de votre fonction Lambda.
Choisissez Enregistrer.
Après avoir mis à jour votre méthode, déployez votre API.
Pour déployer votre API
Sélectionnez Deploy API (Déployer une API).
Pour Étape, sélectionnez Nouvelle étape.
Sous Stage name (Nom de l’étape), entrez prod.
(Facultatif) Sous Description, entrez une description.
Choisissez Déployer.
- AWS CLI
-
Mettez à jour votre fonction Lambda pour qu'elle soit compatible avec le streaming.
Utilisez la AWS CLI commande suivante pour mettre à jour l'URI d'intégration et le mode de transfert des réponses de votre intégration :
aws apigateway update-integration \
--rest-api-id a1b2c3 \
--resource-id aaa111 \
--http-method ANY \
--patch-operations "[{\"op\":\"replace\",\"path\":\"/uri\",\"value\":\"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\"}, {\"op\":\"replace\",\"path\":\"/responseTransferMode\",\"value\":\"STREAM\"}]" \
--region us-west-1
-
Redéployez l’API pour que les modifications prennent effet.