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

Mac M1环境Quarkus Native部署Lambda遇exec format error求助

解决Quarkus Native镜像在AWS Lambda(含本地SAM)的exec format error问题

核心原因

你的M1 Mac是arm64架构,构建的Native二进制为arm64格式,但AWS Lambda默认使用x86_64架构环境,本地SAM若未指定架构也会默认用x86_64,导致二进制格式不兼容,触发exec format error。


分步解决方案

1. 强制设置Lambda函数架构为arm64

不管是本地SAM测试还是云端Lambda部署,必须明确指定架构为arm64:

  • 云端Lambda:创建/修改函数时,在"基本信息"中选择"架构"为arm64(对应Graviton2处理器)。
  • 本地SAM:在SAM模板文件(如template.yml)中添加架构配置:
    Resources:
      YourLambdaFunction:
        Type: AWS::Serverless::Function
        Properties:
          # 保留你已有的配置(CodeUri、Handler、Runtime等)
          Architectures:
            - arm64
    

2. 正确构建适配Lambda arm64环境的Native镜像

使用container-build时,需指定arm64平台的Quarkus Native构建镜像,避免默认x86_64镜像产出不兼容的二进制:

quarkus build --native --no-tests \
  -Dquarkus.native.container-build=true \
  -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:22.3-java17 \
  -Ddocker.platform=linux/arm64

注:22.3-java17版本需与你使用的GraalVM版本(22.3.0)匹配。

3. 验证构建的二进制架构

在本地执行以下命令,确认产出的bootstrap二进制为arm64架构:

lipo -info target/bootstrap

输出应显示Non-fat file: target/bootstrap is architecture: arm64,说明构建正确。

4. 重新部署并测试

  • 本地SAM:重新打包部署后,执行sh target/manage.sh native invoke测试。
  • 云端Lambda:上传新构建的Native包,确保函数架构已设置为arm64,再触发调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:45