node.jsamazon-web-servicesaws-lambdadockerfilepdftron

How to install dependencies in base AWS Lambda Node.js Dockerfile image


I am writing an AWS Lambda function using Node.js which is deployed via a container image.

I have used the base Node.js Dockerfile image for Lambda provided at the link below to configure my image. This works well. My image is deployed and my Lambda function is running.

https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-create-from-base

Here is the Dockerfile:

FROM public.ecr.aws/lambda/nodejs:14

COPY index.js package.json cad/  ${LAMBDA_TASK_ROOT}

# Here I would like to install libgl1-mesa-dev, libx11-dev and libglu1-mesa-de

RUN npm install

CMD ["index.handler"]

However, I now need to install additional dependencies on the image. Specifically I need OpenGL to use PDFTron to convert CAD files to PDF, according to the PDFTron documentation here. So I require libgl1-mesa-dev, libx11-dev and libglu1-mesa-de.

The information on the AWS documentation above states:

Install any dependencies under the ${LAMBDA_TASK_ROOT} directory alongside the function handler to ensure that the Lambda runtime can locate them when the function is invoked.

If this was an ubuntu or alpine image I could install using apt-get or apk add. But neither is available on this base AWS Lambda Node image since this isn't an ubuntu or alpine image.

So my question is, how do I install libgl1-mesa-dev, libx11-dev and libglu1-mesa-de on this image so that the Lambda runtime can locate them when the function is invoked?


Solution

  • I think the equivalent for ubuntu, on Amazon Linux 2 (lambda is using it) would be:

    FROM public.ecr.aws/lambda/nodejs:14
    
    COPY index.js package.json cad/  ${LAMBDA_TASK_ROOT}
    
    RUN yum install -y libgl1-mesa-devel libx11-devel  mesa-libGL-devel
    
    RUN npm install
    
    CMD ["index.handler"]