当我运行 AWS Lambda 容器 (Docker) 映像时,例如:
docker run public.ecr.aws/lambda/java bash
我收到以下错误:
entrypoint requires the handler name to be the first argument
处理程序名称应该是什么?
这取决于运行时的语言是什么。例如,如果是 NodeJS,那么处理程序名称应该如下所示:
"app.handler"
如果是Java,那么它应该是这样的:
"com.example.LambdaHandler::handleRequest"
图像将在
LAMBDA_TASK_ROOT
中查找它们,因此您需要确保在构建图像时将代码(或编译后的代码)复制到该文件夹,例如:
COPY target/* ${LAMBDA_TASK_ROOT}
就我而言,我想在 gitlab-ci 中使用 lambda 图像。 解决方案是通过将以下行添加到我的 Dockerfile 来覆盖基本映像入口点:
ENTRYPOINT ["/bin/bash", "-l", "-c"]
请注意,这意味着该图像将不再可在亚马逊的 lambda 中使用。
线程中的人是对的,我用我的 Node.js 小脚本卡在同一个地方。
所以,对我来说正确的解决方案是添加
ENTRYPOINT ["/lambda-entrypoint.sh", "helloWorldFunction.handler"]
码头工人:
FROM public.ecr.aws/lambda/nodejs:14
COPY helloWorldFunction.js package*.json ./
RUN npm install
ENTRYPOINT ["/lambda-entrypoint.sh", "helloWorldFunction.handler"]
CMD [ "helloWorldFunction.handler" ]
lambda-entrypoint.sh 已经放置在 aws 基础镜像中,不需要 手动添加
helloWorldFunction.js:
exports.handler = async (event, context) => {
return "Hello World!";
};
另外,如果您使用 Visual Studio 和 AWS Toolkit 进行部署 - 请清除 aws-lambda-tools-default.json 中的“image-command”字段,因为它会覆盖 docker 的 CMD
我想添加我的系统和场景,以防有人做类似的事情(Windows)。我收到此错误消息,但实际上是在本地测试我的 python Lambda 和 Docker 容器,然后将其放入云中。我的项目目录结构是src/main/main.py
。这使得我的 Dockerfile 看起来像这样:
# Use the official AWS Lambda Python base image.
FROM public.ecr.aws/lambda/python:3.11
# Set the working directory.
WORKDIR /var/task
# Copy contents of local folders into /var/task/{directory-name}, in the container.
COPY ./main ./main
COPY ./utils ./utils
COPY __init__.py ./
# If you have additional module requirements, copy the dependencies.txt file and install them.
COPY dependencies.txt ./
RUN pip install -r dependencies.txt
# Set the Lambda handler function name - folder.file.function
CMD ["main.main.handler"]
对我来说,当我开始在 Docker 命令行参数中使用--platform linux/amd64
时,这个错误就得到了修复。 IE。以下三步过程:
run docker build --platform linux/amd64 -t my_image_name:test .
docker run --platform linux/amd64 my_image_name:test -p 9000:8080.
curl "http://localhost:9000/2015-03-31/functions/function/invocations"
-d '{"payload":"hello world!"}'
AWS 文档此处