Utilisation de l’objet de contexte Lambda pour récupérer les informations de la fonction Go - 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’objet de contexte Lambda pour récupérer les informations de la fonction Go

Dans Lambda, l’objet de contexte fournit aux méthodes et aux propriétés des informations sur l’invocation, la fonction et l’environnement d’exécution. Lorsque Lambda exécute votre fonction, il transmet un objet contexte au gestionnaire. Pour utiliser l’objet de contexte dans votre gestionnaire, vous pouvez éventuellement le déclarer comme paramètre d’entrée dans votre gestionnaire. L’objet de contexte est nécessaire si vous souhaitez effectuer les opérations suivantes dans votre gestionnaire :

Variables, méthodes et propriétés prises en charge par l’objet de contexte

La bibliothèque de contexte Lambda fournit les variables globales, méthodes et propriétés suivantes.

Variables globales
  • FunctionName – Nom de la fonction Lambda.

  • FunctionVersionVersion de la fonction.

  • MemoryLimitInMB – Quantité de mémoire allouée à la fonction.

  • LogGroupName – Groupe de journaux pour la fonction.

  • LogStreamName – Flux de journal de l'instance de fonction.

Méthodes de contexte
  • Deadline – Retourne la date d'expiration de l'exécution, exprimée en millisecondes au format horaire Unix.

Propriétés du contexte
  • InvokedFunctionArn – Amazon Resource Name (ARN) utilisé pour appeler la fonction. Indique si l'appelant a spécifié un numéro de version ou un alias.

  • AwsRequestID – Identifiant de la demande d'appel.

  • Identity – (applications mobiles) Informations sur l'identité Amazon Cognito qui a autorisé la demande.

  • ClientContext – (applications mobiles) Contexte client fourni à Lambda par l'application client.

Accès aux informations du contexte d'appel

Les fonctions Lambda ont accès aux métadonnées sur leur environnement et la demande d'appel. Elles sont accessibles à l'adresse du contexte du package. Si votre gestionnaire inclut context.Context en tant que paramètre, Lambda insère les informations sur votre fonction dans la propriété Value du contexte. Notez que vous devez importer la bibliothèque lambdacontext pour accéder au contenu de l'objet context.Context.

package main import ( "context" "log" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-lambda-go/lambdacontext" ) func CognitoHandler(ctx context.Context) { lc, _ := lambdacontext.FromContext(ctx) log.Print(lc.Identity.CognitoIdentityPoolID) } func main() { lambda.Start(CognitoHandler) }

Dans l'exemple ci-dessus, lc est la variable utilisée pour consommer les informations que l'objet de contexte a capturées et log.Print(lc.Identity.CognitoIdentityPoolID) affiche ces informations, dans ce cas, le CognitoPoolID.

L'exemple suivant présente la façon d'utiliser l'objet contexte pour surveiller le temps nécessaire à l'exécution de votre fonction Lambda. Cela vous permet d'analyser les attentes de performance et d'ajuster le code de votre fonction en conséquence, si nécessaire.

package main import ( "context" "log" "time" "github.com/aws/aws-lambda-go/lambda" ) func LongRunningHandler(ctx context.Context) (string, error) { deadline, _ := ctx.Deadline() deadline = deadline.Add(-100 * time.Millisecond) timeoutChannel := time.After(time.Until(deadline)) for { select { case <- timeoutChannel: return "Finished before timing out.", nil default: log.Print("hello!") time.Sleep(50 * time.Millisecond) } } } func main() { lambda.Start(LongRunningHandler) }

Utilisation du contexte dans les initialisations et les appels du client du kit SDK AWS

Si votre gestionnaire doit utiliser l’AWS SDK for Go pour appeler d’autres services, incluez l’objet de contexte en tant qu’entrée dans votre gestionnaire. Dans AWS, il est recommandé de transmettre l’objet de contexte dans la plupart des appels au kit SDK AWS. Par exemple, l’appel Amazon S3 PutObject accepte l’objet de contexte (ctx) comme premier argument :

// Upload an object to S3 _, err = s3Client.PutObject(ctx, &s3.PutObjectInput{ ... })

Pour initialiser correctement vos clients SDK, vous pouvez également utiliser l’objet de contexte pour charger la configuration correcte avant de transmettre cet objet de configuration au client :

// Load AWS SDK configuration using the default credential provider chain cfg, err := config.LoadDefaultConfig(ctx) ... s3Client = s3.NewFromConfig(cfg)

Si vous souhaitez initialiser vos clients SDK en dehors de votre gestionnaire principal (c’est-à-dire pendant la phase d’initialisation), vous pouvez transmettre un objet de contexte de remplacement :

func init() { // Initialize the S3 client outside of the handler, during the init phase cfg, err := config.LoadDefaultConfig(context.TODO()) ... s3Client = s3.NewFromConfig(cfg) }

Si vous initialisez vos clients de cette façon, assurez-vous de transmettre le bon objet de contexte dans les appels du SDK depuis votre gestionnaire principal.