我有几个使用 python AWS CDK 部署的 Docker Lambda。我收到此错误:
Lambda function XXX reached terminal FAILED state due to
InvalidImage(ImageLayerFailure: UnsupportedImageLAyerDetected - Layer
Digest sha256: XXX) and failed to stabilize
我们使用
cdk deploy
进行部署,并且我的团队在使用相同的 Dockerfile 部署相同的 lambda 时不会遇到这样的问题。所以我相信它必须与我当地的环境有关?
我使用的是 Macbook M3,所以我的 .zshrc 中有
export DOCKER_DEFAULT_PLATFORM='linux/amd64'
。无论 AWS 中是否已存在堆栈,我都会收到此错误。
我们有点困惑,所以任何想法将不胜感激。谢谢
您遇到的错误 UnsupportedImageLayerDetected 表示 AWS Lambda 运行时无法处理 Docker 映像中的一层或多层。这通常与架构兼容性或基础镜像层的不匹配有关。 由于您使用的是 M3 MacBook(ARM 架构),但强制使用 DOCKER_DEFAULT_PLATFORM='linux/amd64',因此层的构建方式可能仍然存在差异,特别是当 Docker 设置处理模拟的方式存在问题时。
使用以下命令清除 Docker 缓存:
docker system prune -a
并尝试通过添加平台在 CDK 部署过程中显式设置平台:
lambda.DockerImageFunction(
self, 'MyLambdaFunction',
code=lambda.DockerImageCode.from_image_asset('path_to_your_docker',
platform='linux/amd64')
)
如果本地模拟存在问题并引入无效层,AWS CDK 将使用您的本地 docker 环境来构建和推送映像。不管你如何构建,它都会引起问题。 你可以使用这个命令:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
确保 QEMU(用户空间模拟器)在 Docker 中正确设置并将其配置为支持跨平台模拟。