Lambda - “错误类型”: “Runtime.InvalidEntrypoint”
我有一个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" ]