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

如何通过AWS CDK使用自定义命令在Lambda中安装指定版本sharp

解决AWS CDK中NodejsFunction安装sharp的原生模块依赖问题

方案一:自定义bundling安装命令

直接在CDK配置中指定安装sharp时的平台和架构参数,替换默认的安装流程:

this.sharpUser = new NodejsFunction(this, `sharpUser-${context.environment}`, {
  runtime: Runtime.NODEJS_18_X,
  handler: "handler",
  entry: join(__dirname, "./sharpUser.ts"),
  bundling: {
    nodeModules: ["sharp", "@aws-sdk/client-s3"],
    externalModules: ["aws-sdk"],
    // 自定义命令:先安装适配Linux x64的sharp及其他依赖,再执行编译
    command: [
      "bash", "-c",
      "npm install --platform=linux --arch=x64 sharp @aws-sdk/client-s3 && npm run build"
    ]
  },
});

说明:通过bash -c串联两条命令,确保先安装对应环境的sharp二进制包,再执行TypeScript编译(CDK默认的npm run build步骤)。

方案二:使用Docker镜像构建(推荐)

利用Docker容器模拟Lambda的Linux运行环境,从根源避免跨平台依赖问题:

import { DockerImage } from 'aws-cdk-lib';

this.sharpUser = new NodejsFunction(this, `sharpUser-${context.environment}`, {
  runtime: Runtime.NODEJS_18_X,
  handler: "handler",
  entry: join(__dirname, "./sharpUser.ts"),
  bundling: {
    nodeModules: ["sharp", "@aws-sdk/client-s3"],
    externalModules: ["aws-sdk"],
    // 使用与Lambda Node.js 18匹配的官方Linux镜像
    image: DockerImage.fromRegistry('node:18-bullseye-slim'),
    command: [
      "bash", "-c",
      "npm install sharp @aws-sdk/client-s3 && npm run build"
    ]
  },
});

说明:Lambda的Node.js 18运行环境基于Debian Bullseye,使用node:18-bullseye-slim镜像构建时,npm会自动编译适配Linux x64的sharp二进制文件,无需手动指定平台参数,兼容性更强。

方案三:通过package.json配置默认环境

在项目根目录的package.json中添加sharp的默认平台配置,让CDK安装时自动适配:

{
  "config": {
    "sharp": {
      "platform": "linux",
      "arch": "x64"
    }
  }
}

修改后保持原CDK配置不变即可,但此方法可能受本地环境影响,仅推荐本地与Lambda环境一致的场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:32