Lambda 容器图像抱怨入口点需要处理程序名称作为第一个参数

bjf*_*her 7 amazon-web-services docker aws-lambda

例如,当我运行 AWS Lambda 容器 (Docker) 映像时:

docker run public.ecr.aws/lambda/java bash
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

entrypoint requires the handler name to be the first argument
Run Code Online (Sandbox Code Playgroud)

处理程序名称应该是什么?

bjf*_*her 9

这取决于运行时的语言是什么。例如,如果是 NodeJS,则处理程序名称应如下所示:

"app.handler"
Run Code Online (Sandbox Code Playgroud)

如果是Java,那么它应该是这样的:

"com.example.LambdaHandler::handleRequest"
Run Code Online (Sandbox Code Playgroud)

图像将在其中查找它们,LAMBDA_TASK_ROOT因此您需要确保在构建图像时将代码(或编译后的代码)复制到该文件夹​​,例如:

COPY target/* ${LAMBDA_TASK_ROOT}
Run Code Online (Sandbox Code Playgroud)

  • 这是 CMD 还是 ENTRYPOINT ? (3认同)

Gab*_*ers 8

就我而言,我想在 gitlab-ci 中使用 lambda 图像。解决方案是通过将以下行添加到我的 Dockerfile 来覆盖基本映像入口点:

ENTRYPOINT ["/bin/bash", "-l", "-c"]
Run Code Online (Sandbox Code Playgroud)

请注意,这意味着该图像将无法再在 Amazon 的 lambda 中使用。