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

如何通过TypeScript CDK在S3 BucketDeployment部署前压缩目录?

在CDK的BucketDeployment中上传目录前执行压缩操作的实现方法

可以实现,不过BucketDeployment本身没有直接提供压缩配置项,需要通过自定义Asset的构建步骤来完成目录压缩后再上传。

具体实现方式

通过s3Deploy.Source.asset()的bundling配置,在CDK构建阶段调用压缩命令处理目标目录,生成压缩包后再上传到S3:

import * as s3Deploy from 'aws-cdk-lib/aws-s3-deployment';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { Construct } from 'constructs';

// 在你的Stack类中添加以下代码
new s3Deploy.BucketDeployment(this, 'bucket-code-deployment', {
  sources: [
    s3Deploy.Source.asset('../infra/lambdas/lambda/directory', {
      bundling: {
        // 使用轻量的alpine镜像执行压缩命令
        image: s3Deploy.BundlingDockerImage.fromRegistry('alpine:latest'),
        command: [
          'sh', '-c',
          // 将当前目录下所有内容打包成directory.zip,输出到CDK指定的输出目录
          'zip -r /asset-output/directory.zip .'
        ],
      },
    })
  ],
  destinationBucket: lambdaCodeBucket,
  // 可选:指定压缩包上传到S3的前缀路径
  destinationKeyPrefix: 'compressed/',
});

补充说明

  • 如果需要用tar.gz格式压缩,把zip命令替换为tar -czf /asset-output/directory.tar.gz .即可。
  • 若使用其他Linux镜像(如ubuntu),需要先安装压缩工具,比如把命令改成apt-get update && apt-get install -y zip && zip -r /asset-output/directory.zip .。
  • 压缩后的文件会直接上传到S3,后续如果需要解压使用(比如作为Lambda层),可以在运行时处理,或者结合其他工具在部署阶段完成解压。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:04:57