Instrumenter des applications Node.js sans serveur
La version 67+ de l'extension Datadog Lambda est optimisée pour réduire considérablement la durée de démarrage à froid.
En savoir plus.
Configurer
Datadog CLI modifie la configuration des fonctions Lambda existantes afin d’activer l’instrumentation sans nécessiter de nouveau déploiement. C’est le moyen le plus rapide de commencer avec la surveillance sans serveur de Datadog.
Installer le client CLI Datadog
npm install -g @datadog/datadog-ci @datadog/datadog-ci-plugin-lambda
Si vous êtes nouveau dans la surveillance sans serveur de Datadog, lancez Datadog CLI en mode interactif pour guider votre première installation pour un démarrage rapide, et vous pouvez ignorer les étapes restantes. Pour installer Datadog de manière permanente pour vos applications de production, passez cette étape et suivez les étapes restantes pour exécuter la commande Datadog CLI dans vos pipelines CI/CD après votre déploiement normal.
datadog-ci lambda instrument -i
Configurer les identifiants AWS
Datadog CLI nécessite un accès au service AWS Lambda et dépend de l’AWS JavaScript SDK pour [résoudre les identifiants][1]. Assurez-vous que vos identifiants AWS sont configurés en utilisant la même méthode que celle que vous utiliseriez lors de l’invocation de l’AWS CLI.
Configurer le site Datadog
export DATADOG_SITE="<DATADOG_SITE>"
Replace <DATADOG_SITE> with (assurez-vous que le bon SITE est sélectionné à droite).
Configurer la clé API Datadog
Datadog recommande de sauvegarder la clé API Datadog dans AWS Secrets Manager pour des raisons de sécurité et de rotation facile. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). Assurez-vous que vos fonctions Lambda disposent de l’autorisation secretsmanager:GetSecretValueIAM requise.
export DATADOG_API_KEY_SECRET_ARN="<DATADOG_API_KEY_SECRET_ARN>"
For quick testing purposes, you can also set the Datadog API key in plaintext:
export DATADOG_API_KEY="<DATADOG_API_KEY>"
Instrumentez vos fonctions Lambda
Remarque : Instrumentez d’abord vos fonctions Lambda dans un environnement de développement ou de staging ! Si le résultat de l’instrumentation est insatisfaisant, exécutez uninstrument avec les mêmes arguments pour annuler les modifications.
Pour instrumenter vos fonctions Lambda, lancez la commande suivante.
datadog-ci lambda instrument -f <functionname> -f <another_functionname> -r <aws_region> -v 141 -e 98
To fill in the placeholders:
- Replace `<functionname>` and `<another_functionname>` with your Lambda function names. Alternatively, you can use `--functions-regex` to automatically instrument multiple functions whose names match the given regular expression.
- Replace `<aws_region>` with the AWS region name.
Additional parameters can be found in the [CLI documentation][2].
[1]: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html
[2]: https://docs.datadoghq.com/fr/serverless/serverless_integrations/cli
Le plug-in Serverless Datadog configure vos fonctions de sorte à ce qu’elles envoient les métriques, les traces et les logs à Datadog via l’extension Lambda Datadog.
Pour installer et configurer le plug-in Serverless Datadog, suivez les étapes suivantes :
Installez le plugin Datadog Serverless :
serverless plugin install --name serverless-plugin-datadog
Mettez à jour votre serverless.yml :
custom:
datadog:
site: <DATADOG_SITE>
apiKeySecretArn: <DATADOG_API_KEY_SECRET_ARN>
To fill in the placeholders:
- Replace
<DATADOG_SITE> with (assurez-vous que le bon SITE est sélectionné à droite). - Remplacez
<DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour des tests rapides, vous pouvez plutôt utiliser apiKey et définir la clé API Datadog en texte brut.
For more information and additional settings, see the plugin documentation.
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 de sorte à ce qu’elles envoient des métriques, des traces et des logs à Datadog via l’extension Lambda Datadog.
Installez la macro Datadog CloudFormation
Exécutez la commande suivante avec vos identifiants AWS pour déployer une pile CloudFormation qui installe la ressource macro AWS. Vous n’avez besoin d’installer la macro qu’une seule fois pour une région donnée dans votre compte. Remplacez create-stack par update-stack pour mettre à jour la macro vers la dernière version.
aws cloudformation create-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
The macro is now deployed and ready to use.
Instrumentez vos fonctions Lambda
Ajoutez la transformation DatadogServerless après la transformation AWS::Serverless dans la section Transform de votre pour SAM template.yml.
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
stackName: !Ref "AWS::StackName"
nodeLayerVersion: 141
extensionLayerVersion: 98
site: "<DATADOG_SITE>"
apiKeySecretArn: "<DATADOG_API_KEY_SECRET_ARN>"
To fill in the placeholders:
- Replace
<DATADOG_SITE> with (assurez-vous que le bon SITE est sélectionné à droite). - Remplacez
<DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour des tests rapides, vous pouvez utiliser apiKey à la place et définir la clé API Datadog en texte brut.
More information and additional parameters can be found in the macro documentation.
Instrumenting Node functions through the Datadog CDK construct is only available for AWS CDK apps written in Typescript, Python, and Go.
The Datadog CDK construct automatically installs Datadog on your functions using Lambda layers. It configures your functions to send metrics, traces, and logs to Datadog through the Datadog Lambda Extension.
TypeScript
Install the Datadog CDK constructs library
For AWS CDK v1:
npm install datadog-cdk-constructs --save-dev
For AWS CDK v2:
npm install datadog-cdk-constructs-v2 --save-dev
Instrument your Lambda functions
For AWS CDK v1:
import { Datadog } from "datadog-cdk-constructs";
const datadog = new Datadog(this, "Datadog", {
nodeLayerVersion: 141,
extensionLayerVersion: 98,
site: "<DATADOG_SITE>",
apiKeySecretArn: "<DATADOG_API_KEY_SECRET_ARN>"
});
datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>])
For AWS CDK v2:
import { DatadogLambda } from "datadog-cdk-constructs-v2";
const datadogLambda = new DatadogLambda(this, "datadogLambda", {
nodeLayerVersion: 141,
extensionLayerVersion: 98,
site: "<DATADOG_SITE>",
apiKeySecretArn: "<DATADOG_API_KEY_SECRET_ARN>"
});
datadogLambda.addLambdaFunctions([<LAMBDA_FUNCTIONS>])
Python
Install the Datadog CDK constructs library
For AWS CDK v1:
pip install datadog-cdk-constructs
For AWS CDK v2:
pip install datadog-cdk-constructs-v2
Instrument your Lambda functions
For AWS CDK v1:
from datadog_cdk_constructs import Datadog
datadog = Datadog(self, "Datadog",
node_layer_version=141,
extension_layer_version=98,
site="<DATADOG_SITE>",
api_key_secret_arn="<DATADOG_API_KEY_SECRET_ARN>",
)
datadog.add_lambda_functions([<LAMBDA_FUNCTIONS>])
For AWS CDK v2:
from datadog_cdk_constructs_v2 import DatadogLambda
datadog = DatadogLambda(self, "datadogLambda",
node_layer_version=141,
extension_layer_version=98,
site="<DATADOG_SITE>",
api_key_secret_arn="<DATADOG_API_KEY_SECRET_ARN>",
)
datadog.add_lambda_functions([<LAMBDA_FUNCTIONS>])
Go
Note: Go CDK constructs are only available for AWS CDK v2.
Install the Datadog CDK constructs library
go get github.com/DataDog/datadog-cdk-constructs-go/ddcdkconstruct/v3
Instrument your Lambda functions
import (
"github.com/DataDog/datadog-cdk-constructs-go/ddcdkconstruct/v3"
)
datadogLambda := ddcdkconstruct.NewDatadogLambda(
stack,
jsii.String("Datadog"),
&ddcdkconstruct.DatadogLambdaProps{
NodeLayerVersion: jsii.Number(141),
ExtensionLayerVersion: jsii.Number(98),
Site: jsii.String("<DATADOG_SITE>"),
ApiKeySecretArn: jsii.String("<DATADOG_API_KEY_SECRET_ARN>"),
})
datadogLambda.AddLambdaFunctions(&[]interface{}{<LAMBDA_FUNCTIONS>}, nil)
To fill in the placeholders:
- Replace
<DATADOG_SITE> with
(ensure the correct SITE is selected on the right). - Replace
<DATADOG_API_KEY_SECRET_ARN> with the ARN of the AWS secret where your Datadog API key is securely stored. The key needs to be stored as a plaintext string (not a JSON blob). Ensure your Lambda execution role has the secretsmanager:GetSecretValue IAM permission in order to read the secret value. For quick testing, you can use apiKey instead and set the Datadog API key in plaintext.
More information and additional parameters can be found on the Datadog CDK documentation.
Installez la bibliothèque Datadog Lambda
Emballez la Lambda Datadog et les SDK dans l’image :
npm install datadog-lambda-js dd-trace
Note that the minor version of the datadog-lambda-js package always matches the layer version. For example, datadog-lambda-js v0.5.0 matches the content of layer version 5.
You cannot install the Datadog Lambda Library as a layer if you are deploying your Lambda function as a container image.
Installez l’extension Datadog Lambda
Ajoutez l’extension Lambda Datadog à votre image de conteneur en ajoutant ce qui suit à votre Dockerfile :
COPY --from=public.ecr.aws/datadog/lambda-extension:<TAG> /opt/. /opt/
Replace <TAG> with either a specific version number (for example, 98) or with latest. Alpine is also supported with specific version numbers (such as 98-alpine) or with latest-alpine. Vous pouvez voir une liste complète des balises possibles dans le dépôt Amazon ECR.
Redirigez la fonction gestionnaire
- Définissez la valeur
CMD de votre image sur node_modules/datadog-lambda-js/dist/handler.handler. Vous pouvez définir cela dans AWS ou directement dans votre Dockerfile. Notez que la valeur définie dans AWS remplace la valeur dans le Dockerfile si vous définissez les deux. - Définissez la variable d’environnement
DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, par exemple, myfunc.handler. - Si vous utilisez ESModule avec le conteneur, vous devrez supprimer le fichier
handler.js. Ce fichier existe pour Node 12 et sera supprimé lorsque AWS dépréciera le support de Node 12.RUN rm node_modules/datadog-lambda-js/dist/handler.js
CMD ["node_modules/datadog-lambda-js/dist/handler.handler"]
Note: If your Lambda function runs on arm64, you must either build your container image in an arm64-based Amazon Linux environment or apply the Datadog wrapper in your function code instead. You may also need to do that if you are using a third-party security or monitoring tool that is incompatible with the Datadog handler redirection.
Configurez le site Datadog et la clé API
- Définissez la variable d’environnement
DD_SITE sur (assurez-vous que le bon SITE est sélectionné à droite). - Définissez la variable d’environnement
DD_API_KEY_SECRET_ARN avec l’ARN du secret AWS où votre clé API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour des tests rapides, vous pouvez utiliser DD_API_KEY à la place et définir la clé API Datadog en texte brut.
Le module Terraform lambda-datadog enveloppe la ressource aws_lambda_function et configure automatiquement votre fonction Lambda pour la surveillance sans serveur Datadog en :
- Ajoutant les couches Datadog Lambda
- Redirection du gestionnaire Lambda
- Activation de la collecte et de l’envoi des métriques, des traces et des journaux vers Datadog
module "lambda-datadog" {
source = "DataDog/lambda-datadog/aws"
version = "4.0.0"
environment_variables = {
"DD_API_KEY_SECRET_ARN" : "<DATADOG_API_KEY_SECRET_ARN>"
"DD_ENV" : "<ENVIRONMENT>"
"DD_SERVICE" : "<SERVICE_NAME>"
"DD_SITE": "<DATADOG_SITE>"
"DD_VERSION" : "<VERSION>"
}
datadog_extension_layer_version = 98
datadog_node_layer_version = 141
# aws_lambda_function arguments
}
Remplacez la ressource aws_lambda_function par le module Terraform lambda-datadog puis spécifiez le source et le version du module.
Définissez les arguments aws_lambda_function :
Tous les arguments disponibles dans la ressource aws_lambda_function sont disponibles dans ce module Terraform. Les arguments définis comme blocs dans la ressource aws_lambda_function sont redéfinis comme des variables avec leurs arguments imbriqués.
Par exemple, dans aws_lambda_function, environment est défini comme un bloc avec un argument variables. Dans le module Terraform lambda-datadog, la valeur pour le environment_variables est transmise à l’argument environment.variables dans aws_lambda_function. Voir inputs pour une liste complète des variables dans ce module.
Remplissez les espaces réservés des variables d’environnement :
- Remplacez
<DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). La permission secretsmanager:GetSecretValue est requise. Pour des tests rapides, vous pouvez plutôt utiliser la variable d’environnement DD_API_KEY et définir votre clé API Datadog en texte clair. - Remplacez
<ENVIRONMENT> par l’environnement de la fonction Lambda, tel que prod ou staging - Remplacez
<SERVICE_NAME> par le nom du service de la fonction Lambda - Remplacez
<DATADOG_SITE> par . (Assurez-vous que le bon site Datadog est sélectionné sur cette page). - Remplacez
<VERSION> par le numéro de version de la fonction Lambda
Sélectionnez les versions de la couche Lambda de l’extension Datadog et de la couche Lambda Node.js de Datadog à utiliser. Par défaut, utilise les dernières versions de couche.
datadog_extension_layer_version = 98
datadog_node_layer_version = 141
Pour configurer Datadog en utilisant SST v3, suivez ces étapes :
const app = new sst.aws.Function("MyApp", {
handler: "index.handler",
nodejs : {
install: [
"datadog-lambda-js",
"dd-trace",
]
},
environment: {
DD_ENV: "<ENVIRONMENT>",
DD_SERVICE: "<SERVICE_NAME>",
DD_VERSION: "<VERSION>",
DATADOG_API_KEY_SECRET_ARN: "<DATADOG_API_KEY_SECRET_ARN>",
DD_SITE: "<DATADOG_SITE>",
},
layers: [
$interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:464622532012:layer:Datadog-Extension:98`,
$interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:464622532012:layer:Datadog-<RUNTIME>:141`
],
});
Configure the Datadog Lambda Library and Datadog Lambda Extension layers
- The available
<RUNTIME> options are: Node18-x, Node20-x, Node22-x, Node24-x.
Ajoutez dd-trace et datadog-lambda-js à la liste nodejs.install
Remplissez les espaces réservés des variables d’environnement :
- Remplacez
<DATADOG_API_KEY_SECRET_ARN> par l’ARN du secret AWS où votre clé API Datadog est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). L’autorisation secretsmanager:GetSecretValue est requise. Pour des tests rapides, vous pouvez plutôt utiliser la variable d’environnement DD_API_KEY et définir votre clé API Datadog en texte brut. - Remplacez
<ENVIRONMENT> par l’environnement de la fonction Lambda, tel que prod ou staging - Remplacez
<SERVICE_NAME> par le nom du service de la fonction Lambda - Remplacez
<DATADOG_SITE> par . (Assurez-vous que le bon site Datadog est sélectionné sur cette page) - Remplacez
<VERSION> par le numéro de version de la fonction Lambda
Appliquez le wrapper Datadog dans votre code de fonction
Si vous n'utilisez pas un outil de développement sans serveur que Datadog prend en charge, tel que le Serverless Framework ou AWS CDK, Datadog vous encourage fortement à instrumenter vos applications sans serveur avec le
Datadog CLI.
Installez la bibliothèque Datadog Lambda
La bibliothèque Datadog Lambda peut être importée soit en tant que couche (recommandée) OU en tant que package JavaScript.
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 de la couche 5.
Option A : [Configurez les couches][1] pour votre fonction Lambda en utilisant l’ARN dans le format suivant :
# Use this format for AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:141
# Use this format for AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:141
Replace <AWS_REGION> with a valid AWS region such as us-east-1. The available <RUNTIME> options are: Node18-x, Node20-x, Node22-x, Node24-x.
Option B: If you cannot use the prebuilt Datadog Lambda layer, alternatively you can install the packages datadog-lambda-js and dd-trace using your favorite package manager.
npm install datadog-lambda-js dd-trace
Installez l’extension Lambda de Datadog
[Configurez les couches][1] 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 regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:98
# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:98
# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:98
# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:98
Replace `<AWS_REGION>` with a valid AWS region, such as `us-east-1`.
3. Redirigez la fonction de gestionnaire
- Définissez le gestionnaire de votre fonction sur `/opt/nodejs/node_modules/datadog-lambda-js/handler.handler` si vous utilisez la couche, ou `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, par exemple, `myfunc.handler`.
**Remarque** : Si votre fonction Lambda s'exécute sur `arm64` et que 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][2] à la place. Vous devrez peut-être également le faire si vous utilisez un outil de sécurité ou de surveillance tiers qui est incompatible avec la redirection du gestionnaire Datadog.
4. Configurez le site Datadog et la clé API
- Définissez la variable d'environnement `DD_SITE` sur <code class="js-region-param region-param" data-region-param="dd_site"></code> (assurez-vous que le bon SITE est sélectionné à droite).
- Définissez la variable d'environnement `DD_API_KEY_SECRET_ARN` avec l'ARN du secret AWS où votre [clé API Datadog][3] est stockée en toute sécurité. La clé doit être stockée sous forme de chaîne de texte brut (pas un blob JSON). L'autorisation `secretsmanager:GetSecretValue` est requise. Pour des tests rapides, vous pouvez utiliser `DD_API_KEY` à la place et définir la clé API Datadog en texte clair.
[1]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
[2]: https://docs.datadoghq.com/fr/serverless/guide/handler_wrapper
[3]: https://app.datadoghq.com/organization-settings/api-keys
Do not set the following environment variables in your serverless environment. They should only be set in non-serverless environments.
DD_AGENT_HOSTDD_TRACE_AGENT_URL
N'installez pas la bibliothèque Lambda de Datadog en tant que couche et en tant que package JavaScript. Si vous avez installé la bibliothèque Lambda de Datadog en tant que couche, ne l'incluez pas datadog-lambda-js dans votre package.json, ou installez-la en tant que dépendance de développement et exécutez npm install --production avant de déployer.
Conformité FIPS
Datadog provides FIPS-compliant monitoring for AWS Lambda functions. For AWS GovCloud environments, the DD_LAMBDA_FIPS_MODE environment variable is enabled by default. When FIPS mode is enabled, AWS FIPS endpoints are used for Datadog API key lookups, and the Lambda metric helper function lambda_metric requires the FIPS-compliant extension for metric submission. While the FIPS-compliant Lambda components work with any Datadog site, end-to-end FIPS compliance requires using the US1-FED site. See AWS Lambda FIPS Compliance for more details.
AWS Lambda et VPC
If your Lambda functions are deployed in a Virtual Private Cloud (VPC) without access to the public internet, and you are using the datadoghq.com Datadog site, you can use AWS PrivateLink to send data.
If your Lambda functions are deployed in a VPC, and you are using a Datadog site that is not datadoghq.com, you can use a proxy to send data.
Quelle est la suite ?
- Ajoutez des balises personnalisées à votre télémétrie en utilisant la variable d’environnement
DD_TAGS - Configurez la collecte de payload pour capturer les payloads JSON de vos fonctions de requête et de réponse
- Si vous utilisez l’extension Lambda de Datadog, désactivez les journaux Lambda du Forwarder Datadog
- Voir Configurer la surveillance sans serveur pour AWS Lambda pour d’autres capacités
Surveiller la logique métier personnalisée
Pour surveiller votre logique métier personnalisée, soumettez une métrique personnalisée ou un span en utilisant le code d’exemple ci-dessous. Pour des options supplémentaires, voir soumission de métriques personnalisées pour les applications sans serveur et le guide APM pour instrumentation personnalisée.
const { sendDistributionMetric, sendDistributionMetricWithDate } = require('datadog-lambda-js');
const tracer = require('dd-trace');
// submit a custom span named "sleep"
const sleep = tracer.wrap('sleep', (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
});
exports.handler = async (event) => {
// add custom tags to the lambda function span,
// does NOT work when X-Ray tracing is enabled
const span = tracer.scope().active();
span.setTag('customer_id', '123456');
await sleep(100);
// submit a custom span
const sandwich = tracer.trace('hello.world', () => {
console.log('Hello, World!');
});
// submit a custom metric
sendDistributionMetric(
'coffee_house.order_value', // metric name
12.45, // metric value
'product:latte', // tag
'order:online' // another tag
);
const response = {
statusCode: 200,
body: JSON.stringify('Hello from serverless!')
};
return response;
};
Lectures Complémentaires
Documentation, liens et articles supplémentaires utiles: