MacOS M1本地调用Quarkus Lambda原生构建函数遇问题求助
AWS SAM本地调用Quarkus Native Lambda函数报错分析与说明
问题场景
执行AWS SAM CLI本地调用Quarkus Native Lambda函数命令:
sam local invoke --template target/sam.native.yaml --event payload.json
操作使用镜像amazon/aws-sam-cli-build-image-provided。
环境配置
- 自定义GraalVM构建镜像配置文件
Dockerfile.graalbase:
FROM ghcr.io/graalvm/graalvm-ce:ol8-java11-22.2.0 AS build RUN gu install native-image WORKDIR /project VOLUME ["/project"] ENTRYPOINT ["native-image"]
- 构建自定义镜像命令:
docker build -f src/main/docker/Dockerfile.graalbase -t graalbase
- Quarkus Native打包命令:
mvn clean package -Dquarkus.package.type=native \ -Dquarkus.native.container-build=true \ -Dquarkus.native.builder-image=graalbase
- 额外Native Image编译参数:
-H:+RemoveSaturatedTypeFlows,\ -H:+PrintAnalysisStatistics
错误现象
执行调用后返回错误:
Mounting /private/var/folders/zm/0m9j6d_514q7sjpkgg6_7lzr0000gq/T/tmptq9x6jc9 as /var/task:ro,delegated inside runtime container START RequestId: 3cf00931-c409-426d-b568-98b5a2402da8 Version: $LATEST 16 Sep 2022 15:11:25,289 [ERROR] (rapid) Init failed error=fork/exec /var/task/bootstrap: no such file or directory InvokeID=
排查细节
进入运行容器后验证:
- 目标执行文件
/var/task/bootstrap实际存在:
ls -la /var/task/bootstrap -rwxr-xr-x 1 root root 115716600 Sep 16 15:12 /var/task/bootstrap
- 直接执行文件时触发架构不兼容错误:
exec /var/task/bootstrap /var/task/bootstrap: /lib/ld-linux-aarch64.so.1: bad ELF interpreter: No such file or directory
问题根源
核心为架构不匹配:生成的Native镜像为ARM64架构,但AWS SAM本地运行的容器是x86_64(Linux 64)架构。当前GraalVM不支持跨架构交叉编译,通过qemu实现跨架构构建的方案仍处于早期开发阶段。
此前尝试过相关社区替代方案,但存在构建卡住的问题。
临时解决方案建议
- 在x86_64架构机器上构建Native镜像,确保构建环境与SAM本地运行容器的架构一致
- 暂时避免在ARM64环境下构建后直接用SAM本地调用,等待跨架构编译支持成熟
内容的提问来源于stack exchange,提问作者Daniel Teleginski Camargo
相关产品推荐
相关产品推荐

