Lambda - “错误类型”: “Runtime.InvalidEntrypoint”

0 投票
2 回答
83 浏览
提问于 2025-04-14 16:24

我有一个Python脚本,其中包含了一个处理程序,叫做[lambd_handler](https://i.stack.imgur.com/ZLcFG.png)。我还创建了一个Dockerfile(用于构建镜像的DockerFile),用来制作一个容器镜像,然后把这个镜像推送到ECR(一个云存储服务),并用它来创建一个Lambda函数。

现在我遇到的问题是:

{
  "errorType": "Runtime.InvalidEntrypoint",
  "errorMessage": "RequestId: 86339395-a02e-4122-b54e-9f80a7bfbd40 Error: exec: \"lambda_function.lambda_handler\": executable file not found in $PATH"
}

我不太确定该把什么作为入口点。我尝试了不同的解决方案,比如更改架构和构建设置。

因为我在使用M2的Mac,所以我觉得架构可能是问题所在,于是我更改了构建设置。

docker buildx build --platform linux/amd64 -t lambda-function .

但是在Lambda中测试时,仍然出现无效入口的错误。

2 个回答

-1

看起来你遇到的错误和你为 Lambda 函数指定的入口点有关。Lambda 期望入口点是一个 Python 文件,并且这个文件里要有一个函数,但它似乎找不到名为 lambda_function.lambda_handler 的可执行文件。

FROM python:3.12

# Set working directory
WORKDIR /app

# Copy lambda function code
COPY lambda_function.py .

# Install dependencies if any
# RUN pip install -r requirements.txt

# Specify the command to run your script
CMD ["lambda_function.lambda_handler"]
0

根据AWS的文档,你需要把“处理程序”文件移动到根路径。这个根路径用"${LAMBDA_TASK_ROOT}"来表示。

你可以使用COPY命令,把函数代码和运行所需的依赖项复制到{LAMBDA_TASK_ROOT},这是一个AWS Lambda定义的环境变量。

AWS文档链接:使用容器镜像进行Python部署

因此,Dockerfile应该看起来像这样:

FROM public.ecr.aws/lambda/python:3.12

# Copy requirements.txt
COPY requirements.txt ${LAMBDA_TASK_ROOT}

# Install the specified packages
RUN pip install -r requirements.txt

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.handler" ]

撰写回答