Tutoriel : création d’une fonction Lambda de streaming de réponses avec une URL de la fonction - 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.

Tutoriel : création d’une fonction Lambda de streaming de réponses avec une URL de la fonction

Dans ce didacticiel, vous créez une fonction Lambda définie comme archive de fichier ZIP avec un point de terminaison d’URL de la fonction qui renvoie un flux de réponses. Pour plus d'informations sur la configuration de la fonction URLs, consultezFonction URLs.

Prérequis

Ce didacticiel suppose que vous avez quelques connaissances des opérations Lambda de base et de la console Lambda. Si ce n’est déjà fait, suivez les instructions fournies dans Créer une fonction Lambda à l'aide de la console pour créer votre première fonction Lambda.

Pour effectuer les étapes suivantes, vous avez besoin de l’AWS CLI version 2. Les commandes et la sortie attendue sont répertoriées dans des blocs distincts :

aws --version

Vous devriez voir la sortie suivante:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

Pour les commandes longues, un caractère d’échappement (\) est utilisé pour les fractionner en plusieurs lignes.

Sur Linux et macOS, utilisez votre gestionnaire de shell et de package préféré.

Note

Sous Windows, certaines commandes CLI Bash que vous utilisez couramment avec Lambda (par exemple zip) ne sont pas prises en charge par les terminaux intégrés du système d’exploitation. Installez le sous-système Windows pour Linux afin d’obtenir une version intégrée à Windows d’Ubuntu et Bash. Les exemples de commandes CLI de ce guide utilisent le formatage Linux. Les commandes qui incluent des documents JSON en ligne doivent être reformatées si vous utilisez la CLI Windows.

Créer un rôle d’exécution

Créez le rôle d’exécution qui donne à votre fonction Lambda l’autorisation d’accéder aux ressources AWS .

Pour créer un rôle d’exécution
  1. Accédez à la page Roles (Rôles) de la AWS Identity and Access Management console (IAM).

  2. Sélectionnez Créer un rôle.

  3. Créez un rôle avec les propriétés suivantes :

    • Type d’entité sécuriséeService AWS

    • Cas d’utilisationLambda

    • Permissions (AutorisationsAWSLambdaBasicExecutionRole

    • Nom de rôleresponse-streaming-role

La AWSLambdaBasicExecutionRolepolitique dispose des autorisations dont la fonction a besoin pour écrire des CloudWatch journaux sur Amazon Logs. Après avoir créé le rôle, notez son Amazon Resource Name (ARN). Vous en aurez besoin à l’étape suivante.

Création d’une fonction de streaming de réponses (AWS CLI)

Créez une fonction Lambda de streaming de réponses avec un point de terminaison d’URL de la fonction à l’aide de l’ AWS Command Line Interface (AWS CLI).

Pour créer une fonction capable de diffuser des réponses
  1. Copiez l’exemple de code suivant dans un fichier nommé index.js. Cette fonction diffuse trois réponses, séparées d'une seconde.

    exports.handler = awslambda.streamifyResponse( async (event, responseStream, _context) => { // Metadata is a JSON serializable JS object. Its shape is not defined here. const metadata = { statusCode: 200, headers: { "Content-Type": "application/json", "CustomHeader": "outerspace" } }; // Assign to the responseStream parameter to prevent accidental reuse of the non-wrapped stream. responseStream = awslambda.HttpResponseStream.from(responseStream, metadata); responseStream.write("Streaming with Helper \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("Hello 0 \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("Hello 1 \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("Hello 2 \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.end(); await responseStream.finished(); } );
  2. Créez un package de déploiement.

    zip function.zip index.js
  3. Créez une fonction Lambda à l’aide de la commande create-function. Remplacez la valeur de --role par l’ARN de rôle de l’étape précédente. Cette commande définit le délai d'expiration de la fonction à 10 secondes, ce qui permet à la fonction de diffuser trois réponses.

    aws lambda create-function \ --function-name my-streaming-function \ --runtime nodejs22.x \ --zip-file fileb://function.zip \ --handler index.handler \ --timeout 10 \ --role arn:aws:iam::123456789012:role/response-streaming-role
Pour créer une URL de la fonction
  1. Ajoutez à votre fonction une politique basée sur les ressources qui octroie lambda:InvokeFunctionUrl des lambda:InvokeFunction autorisations. Chaque instruction doit être ajoutée dans une commande distincte. Remplacez la valeur de --principal par votre Compte AWS identifiant.

    aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunctionUrl \ --statement-id UrlPolicyInvokeURL \ --principal 123456789012 \ --function-url-auth-type AWS_IAM
    aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunction \ --statement-id UrlPolicyInvokeFunction \ --principal 123456789012
  2. Créez un point de terminaison d’URL pour la fonction avec la commande create-function-url-config.

    aws lambda create-function-url-config \ --function-name my-streaming-function \ --auth-type AWS_IAM \ --invoke-mode RESPONSE_STREAM
    Note

    Si un message d'erreur s'affiche à propos de--invoke-mode, il se peut que vous deviez effectuer une mise à niveau vers une version plus récente du AWS CLI.

Test du point de terminaison d’URL de fonction

Testez votre intégration en invoquant votre fonction. Vous pouvez ouvrir l’URL de votre fonction dans un navigateur ou utiliser curl.

curl --request GET "https://abcdefghijklm7nop7qrs740abcd.lambda-url.us-east-1.on.aws/" --user "AKIAIOSFODNN7EXAMPLE" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer

Notre URL de la fonction utilise le type d’authentification IAM_AUTH. Cela signifie que vous devez signer les demandes à la fois avec votre cléAWS d'accès et votre clé secrète. Dans la commande précédente, remplacez par AKIAIOSFODNN7EXAMPLE l'ID de la clé d' AWS accès. Entrez votre clé AWS secrète lorsque vous y êtes invité. Si vous n'avez pas votre clé AWS secrète, vous pouvez utiliser des AWS informations d'identification temporaires à la place.

Vous devriez obtenir une réponse comme celle-ci :

Streaming with Helper Hello 0 Hello 1 Hello 2

Nettoyage de vos ressources

Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant AWS les ressources que vous n'utilisez plus, vous évitez des frais inutiles pour votre Compte AWS.

Pour supprimer le rôle d’exécution
  1. Ouvrez la page Roles (Rôles) de la console IAM.

  2. Sélectionnez le rôle d’exécution que vous avez créé.

  3. Sélectionnez Delete (Supprimer).

  4. Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).

Pour supprimer la fonction Lambda
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Sélectionnez la fonction que vous avez créée.

  3. Sélectionnez Actions, Supprimer.

  4. Saisissez confirm dans la zone de saisie de texte et choisissez Delete (Supprimer).