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

使用CodeBuild构建的Lambda ECR镜像无法正常运行的原因排查

解决Lambda使用ECR镜像时的exec format error问题

问题背景

通过CodeBuild构建用于Lambda的ECR镜像,构建速度正常,但Lambda运行时抛出以下错误:

RequestId: 614fa6a4-2dad-4c5a-8527-8d060b80f86d Error: fork/exec /lambda-entrypoint.sh: exec format error
Runtime.InvalidEntrypoint

已确认app.py中存在lambda_handler函数。

核心原因及修复方案

1. 架构不匹配(最常见原因)

该错误90%以上是因为CodeBuild构建的镜像架构与Lambda函数的运行架构不兼容:
Lambda支持x86_64和arm64(Graviton2)两种架构,若CodeBuild用x86_64环境构建镜像,但Lambda配置为arm64,反之亦然,就会触发此错误。

修复步骤:

  • 确认Lambda函数的架构:进入Lambda控制台,查看函数配置的"架构"选项(x86_64/arm64)。
  • 调整CodeBuild项目的环境架构:进入CodeBuild项目设置,修改"环境"中的"镜像"为对应架构的标准镜像:
    • 若Lambda用x86_64:选择aws/codebuild/amazonlinux2-x86_64-standard:3.0或更高版本
    • 若Lambda用arm64:选择aws/codebuild/amazonlinux2-aarch64-standard:3.0或更高版本
  • 重新构建并推送镜像:触发CodeBuild重新构建,确保镜像架构与Lambda一致。

2. 可选:Docker构建时强制指定平台

如果无法修改CodeBuild环境架构,可在buildspec.yml的docker build命令中添加--platform参数,强制匹配Lambda的架构:

# 修改buildspec.yml中的docker build命令
- docker build --platform linux/amd64 -t ${ecr_repo} . --build-arg REGION=${region}
# 若Lambda用arm64则改为:--platform linux/arm64

3. 修正buildspec中的账号笔误

你的buildspec.yml中,repo_uri使用的账号是123456789100,但docker login命令中的账号是12345678900,这会导致镜像推送至错误仓库,建议修正为一致的账号ID:

# 修正后的docker login命令
- aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123456789100.dkr.ecr.ap-northeast-2.amazonaws.com

验证方法

重新构建镜像后,可通过以下命令本地检查镜像架构:

docker inspect ${repo_uri} | grep Architecture

确保输出的架构与Lambda函数的架构一致。

内容的提问来源于stack exchange,提问作者SecY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:03:18