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

M1 Mac上如何让CDK为x86_64打包Lambda层以统一资产哈希值?

解决M1 MacBook与GitHub Actions上CDK快照测试资产哈希不一致问题

问题背景

在M1 MacBook本地和GitHub Actions环境中运行CDK快照测试时,出现资产哈希值不一致的情况。对比两地生成的cdk.out目录后,发现差异源于Lambda层的资产打包:

  • 本地打包时,charset_normalizer安装的是aarch64架构的库文件(md.cpython-310-aarch64-linux-gnu.so等)
  • GitHub Actions打包时,对应文件为x86_64架构版本(md.cpython-310-x86_64-linux-gnu.so等)

曾尝试在BundlingOptions中指定platform: 'linux/amd64',但未解决问题。

根本原因

仅在CDK的bundling配置中指定平台无效,因为构建Docker镜像时未指定目标架构。M1 MacBook默认构建arm64架构的镜像,容器内运行pip时会下载对应arm架构的依赖库,导致本地打包产物与GitHub Actions(x86_64环境)的产物存在差异。

解决方案

需要在两个层面指定x86_64架构:构建Docker镜像时指定平台,同时保留bundling阶段的平台配置。

修改CDK代码中的镜像构建配置

在cdk.DockerImage.fromBuild方法中添加platform参数,强制构建amd64架构的镜像:

const lambdaLayer = new lambda.LayerVersion(this, 'layer', {
  code: Code.fromAsset(pathToLayerSource, {
    bundling: {
      image: cdk.DockerImage.fromBuild(pathToLayerSource, { 
        file: 'Dockerfile',
        platform: 'linux/amd64' // 关键:构建镜像时指定amd64平台
      }),
      command: ['bash', '-c', 'rsync -a --exclude Pipfile /tmp/build/ /asset-output'],
      platform: 'linux/amd64', // 确保bundling容器以amd64架构运行
    },
  }),
  description: `Layer for ${Generator.SERVICE_NAME} stack`,
  layerVersionName: commons.getIdentifierForStage(Generator.SERVICE_NAME),
});

验证效果

修改后重新在本地执行CDK打包,检查Lambda层的python目录下的charset_normalizer相关文件,确认已变为x86_64架构的版本。此时本地生成的资产哈希值应与GitHub Actions环境一致,快照测试可正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:36