Tracing Lambda Node.js et compatibilité de Webpack
Présentation
Les bibliothèques de tracing Datadog (dd-trace
) ne sont malheureusement pas compatibles avec les bundlers tels que webpack, en raison de l’utilisation d’importations conditionnelles ainsi que d’autres problèmes. Bien que webpack ne puisse pas générer dd-trace
, votre application peut tout de même utiliser les bibliothèques dd-trace
et datadog-lambda-js
fournies par la couche Lambda Datadog prédéfinie. Pour ce faire, suivez les instructions ci-dessous.
webpack
Suivez les instructions d’installation pour Node.js et vérifiez que la couche Lambda Datadog pour Node.js a bien été ajoutée à votre fonction Lambda.
Supprimez datadog-lambda-js
et dd-trace
de votre fichier package.json
et de votre processus de build.
Définissez datadog-lambda-js
et dd-trace
comme des externals. Cela indique au bundler qu’il n’est pas nécessaire de les générer en tant que dépendances, puisqu’ils sont déjà disponibles dans le runtime Lambda fourni par la couche Lambda Datadog.
webpack.config.js
var nodeExternals = require("webpack-node-externals");
module.exports = {
// use webpack-node-externals to exclude all node dependencies.
// You can manually set the externals too.
externals: [nodeExternals(), "dd-trace", "datadog-lambda-js"],
};
Si vous utilisez serverless-webpack
et que vous avez défini l’option includeModules
sur une valeur autre que false
, serverless-webpack regroupe automatiquement les modules externes sous node_modules. Vous devez donc forcer l’exclusion de datadog-lambda-js
et dd-trace
. Ignorez cette étape si vous n’utilisez pas serverless-webpack
ou que l’option includeModules
n’est pas définie dans votre fichier serverless.yml.
serverless.yml
custom:
webpack:
# Note: You only need the following if you already have the includeModules option configured
includeModules:
# ... your existing configuration for includeModules
forceExclude:
- dd-trace
- datadog-lambda-js
packagerOptions:
scripts:
# optional, only needed when they are included as transitive dependencies
- rm -rf node_modules/datadog-lambda-js node_modules/dd-trace
esbuild
Suivez les instructions d’installation pour Node.js et vérifiez que la couche Lambda Datadog pour Node.js a bien été ajoutée à votre fonction Lambda.
Supprimez datadog-lambda-js
et dd-trace
de votre fichier package.json
et de votre processus de build.
Définissez datadog-lambda-js
et dd-trace
comme des externals. Cela indique au bundler qu’il n’est pas nécessaire de les générer en tant que dépendances, puisqu’ils sont déjà disponibles dans le runtime Lambda fourni par la couche Lambda Datadog.
Suivez les étapes indiquées à la rubrique Prise en charge d’esbuild (en anglais) pour utiliser le plug-in esbuild de Datadog. Celui-ci permet d’instrumenter des dépendances groupées.
esbuild.config.js (si vous utilisez esbuild-config)
{
"external": ["dd-trace", "datadog-lambda-js"],
}
serverless.yml (si vous utilisez serverless-esbuild)
custom:
esbuild:
exclude: ["dd-trace", "datadog-lambda-js", "aws-sdk"] # aws-sdk is needed because it is the default value for `exclude`
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: