You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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"]

恳请各位帮忙解决这个问题。


问题分析与解决方案

核心问题拆解

  1. Lambda镜像运行时入口配置不符规范:AWS Lambda自定义镜像要求遵循特定的入口格式,你的当前配置未匹配Lambda镜像运行时的要求。
  2. 代码存在语法/逻辑错误:
    • p.py中函数c的参数重复定义为a1,返回字典引用了未定义的a2、a3
    • lambda_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:24:55