By using AWS re:Post, you agree to the Terms of Use

Problem starting Docker image as lambda function source

0

I am trying to use a container image as the source for a lambda, but am not able to start the container.

No matter what I set the CMD to, I get entrypoint requires the handler name to be the first argument

My Dockerfile looks something like:

FROM public.ecr.aws/lambda/python:3.8
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY custom_module ${LAMBDA_TASK_ROOT}
COPY app.py ${LAMBDA_TASK_ROOT}
CMD \[app.lambda_handler]

The function to run in app.py is definitely called lambda_handler, and I've run out of things to change.

Anyone have any thoughts?

Edited by: arogers on Jan 29, 2021 4:52 PM

asked 2 years ago599 views
3 Answers
0

arogers wrote:
I am trying to use a container image as the source for a lambda, but am not able to start the container.

No matter what I set the CMD to, I get entrypoint requires the handler name to be the first argument

My Dockerfile looks something like:

FROM public.ecr.aws/lambda/python:3.8
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY custom_module ${LAMBDA_TASK_ROOT}
COPY app.py ${LAMBDA_TASK_ROOT}
CMD \[app.lambda_handler]

The function to run in app.py is definitely called lambda_handler, and I've run out of things to change.

Anyone have any thoughts?

Edited by: arogers on Jan 29, 2021 4:52 PM
arogers wrote:
I am trying to use a container image as the source for a lambda, but am not able to start the container.

No matter what I set the CMD to, I get entrypoint requires the handler name to be the first argument

My Dockerfile looks something like:

FROM public.ecr.aws/lambda/python:3.8
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY custom_module ${LAMBDA_TASK_ROOT}
COPY app.py ${LAMBDA_TASK_ROOT}
CMD \[app.lambda_handler]

The function to run in app.py is definitely called lambda_handler, and I've run out of things to change.

Anyone have any thoughts?

Edited by: arogers on Jan 29, 2021 4:52 PM
arogers wrote:
I am trying to use a container image as the source for a lambda, but am not able to start the container.

No matter what I set the CMD to, I get entrypoint requires the handler name to be the first argument

My Dockerfile looks something like:

FROM public.ecr.aws/lambda/python:3.8
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY custom_module ${LAMBDA_TASK_ROOT}
COPY app.py ${LAMBDA_TASK_ROOT}
CMD \[app.lambda_handler]

The function to run in app.py is definitely called lambda_handler, and I've run out of things to change.

Anyone have any thoughts?

Edited by: arogers on Jan 29, 2021 4:52 PM
Hey arogers,

Here is what I have as a Dockerfile that is working for me, this may work for you too. However, I'm currently having issues with OpenCV.

FROM public.ecr.aws/lambda/python:3.8  
  
COPY requirements.txt ./  
  
RUN pip install --upgrade pip  
RUN pip install -r requirements.txt  
  
COPY . ./  
CMD \[ "app.handler" ]  

Edited by: samatvery on Feb 3, 2021 12:23 PM

Edited by: samatvery on Feb 3, 2021 12:23 PM

answered 2 years ago
0

Can you please try placing your app.handler inside quotes ["app.handler"] instead of keeping it without quotes [app.lambda_handler] ?
I believe docker needs between double quotes and it worked for me.

answered 2 years ago
0

Hi @samatvery, I tried customising the base image but it always fails, refer to my stackoverflow question here: https://stackoverflow.com/questions/66369212/aws-lambda-is-unable-to-find-app-handler-custom-docker-image

answered 2 years ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions