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

如何在AWS CDK的CloudFormation中突破CodePipeline构件大小限制

基于CDK创建的CodePipeline 256MB构件上限解决方案实现

核心逻辑

在资产发布阶段完成资产同步到S3/ECR后、CloudFormation部署阶段前,新增一个轻量构件生成阶段,剔除cloud assembly中所有实际资产文件,仅保留CFN模板及部署必需的元数据文件,后续所有部署动作使用该瘦身构件作为输入即可解决大小超限问题。

实现步骤

1. 声明构件与瘦身用CodeBuild项目

首先导入必要依赖包:aws-cdk-lib/aws-codepipeline、aws-cdk-lib/aws-codepipeline-actions、aws-cdk-lib/aws-codebuild,之后定义构件和构建项目:

// 原有合成阶段输出的完整cloud assembly构件
const fullCloudAssembly = new codepipeline.Artifact('FullCloudAssembly');
// 瘦身完成的轻量构件,供后续所有部署阶段使用
const slimCfnArtifact = new codepipeline.Artifact('SlimCfnArtifact');

// 定义瘦身逻辑的CodeBuild项目
const slimAssemblyProject = new codebuild.PipelineProject(this, 'SlimAssemblyBuild', {
  environment: {
    buildImage: codebuild.LinuxBuildImage.STANDARD_6_0,
  },
  buildSpec: codebuild.BuildSpec.fromObject({
    version: '0.2',
    phases: {
      build: {
        commands: [
          // 进入CDK默认输出的cloud assembly目录
          'cd $CODEBUILD_SRC_DIR/cdk.out',
          // 删除所有实际资产文件:压缩包、镜像层、assets目录
          'find . -type f \( -name "*.zip" -o -name "*.tar" -o -name "*.tar.gz" -o -name "*.docker" \) -delete',
          'rm -rf ./assets',
          // 按需调整删除规则,避免误删自定义元数据
          'ls -la'
        ]
      },
      artifacts: {
        'base-directory': '$CODEBUILD_SRC_DIR/cdk.out',
        files: ['**/*']
      }
    }
  })
});

2. 插入瘦身阶段到流水线

将该阶段放在资产发布阶段之后、所有部署阶段之前:

// 原有流水线实例
const pipeline = new codepipeline.Pipeline(this, 'BusinessPipeline', {
  // 原有配置保持不变
});

pipeline.addStage({
  stageName: 'SlimCloudAssembly',
  actions: [
    new codepipeline_actions.CodeBuildAction({
      actionName: 'BuildSlimArtifact',
      project: slimAssemblyProject,
      input: fullCloudAssembly,
      outputs: [slimCfnArtifact]
    })
  ]
});

3. 替换后续部署动作的输入构件

将所有CloudFormation部署动作的输入从原有完整构件替换为瘦身构件即可:

// 修改前的部署动作示例
// new codepipeline_actions.CloudFormationCreateUpdateStackAction({
//   actionName: 'DeployProd',
//   templatePath: fullCloudAssembly.atPath('ProdStack.template.json'),
//   其他配置
// })

// 修改后的部署动作
new codepipeline_actions.CloudFormationCreateUpdateStackAction({
  actionName: 'DeployProd',
  templatePath: slimCfnArtifact.atPath('ProdStack.template.json'),
  // 其他原有配置保持不变
})

注意事项

  • 若存在CFN部署依赖的自定义元数据,需调整buildspec中的删除规则,避免误删必要文件
  • 资产已经在资产发布阶段同步到对应存储服务,后续部署仅需要模板中的资产引用地址即可,无需构件携带实际资产文件,瘦身操作不影响部署正确性
  • 优化后构件大小通常为KB级别,远低于256MB的限制要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:24:01