aws / aws-lambda-nodejs-runtime-interface-client

Apache License 2.0
176 stars 56 forks source link

node:16-alpine with aws-lambda-ric docker build fails #90

Open expertneo opened 7 months ago

expertneo commented 7 months ago

Dear Experts,

I would like to draw your attention to (or seek for help about) an issue we are having right now: Having "RUN npm i aws-lambda-ric" latest or anything down to 1.1.0 in Dockerfile would give the error below.

ARG FUNCTION_DIR="/app"

#*****************************************************************************
#  Builder Stage
#****************************************************************************/
FROM node:16-alpine3.18 AS base

# Include global arg in this stage of the build
ARG FUNCTION_DIR

# The working directory is where "npm install" created the node_modules folder.
WORKDIR ${FUNCTION_DIR}

# Install aws-lambda-cpp build dependencies. aws-lambda-cpp is used by aws-lambda-ric which is a
# node-gyp compiled dependency. Find it in package.json.
# See the Node.js example at https://github.com/aws/aws-lambda-nodejs-runtime-interface-client
RUN apk update && apk add --no-cache \
    build-base \
    libtool \
    autoconf \
    automake \
    make \
    cmake \
    libcurl \
    elfutils-dev \
    python3

# Copy dependencies
COPY package*.json ./

# Install Node.js dependencies
RUN npm ci

# Install the AWS Lambda Runtime Interface Client (RIC) that is only required within this Docker container (not in package.json on development machine).
# It helps AWS to run the Lambda function code that autoiXpert provides.
RUN npm install aws-lambda-ric

COPY src/main ./

#*****************************************************************************
#  Production Stage
#****************************************************************************/
FROM node:16-alpine3.18

# Include global arg in this stage of the build
ARG FUNCTION_DIR

# The working directory is where "npm install" created the node_modules folder.
WORKDIR ${FUNCTION_DIR}

# Update packages causing vulnerability
RUN apk update && apk upgrade --no-cache libcrypto3 libssl3

COPY --from=base app/dist ${LAMBDA_TASK_ROOT}

ENTRYPOINT ["/usr/local/bin/npx", "aws-lambda-ric"]
CMD [ "app.lambdaHandler" ]
 => [base 10/13] RUN npm ci                                                                                                                                                          318.1s
 => ERROR [base 11/13] RUN npm install aws-lambda-ric                                                                                                                                 91.8s
------
 > [base 11/13] RUN npm install aws-lambda-ric:
#16 91.71 npm ERR! code 1
#16 91.71 npm ERR! path /app/node_modules/aws-lambda-ric
#16 91.71 npm ERR! command failed
#16 91.71 npm ERR! command sh -c -- ./scripts/preinstall.sh
#16 91.71 npm ERR! libtoolize: putting auxiliary files in '.'.
#16 91.71 npm ERR! libtoolize: copying file './ltmain.sh'
#16 91.71 npm ERR! libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
#16 91.71 npm ERR! libtoolize: copying file 'm4/libtool.m4'
#16 91.71 npm ERR! libtoolize: copying file 'm4/ltoptions.m4'
#16 91.71 npm ERR! libtoolize: copying file 'm4/ltsugar.m4'
#16 91.71 npm ERR! libtoolize: copying file 'm4/ltversion.m4'
#16 91.71 npm ERR! libtoolize: copying file 'm4/lt~obsolete.m4'
#16 91.72 npm ERR! libtoolize: Remember to add 'LT_INIT' to configure.ac.
#16 91.72 npm ERR! checking whether to enable maintainer-specific portions of Makefiles... no
#16 91.72 npm ERR! checking whether make supports nested variables... yes
#16 91.72 npm ERR! checking whether to enable debug build options... no
.
.
.
.
.
#16 91.81 npm ERR! parallel-tests: installing './test-driver'
#16 91.81 npm ERR! configure: WARNING: zlib disabled
#16 91.81 npm ERR! configure: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.
#16 91.81 npm ERR! configure: WARNING: Use --with-openssl, --with-gnutls, --with-wolfssl, --with-mbedtls, --with-nss, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl or --with-rustls to address this.
#16 91.81 npm ERR! configure: WARNING: libgsasl was not found
#16 91.81 npm ERR! configure: WARNING: disabling built-in manual
#16 91.81 npm ERR! CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
#16 91.81 npm ERR!   Could NOT find Backtrace (missing: Backtrace_LIBRARY Backtrace_INCLUDE_DIR)
#16 91.81 npm ERR! Call Stack (most recent call first):
#16 91.81 npm ERR!   /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
#16 91.81 npm ERR!   /usr/share/cmake/Modules/FindBacktrace.cmake:90 (find_package_handle_standard_args)
#16 91.81 npm ERR!   CMakeLists.txt:44 (find_package)
#16 91.81
#16 91.81 npm ERR! A complete log of this run can be found in:
#16 91.81 npm ERR!     /root/.npm/_logs/2023-11-23T16_18_49_501Z-debug-0.log
------
executor failed running [/bin/sh -c npm install aws-lambda-ric]: exit code: 1

Any help would be appreciated.

Thanks and regards, Ben

stravito-christian commented 7 months ago

The workaround mentioned in https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/issues/68#issuecomment-1571877109 worked for me.

roshitho commented 6 months ago

The workaround mentioned in #68 (comment) worked for me.

I tried the same but it gave me multiple errors (mainly something like below)

84.07 npm ERR! /app/node_modules/aws-lambda-ric/deps/aws-lambda-cpp-0.2.8/src/backward.h:1295:25: error: request for member 'dli_fname' in 'symbol_info', which is of non-class type 'int'
 84.07 npm ERR!  1295 |         if (symbol_info.dli_fname == argv0_) {
84.07 npm ERR!       |                         ^~~~~~~~~

Dockerfile builder stage for me looks like below:

ARG FUNCTION_DIR="/app"

#*****************************************************************************
#  Builder Stage
#****************************************************************************/
FROM node:20-alpine3.17 AS build-image

ARG FUNCTION_DIR

WORKDIR ${FUNCTION_DIR}

RUN apk update && apk add --no-cache \
    build-base \
    g++ \
    git \
    libtool \
    autoconf \
    automake \
    make \
    cmake \
    elfutils-dev \
    python3

RUN apk add --no-cache --update --repository=https://dl-cdn.alpinelinux.org/alpine/v3.16/main libexecinfo-dev

# Copy function code
RUN mkdir -p ${FUNCTION_DIR}
COPY . ${FUNCTION_DIR}

WORKDIR ${FUNCTION_DIR}

# Install Node.js dependencies
RUN npm install

RUN npm install aws-lambda-ric
1xtr commented 5 months ago

I have same issue with Could NOT find Backtrace (missing: Backtrace_LIBRARY Backtrace_INCLUDE_DIR)

mjperrone commented 4 months ago

This is affecting me as well, and the linked workaround is not working for me.. @andclt @briensea is this something you can help with or pull in the right parties?

Alpine is explicitly called out as being supported.

ctrmmb commented 3 months ago

Issue is affecting me as well. It seems libbacktrace has been made optional from aws-lambda-cpp 0.2.9 to solve this exact issue.