使用Docker镜像部署AWS Lambda函数遇Runtime.InvalidEntrypoint错误求助
AWS Lambda Docker镜像部署失败求助
我花了5小时尝试用Docker镜像部署AWS Lambda函数,始终无法成功返回响应。以下是相关信息:
相关文件内容
Dockerfile
FROM python:3.9.6-buster WORKDIR /app COPY . /app CMD ["python", "/app/lambda_handler.py"]
p.py
def c(a1, a1, a1): result = { "a1": a1, "a2": a2, "a3": a3, } return result
lambda_handler.py
import json from p import c def lambda_handler(event, context): arg1 = event["a1"] arg2 = event["a2"] arg3 = event["a3"] result = classify(arg1, arg2, arg3) response = {"statusCode": 200, "body": result} return json.dumps(response, indent=4, default=str)
错误信息
{
"errorType": "Runtime.InvalidEntrypoint",
"errorMessage": "RequestId: 330fa2c3-f68b-4225-a53c-96f2409f186d Error: exec: "lambda_function.lambda_handler": executable file not found in $PATH"
}
已尝试的方法
- 将文件压缩后直接上传至Lambda,此方法可行
- 查阅官方文档,尝试多种CMD组合,比如
app.lambda_function.lambda_handler、lambda_function.lambda_handler(带/不带引号) - 尝试设置ENTRYPOINT为
python,CMD指向/app/lambda_handler - 仅用ENTRYPOINT配置为
["python", "/app/lambda_handler.py"]
恳请各位帮忙解决这个问题。
问题分析与解决方案
核心问题拆解
- Lambda镜像运行时入口配置不符规范:AWS Lambda自定义镜像要求遵循特定的入口格式,你的当前配置未匹配Lambda镜像运行时的要求。
- 代码存在语法/逻辑错误:
p.py中函数c的参数重复定义为a1,返回字典引用了未定义的a2、a3lambda_handler.py调用了未定义的classify函数,实际应调用导入的c- 返回格式不符合Lambda要求(Lambda期望返回字典,而非手动序列化后的字符串)
修复步骤
1. 修正Dockerfile配置
推荐使用AWS官方Lambda Python基础镜像,自动适配运行时环境:
FROM public.ecr.aws/lambda/python:3.9 # 将代码复制到Lambda默认工作目录 COPY . ${LAMBDA_TASK_ROOT} # 若有依赖需安装,取消注释以下行 # RUN pip install -r requirements.txt # 指定Lambda处理程序:<文件名>.<函数名> CMD ["lambda_handler.lambda_handler"]
2. 修正代码错误
- p.py:修正参数定义与返回值引用
def c(a1, a2, a3): result = { "a1": a1, "a2": a2, "a3": a3, } return result
- lambda_handler.py:修正函数调用与返回格式
import json from p import c def lambda_handler(event, context): arg1 = event["a1"] arg2 = event["a2"] arg3 = event["a3"] result = c(arg1, arg2, arg3) # Lambda运行时会自动处理字典的序列化,只需返回标准格式字典 return { "statusCode": 200, "body": json.dumps(result) }
3. 本地测试(可选)
通过Lambda Runtime Interface Emulator本地验证镜像:
# 安装RIE工具 mkdir -p ~/.aws-lambda-rie && curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && chmod +x ~/.aws-lambda-rie/aws-lambda-rie # 构建镜像 docker build -t lambda-test . # 启动容器 docker run -p 9000:8080 lambda-test # 发送测试请求 curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"a1": "test1", "a2": "test2", "a3": "test3"}'
内容的提问来源于stack exchange,提问作者dimButTries
相关产品推荐
相关产品推荐

