Si vous avez déjà configuré vos fonctions Lambda à l'aide du Datadog Forwarder, consultez la documentation relative à l'instrumentation avec le Forwarder Datadog. Vous pouvez également suivre les instructions fournies dans ce guide pour instrumenter vos applications avec l'extension Lambda Datadog.
Si vos fonctions Lambda sont déployées dans un VPC sans accès à Internet, vous pouvez transmettre des données avec AWS PrivateLink pour le site Datadogdatadoghq.com, ou avec un proxy pour tous les autres sites.
Datadog propose de nombreuses méthodes différentes pour instrumenter vos applications sans serveur. Choisissez celle qui répond le mieux à vos besoins ci-dessous. Nous vous conseillons d’utiliser l’interface de ligne de commande Datadog. Vous devez suivre les instructions fournies pour “Image de conteneur” si votre application est déployée en tant qu’image de conteneur.
L’interface de ligne de commande Datadog permet de modifier les configurations des fonctions Lambda existantes pour instrumenter vos applications sans les redéployer. Il s’agit du moyen le plus rapide de tirer parti de la surveillance sans serveur de Datadog.
Installer l’interface de ligne de commande Datadog
npm install -g @datadog/datadog-ci
Si vous commencez tout juste à utiliser la surveillance sans serveur Datadog, lancez l’interface de ligne de commande Datadog en mode interactif pour procéder rapidement à la première installation. Vous pouvez ignorer les autres étapes. Pour installer définitivement Datadog pour vos applications de production, ignorez cette étape et suivez les autres étapes afin d’exécuter la commande de l’interface de ligne de commande Datadog dans vos pipelines de CI/CD après un déploiement normal.
datadog-ci lambda instrument -i
Configurer les identifiants AWS
L’interface de ligne de commande Datadog nécessite un accès au service AWS Lambda et dépend du SDK JavaScript AWS pour résoudre les identifiants. Assurez-vous de configurer vos identifiants AWS à l’aide de la même méthode que celle utilisée lors de l’appel de l’interface de ligne de commande AWS.
Configurer le site Datadog
exportDATADOG_SITE="<DATADOG_SITE>"
Remplacez <DATADOG_SITE> par datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Configurer la clé d’API Datadog
Datadog vous recommande d’enregistrer la clé d’API Datadog dans AWS Secrets Manager pour améliorer la sécurité et pour faciliter la rotation. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). Assurez-vous que vos fonctions Lambda disposent de l’autorisation IAM secretsmanager:GetSecretValue requise.
Pour effectuer un test rapide, vous pouvez également définir la clé d’API Datadog sous forme de texte brut :
exportDATADOG_API_KEY="<DATADOG_API_KEY>"
Instrumenter vos fonctions Lambda
Remarque : instrumentez d’abord vos fonctions Lambda dans un environnement de type dev ou staging. Si les résultats de l’instrumentation ne vous conviennent pas, exécutez uninstrument avec les mêmes arguments pour annuler les modifications.
Pour instrumenter vos fonctions Lambda, exécutez la commande suivante.
Remplacez <functionname> et <another_functionname> par les noms de vos fonctions Lambda. Vous pouvez également utiliser --functions-regex pour instrumenter automatiquement plusieurs fonctions dont les noms correspondent à l’expression régulière fournie.
Remplacez <aws_region> par le nom de la région AWS.
Remplacez <SITE_DATADOG> par datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Remplacez <DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé d’API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour effectuer un test rapide, vous pouvez également utiliser apiKey et définir la clé d’API Datadog sous forme de texte brut.
La macro CloudFormation Datadog transforme automatiquement votre modèle d’application SAM dans le but d’installer Datadog sur vos fonctions à l’aide des couches Lambda. De plus, elle configure vos fonctions afin qu’elles envoient des métriques, traces et logs à Datadog via l’extension Lambda Datadog.
Installer la macro CloudFormation Datadog
Exécutez la commande suivante avec vos identifiants AWS pour déployer une pile CloudFormation qui installe la ressource AWS de la macro. Vous ne devez installer la macro qu’une seule fois par région de votre compte. Remplacez create-stack par update-stack pour installer la dernière version de la macro.
Remplacez <SITE_DATADOG> par datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Remplacez <DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé d’API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour effectuer un test rapide, vous pouvez utiliser apiKey et définir la clé d’API Datadog sous forme de texte brut.
La bibliothèque CDK Construct Datadog installe automatiquement Datadog sur vos fonctions à l’aide des couches Lambda. De plus, elle configure vos fonctions afin qu’elles envoient des métriques, traces et logs à Datadog via l’extension Lambda Datadog.
Installer la bibliothèque CDK Construct Datadog
# For AWS CDK v1npm install datadog-cdk-constructs --save-dev
# For AWS CDK v2npm install datadog-cdk-constructs-v2 --save-dev
Instrumenter vos fonctions Lambda
// For AWS CDK v1
import{Datadog}from"datadog-cdk-constructs";// For AWS CDK v2
import{Datadog}from"datadog-cdk-constructs-v2";constdatadog=newDatadog(this,"Datadog",{nodeLayerVersion:121,extensionLayerVersion:74,site:"<DATADOG_SITE>",apiKeySecretArn:"<DATADOG_API_KEY_SECRET_ARN>"});datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>])
Renseignez les paramètres fictifs comme suit :
Remplacez <SITE_DATADOG> par datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Remplacez <DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé d’API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour effectuer un test rapide, vous pouvez utiliser apiKey et définir la clé d’API Datadog sous forme de texte brut.
Si vous déployez votre fonction Lambda en tant qu’image de conteneur, vous ne pourrez pas utiliser la bibliothèque Lambda Datadog en tant que couche Lambda. À la place, il vous faudra grouper la bibliothèque Lambda Datadog et les bibliothèques de tracing dans l’image.
npm install datadog-lambda-js dd-trace
Veuillez noter que la version mineure du package datadog-lambda-js correspond toujours à la version de la couche. Par exemple, datadog-lambda-js v0.5.0 correspond au contenu de la version 5 de la couche.
Installer l’extension Lambda Datadog
Ajoutez l’extension Lambda Datadog à votre image de conteneur en ajoutant ce qui suit à votre Dockerfile :
Remplacez <TAG> par un numéro de version spécifique (par exemple, 74) ou par latest. Il en va de même pour Alpine : indiquez un numéro de version spécifique (par exemple, 74-alpine) ou latest-alpine. Consultez le référentiel Amazon ECR pour découvrir la liste complète des tags autorisés.
Rediriger la fonction du gestionnaire
Définissez la valeur CMD de votre image sur node_modules/datadog-lambda-js/dist/handler.handler. Vous pouvez effectuer cette opération dans AWS ou directement dans votre Dockerfile. Notez que la valeur définie dans AWS remplace celle définie dans le Dockerfile, si vous avez défini les deux.
Définissez la variable d’environnement DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, comme myfunc.handler.
Si vous utilisez ESModule avec le conteneur, vous devrez supprimer le fichier handler.js. Ce dernier existe pour Node 12 et sera supprimé lorsque AWS ne prendra plus en charge Node 12.
RUN rm node_modules/datadog-lambda-js/dist/handler.jsCMD["node_modules/datadog-lambda-js/dist/handler.handler"]
Remarque : si votre fonction Lambda s’exécute sur arm64, vous devez créer votre image de conteneur dans un environnement Amazon Linux basé sur arm64 ou appliquer le wrapper Datadog dans le code de votre fonction. Vous devrez peut-être procéder de la sorte si vous utilisez un outil de sécurité ou de surveillance tiers qui n’est pas compatible avec la redirection du gestionnaire Datadog.
Configurer la clé d’API et le site Datadog
Définissez la variable d’environnement DD_SITE sur datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Définissez la variable d’environnement DD_API_KEY_SECRET_ARN sur l’ARN du secret AWS où votre clé d’API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour effectuer un test rapide, vous pouvez également utiliser DD_API_KEY et définir la clé d’API Datadog sous forme de texte brut.
Pour utiliser Terraform, incorporez votre gestionnaire de fonction Lambda avec la bibliothèque Lambda Datadog. Définissez le gestionnaire de votre fonction sur la fonction de gestion de Datadog, à savoir /opt/nodejs/node_modules/datadog-lambda-js/handler.handler.
resource "aws_lambda_function""lambda"{"function_name"= ...
...
# Assurez-vous de choisir les couches adéquates en fonction de votre architecture Lambda et de vos régionslayers=[ <ARN_TRACEUR_DATADOG>,
<ARN_EXTENSION_DATADOG>
]handler="/opt/nodejs/node_modules/datadog-lambda-js/handler.handler" environment {variables={DD_SITE= <SITE_DATADOG>
DD_API_KEY_SECRET_ARN= <CLÉ_API>
DD_LAMBDA_HANDLER= <GESTIONNAIRE_LAMBDA>
}}}
Renseignez les variables adéquates :
Remplacez <ARN_TRACEUR_DATADOG> par l’ARN du traceur Datadog adéquat en fonction de votre type de région :
Dans l’ARN, remplacez <AWS_REGION> par une région AWS valide, comme us-east-1. Remplacez <RUNTIME> par l’une des valeurs suivantes : Node18-x, Node20-x, Node22-x.
Remplacez <ARN_EXTENSION_DATADOG> par l’ARN de l’extension Lambda Datadog adéquate en fonction de votre région et de votre architecture.
Remplacez <SITE_DATADOG> par datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Remplacez CLÉ_API par l’ARN du secret AWS où votre clé d’API Datadog est stockée de façon sécurisée. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour effectuer un test rapide, vous pouvez également utiliser DD_API_KEY au lieu de DD_API_KEY_SECRET_ARN et définir la valeur sur votre clé d’API Datadog sous forme de texte brut.
Remplacez GESTIONNAIRE_LAMBDA par votre gestionnaire d’origine, par exemple myfunc.handler.
resource "aws_lambda_function""lambda"{"function_name"= ...
...
# Veiller à choisir les couches adéquates en fonction de votre architecture Lambda et de vos régions AWSlayers=["arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Node22-x:121",
"arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Extension:74"]handler="/opt/nodejs/node_modules/datadog-lambda-js/handler.handler" environment {variables={DD_SITE= datadoghq.com
DD_API_KEY_SECRET_ARN="arn:aws..."DD_LAMBDA_HANDLER="myfunc.handler"}}}
Définissez la variable d’environnement DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, comme myfunc.handler.
Si vous n'utilisez pas l'un des outils de développement sans serveur pris en charge par Datadog, tels que Serverless Framework ou AWS CDK, Datadog vous recommande vivement d'instrumenter vos applications sans serveur avec l'interface de ligne de commande Datadog.
Installer la bibliothèque Lambda Datadog
La bibliothèque Lambda Datadog peut être importée en tant que couche (conseillé) OU en tant que package JavaScript.
La version mineure du packdatadog-lambda-js correspond toujours à la version de la couche. Par exemple, datadog-lambda-js v0.5.0 correspond au contenu de la version 5 de la couche.
Option A : configurez les couches pour votre fonction Lambda à l’aide de l’ARN, en respectant le format ci-dessous :
# Use this format for AWS commercial regionsarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:121
# Use this format for AWS GovCloud regionsarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:121
Remplacez <AWS_REGION> par une région AWS valide, comme us-east-1. Voici la liste des options disponibles pour <RUNTIME> : Node18-x, Node20-x, Node22-x.
Option B : si vous ne pouvez pas utiliser la couche Lambda Datadog prédéfinie, vous avez la possibilité d’installer les packages datadog-lambda-js via dd-trace via le gestionnaire de packages de votre choix.
npm install datadog-lambda-js dd-trace
Installer l’extension Lambda Datadog
Configurez les couches pour votre fonction Lambda à l’aide de l’ARN, en respectant le format suivant :
# Use this format for x86-based Lambda deployed in AWS commercial regionsarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:74
# Use this format for arm64-based Lambda deployed in AWS commercial regionsarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:74
# Use this format for x86-based Lambda deployed in AWS GovCloud regionsarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:74
# Use this format for arm64-based Lambda deployed in AWS GovCloud regionsarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:74
Remplacez <AWS_REGION> par une région AWS valide, telle que us-east-1.
Rediriger la fonction du gestionnaire
Définissez le gestionnaire de votre fonction sur /opt/nodejs/node_modules/datadog-lambda-js/handler.handler si vous utilisez la couche, ou sur node_modules/datadog-lambda-js/dist/handler.handler si vous utilisez le package.
Définissez la variable d’environnement DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, comme myfunc.handler.
Remarque : si votre fonction Lambda s’exécute sur arm64 et si la bibliothèque datadog-lambda-js est installée en tant que package NPM (option B de l’étape 1), vous devez appliquer le wrapper Datadog dans le code de votre fonction. Par ailleurs, vous devrez peut-être procéder de la sorte si vous utilisez un outil de sécurité ou de surveillance tiers qui n’est pas compatible avec la redirection du gestionnaire Datadog.
Configurer la clé d’API et le site Datadog
Définissez la variable d’environnement DD_SITE sur datadoghq.com (assurez-vous que le SITE sélectionné à droite est correct).
Définissez la variable d’environnement DD_API_KEY_SECRET_ARN sur l’ARN du secret AWS où votre clé d’API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (et non en tant que blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour effectuer un test rapide, vous pouvez également utiliser DD_API_KEY et définir la clé d’API Datadog sous forme de texte brut.
const{sendDistributionMetric,sendDistributionMetricWithDate}=require('datadog-lambda-js');consttracer=require('dd-trace');// Envoyer une span personnalisée appelée "sleep"
constsleep=tracer.wrap('sleep',(ms)=>{returnnewPromise((resolve)=>setTimeout(resolve,ms));});exports.handler=async(event)=>{// Ajouter des tags personnalisés à la span de la fonction Lambda,
// ne fonctionne PAS si le tracing X-Ray est activé
constspan=tracer.scope().active();span.setTag('customer_id','123456');awaitsleep(100);// Envoyer une span personnalisée
constsandwich=tracer.trace('hello.world',()=>{console.log('Hello, World!');});// Envoyer une métrique custom
sendDistributionMetric('coffee_house.order_value',// nom de la métrique
12.45,// valeur de la métrique
'product:latte',// tag
'order:online'// autre tag
);constresponse={statusCode:200,body:JSON.stringify('Hello from serverless!')};returnresponse;};