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.
Journalisation et surveillance des fonctions Lambda TypeScript
AWS Lambda surveille automatiquement les fonctions Lambda et envoie les entrées de journaux à Amazon CloudWatch. Votre fonction Lambda est fournie avec un groupe de journaux CloudWatch Logs et un flux de journaux pour chaque instance de votre fonction. L’environnement d’exécution Lambda envoie des détails sur chaque invocation et d’autres sorties provenant du code de votre fonction au flux de journaux. Pour de plus amples informations sur CloudWatch Logs, veuillez consulter Utilisation de CloudWatch Logs avec Lambda.
Pour générer les journaux à partir de votre code de fonction, vous pouvez utiliser des méthodes sur l’objet consolestdout
ou stderr
.
Sections
- Utilisation d’outils et de bibliothèques de journalisation
- Utilisation de Powertools pour AWS Lambda (TypeScript) et de AWS SAM pour la journalisation structurée
- Utilisation de Powertools pour AWS Lambda (TypeScript) et de AWS CDK pour la journalisation structurée
- Affichage des journaux dans la console Lambda
- Affichage des journaux dans la console CloudWatch
Utilisation d’outils et de bibliothèques de journalisation
Powertools pour AWS Lambda (TypeScript)
Capturer les champs clés du contexte Lambda, démarrer à froid et structurer la sortie de la journalisation sous forme de JSON
Journaliser les événements d’invocation Lambda lorsque cela est demandé (désactivé par défaut)
Imprimer tous les journaux uniquement pour un pourcentage d’invocations via l’échantillonnage des journaux (désactivé par défaut)
Ajouter des clés supplémentaires au journal structuré à tout moment
Utiliser un formateur de journaux personnalisé (Apportez votre propre formateur) pour produire des journaux dans une structure compatible avec le RFC de journalisation de votre organisation
Utilisation de Powertools pour AWS Lambda (TypeScript) et de AWS SAM pour la journalisation structurée
Suivez les étapes ci-dessous pour télécharger, créer et déployer un exemple d’application Hello World TypeScript avec des modules Powertools pour AWS Lambda (TypeScript)hello world
.
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
Node.js 18.x ou version ultérieure
-
CLI AWS SAM version 1.75 ou ultérieure. Si vous avez une version antérieure de la CLI AWS SAM, consultez Mise à niveau de la CLI AWS SAM.
Déployer un exemple d’application AWS SAM
-
Initialisez l’application à l’aide du modèle Hello World TypeScript.
sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs18.x
-
Créez l’application.
cd sam-app && sam build
-
Déployez l’application.
sam deploy --guided
-
Suivez les invites à l’écran. Appuyez sur
Enter
pour accepter les options par défaut fournies dans l’expérience interactive.Note
Pour HelloWorldFunction n’a peut-être pas d’autorisation définie, est-ce correct ?, assurez-vous de saisir
y
. -
Obtenez l’URL de l’application déployée :
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Invoquez le point de terminaison de l’API :
curl
<URL_FROM_PREVIOUS_STEP>
En cas de succès, vous obtiendrez cette réponse :
{"message":"hello world"}
-
Pour obtenir les journaux de la fonction, exécutez sam logs. Pour en savoir plus, consultez Utilisation des journaux dans le Guide du développeur AWS Serverless Application Model.
sam logs --stack-name sam-app
La sortie du journal se présente comme suit :
2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.552000 START RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Version: $LATEST 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.594000 2022-08-31T09:33:10.557Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390556,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[{"Name":"ColdStart","Unit":"Count"}]}]},"service":"helloWorld","ColdStart":1} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.595000 2022-08-31T09:33:10.595Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"level":"INFO","message":"This is an INFO log - sending HTTP 200 - hello world response","service":"helloWorld","timestamp":"2022-08-31T09:33:10.594Z"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.655000 2022-08-31T09:33:10.655Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390655,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[]}]},"service":"helloWorld"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 END RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 REPORT RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Duration: 201.55 ms Billed Duration: 202 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 252.42 ms XRAY TraceId: 1-630f2ad5-1de22b6d29a658a466e7ecf5 SegmentId: 567c116658fbf11a Sampled: true
-
Il s’agit d’un point de terminaison d’API public accessible par Internet. Nous vous recommandons de supprimer le point de terminaison après un test.
sam delete
Gestion de la conservation des journaux
Les groupes de journaux ne sont pas supprimés automatiquement quand vous supprimez une fonction. Pour éviter de stocker des journaux indéfiniment, supprimez le groupe de journaux ou configurez une période de conservation à l’issue de laquelle CloudWatch supprime automatiquement les journaux. Pour configurer la conservation des journaux, ajoutez les éléments suivants à votre modèle AWS SAM :
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7
Utilisation de Powertools pour AWS Lambda (TypeScript) et de AWS CDK pour la journalisation structurée
Suivez les étapes ci-dessous pour télécharger, créer et déployer un exemple d’application Hello World TypeScript avec des modules Powertools pour AWS Lambda (TypeScript)hello world
.
Prérequis
Pour exécuter la procédure indiquée dans cette section, vous devez satisfaire aux exigences suivantes :
-
Node.js 18.x ou version ultérieure
-
CLI AWS SAM version 1.75 ou ultérieure. Si vous avez une version antérieure de la CLI AWS SAM, consultez Mise à niveau de la CLI AWS SAM.
Déployer un exemple d’application AWS CDK
-
Créez un répertoire de projets pour votre nouvelle application.
mkdir hello-world cd hello-world
-
Initialisez l’application.
cdk init app --language typescript
-
Ajoutez le pack @types/aws-lambda
en tant que dépendance de développement. npm install -D @types/aws-lambda
-
Installez l’utilitaire Powertools Logger
(français non garanti). npm install @aws-lambda-powertools/logger
-
Ouvrez le répertoire lib. Vous devriez voir un fichier nommé hello-world-stack.ts. Créez deux nouveaux fichiers dans ce répertoire : hello-world.function.ts et hello-world.ts.
-
Ouvrez hello-world.function.ts et ajoutez le code suivant au fichier. Il s’agit du code de la fonction Lambda.
import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { logger.info('This is an INFO log - sending HTTP 200 - hello world response'); return { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; };
-
Ouvrez hello-world.ts et ajoutez le code suivant au fichier. Il contient le composant NodejsFunction, qui crée la fonction Lambda, configure les variables d’environnement pour Powertools et fixe la durée de conservation des journaux à une semaine. Il inclut également le composant LambdaRestApi, qui crée l’API REST.
import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; import { RetentionDays } from 'aws-cdk-lib/aws-logs'; import { CfnOutput } from 'aws-cdk-lib'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function', { environment: { Powertools_SERVICE_NAME: 'helloWorld', LOG_LEVEL: 'INFO', }, logRetention: RetentionDays.ONE_WEEK, }); const api = new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); new CfnOutput(this, 'apiUrl', { exportName: 'apiUrl', value: api.url, }); } }
-
Ouvrez hello-world stack.ts. C’est le code qui définit votre pile de AWS CDK. Remplacez le code par ce qui suit :
import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } }
-
Revenez au répertoire du projet.
cd hello-world
-
Déployez votre application.
cdk deploy
-
Obtenez l’URL de l’application déployée :
aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text
-
Invoquez le point de terminaison de l’API :
curl
<URL_FROM_PREVIOUS_STEP>
En cas de succès, vous obtiendrez cette réponse :
{"message":"hello world"}
-
Pour obtenir les journaux de la fonction, exécutez sam logs. Pour en savoir plus, consultez Utilisation des journaux dans le Guide du développeur AWS Serverless Application Model.
sam logs --stack-name HelloWorldStack
La sortie du journal se présente comme suit :
2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.047000 START RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Version: $LATEST 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.050000 { "level": "INFO", "message": "This is an INFO log - sending HTTP 200 - hello world response", "service": "helloWorld", "timestamp": "2022-08-31T14:48:37.048Z", "xray_trace_id": "1-630f74c4-2b080cf77680a04f2362bcf2" } 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 END RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 REPORT RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Duration: 34.60 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 57 MB Init Duration: 173.48 ms
-
Il s’agit d’un point de terminaison d’API public accessible par Internet. Nous vous recommandons de supprimer le point de terminaison après un test.
cdk destroy
Affichage des journaux dans la console Lambda
Vous pouvez utiliser la console Lambda pour afficher la sortie du journal après avoir invoqué une fonction Lambda.
Si votre code peut être testé à partir de l’éditeur Code intégré, vous trouverez les journaux dans les résultats d’exécution. Lorsque vous utilisez la fonctionnalité de test de console pour invoquer une fonction, vous trouverez Sortie du journal dans la section Détails.
Affichage des journaux dans la console CloudWatch
Vous pouvez utiliser la console Amazon CloudWatch pour afficher les journaux de tous les invocations de fonctions Lambda.
Pour afficher les journaux sur la console CloudWatch
-
Ouvrez la page Groupes de journaux
sur la console CloudWatch. -
Choisissez le groupe de journaux pour votre fonction (/aws/lambda/
nom-fonction
). -
Choisissez un flux de journaux.
Chaque flux de journal correspond à une instance de votre fonction. Un flux de journaux apparaît lorsque vous mettez à jour votre fonction Lambda et lorsque des instances supplémentaires sont créées pour traiter plusieurs invocations simultanées. Pour trouver des journaux pour une invocation spécifique, nous vous recommandons d’utiliser votre fonction avec AWS X-Ray. X-Ray enregistre des détails sur la demande et le flux de journaux dans le suivi.