Compatibilidad del rastreo de Lambda y webpack con Node.js
Las bibliotecas de rastreo de Datadog (dd-trace
) son conocidas por no ser compatibles con empaquetadores como webpack debido al uso de importaciones condicionales y otros problemas. Aunque webpack no puede compilar dd-trace
, tu aplicación puede seguir utilizando las bibliotecas dd-trace
y datadog-lambda-js
de la capa de Lambda de Datadog precompilada. Sigue las siguientes instrucciones.
webpack
Sigue las instrucciones de instalación para Node.js y asegúrate de que la capa de Lambda de Datadog para Node.js se añada a tu función de Lambda.
Elimina datadog-lambda-js
y dd-trace
de package.json
y del proceso de compilación.
Marca datadog-lambda-js
y dd-trace
como externos. De este modo se indica al empaquetador que omita compilarlos como dependencias, puesto que ya están disponibles en el tiempo de ejecución de Lambda de la capa de Lambda de 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 utilizas serverless-webpack
y tienes la opción includeModules
definida como cualquier valor distinto de false
, serverless-webpack automáticamente empaqueta módulos externos en node_modules. Por lo tanto, debes forzar la exclusión de datadog-lambda-js
y dd-trace
. Omite este paso si no utilizas serverless-webpack
o no tienes la opción includeModules
en tu archivo 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
Sigue las instrucciones de instalación para Node.js y asegúrate de que la capa de Lambda de Datadog para Node.js se añada a tu función de Lambda.
Elimina datadog-lambda-js
y dd-trace
de package.json
y del proceso de compilación.
Marca datadog-lambda-js
y dd-trace
como externos. De este modo se indica al empaquetador que omita compilarlos como dependencias, puesto que ya están disponibles en el tiempo de ejecución de Lambda de la capa de Lambda de Datadog.
Sigue los pasos de la página de soporte de Esbuild para utilizar el complemento Esbuild de Datadog. Esto permite la instrumentación de dependencias empaquetadas.
esbuild.config.js (si utilizas esbuild-config)
{
"external": ["dd-trace", "datadog-lambda-js"],
}
serverless.yml (si utilizas serverless-esbuild)
custom:
esbuild:
exclude: ["dd-trace", "datadog-lambda-js", "aws-sdk"] # aws-sdk is needed because it is the default value for `exclude`
Leer más
Additional helpful documentation, links, and articles: