Solucionar problemas de errores de paquetes demasiado grandes en las aplicaciones serverless
Esta guía es una ayuda para solucionar el error “Code uncompressed size is greater than max allowed size of 272629760”. Este error es más común cuando se instrumentan aplicaciones serverless de Node.js mediante el Datadog Serverless Plugin. La estrategia para solucionar este problema también puede aplicarse al mismo error en otros lenguajes o métodos de despliegue.
El error indica que el tamaño del código sin comprimir de tu función supera el límite de 250 MB. Tanto el paquete de la función (el artefacto .zip
que contiene el código de la función y sus dependencias) como las capas de Lambda configuradas en la función se cuentan para este límite. Examina ambos para encontrar la causa raíz.
Capas
Por lo general, Datadog añade dos capas de Lambda para la instrumentación:
- Una biblioteca específica del lenguaje que instrumenta el código de la función.
- La extensión, que agrega, almacena en buffer y reenvía los datos de observabilidad al backend de Datadog.
Inspecciona el contenido y el tamaño de las capas de Lambda de Datadog mediante el comando de la AWS CLI aws lambda get-layer-version
. Por ejemplo, la ejecución de los siguientes comandos proporciona enlaces para descargar las capas de Lambda de _Datadog-Node20-x versión 115 y de _Datadog-Extension versión 65 e inspeccionar el tamaño sin comprimir (unos 30 MB combinados). El tamaño sin comprimir varía según las capas y las versiones. Reemplaza el nombre de la capa y el número de versión en el siguiente ejemplo por los que utilizan tus aplicaciones:
aws lambda get-layer-version \
--layer-name arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Node20-x \
--version-number 115
aws lambda get-layer-version \
--layer-name arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Extension \
--version-number 65
Además de las capas de Lambda de Datadog, inspecciona también otras capas de Lambda añadidas (o que se van a añadir) a tus funciones. Si utilizas el Serverless Framework, puedes encontrar la plantilla de CloudFormation desde la carpeta oculta .serverless
después de ejecutar el comando deploy
o package
, y la lista de capas de Lambda desde la sección Layers
(Capas).
Paquete
El paquete de despliegue de la función puede contener archivos grandes o código que no necesitas. Si utilizas el Serverless Framework, puedes encontrar el paquete de despliegue generado (archivo .zip
) en la carpeta oculta .serverless
después de ejecutar el comando deploy
o package
.
Si la suma del tamaño del paquete de despliegue y las capas no supera el límite, ponte en contacto con AWS Support para que lo investigue. Si el tamaño total supera el límite, inspecciona el paquete de despliegue y excluye los archivos de gran tamaño que no necesitas en el tiempo de ejecución mediante la opción package (paquete).
Dependencias
La capa de Lambda de Datadog empaqueta las bibliotecas de instrumentación y las pone a disposición para su uso en el entorno de ejecución de Lambda, por lo que no es necesario especificar datadog-lambda-js
y dd-trace
como dependencias en el archivo package.json
. Si necesitas las bibliotecas de Datadog para la compilación local o los tests, especifícalas como devDependencies
para que queden excluidas del paquete de despliegue. Del mismo modo, serverless-plugin-datadog
solo se necesita para el desarrollo y debe especificarse en devDependencies
.
Inspecciona también otras dependencias (la carpeta node_modules
) incluidas en el paquete de despliegue y conserva solo las que necesites en dependencies
(dependencias).
Empaquetadores
El uso de un empaquetador como Webpack o esbuild puede reducir en gran medida el tamaño del paquete de despliegue al incluir únicamente el código que se utiliza. Consulta Compatibilidad del rastreo de Lambda y los empaquetadores con Node.js para ver las configuraciones de webpack necesarias.
Datadog-ci
Dependiendo de tu caso de uso, puede resultarte más fácil utilizar el comando datadog-ci lambda instrument
para solucionar problemas con los tamaños de los paquetes. El comando datadog-ci lambda instrument
configura la misma instrumentación que serverless-plugin-datadog. Para obtener más información, consulta el repositorio datadog-ci.
Obtener ayuda
Si necesitas que el equipo de asistencia de Datadog te ayude con la investigación del problema, envía un ticket con la siguiente información:
- Las capas de Lambda configuradas en la función (nombre y versión, o ARN).
- El paquete de despliegue de la función (o una captura de pantalla que muestre el contenido y el tamaño del paquete descomprimido) que se cargará en AWS.
- Los archivos de configuración del proyecto, con los secretos cifrados redactados:
serverless.yaml
, package.json
, package-lock.json
, yarn.lock
, tsconfig.json
y webpack.config.json
.
Referencias adicionales
Más enlaces, artículos y documentación útiles: