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

禁用publishAssetsInParallel后AWS CDK Pipeline资产阶段找不到BuildSpec文件

问题描述

我们用AWS CDK Pipeline部署多栈应用,默认设置下资产阶段会创建20多个FileAsset对象,导致AWS报错并行运行的CodeBuild项目数量超限,于是禁用了publishAssetsInParallel标志。但禁用后资产阶段出现以下错误:

[Container] 2022/11/14 12:04:24 Phase complete: DOWNLOAD_SOURCE State: FAILED
[Container] 2022/11/14 12:04:24 Phase context status code: YAML_FILE_ERROR Message: stat /codebuild/output/src112668013/src/buildspec-c866864112c35d54804951dbe96b99440c9b891fde-FileAsset.yaml: no such file or directory

这个BuildSpec文件应该由CDK Pipeline自动生成——启用并行发布时完全不需要手动创建。当前流水线代码如下:

const pipeline = new CodePipeline(this, 'Pipeline', {
      publishAssetsInParallel: false,
      selfMutation: false,
      pipelineName: fullStackName('Pipeline', app),
      synth: new CodeBuildStep('SynthStep', {
              input: CodePipelineSource.codeCommit(repo, repoBranchName, {codeBuildCloneOutput: true}),
              buildEnvironment: {computeType: ComputeType.MEDIUM},
              installCommands: [
                  'npm install -g yarn',
                  'yarn install',
                  'cd apps/cloud-app',
                  'yarn install',
                  'yarn global add aws-cdk'
              ],
              commands: [
                  'yarn build',
                  'cdk synth'
              ],
              primaryOutputDirectory: 'apps/cloud-app/cdk.out'
          }
      )
  });

对比启用/禁用publishAssetsInParallel的差异:

  • 启用时,CodeBuild项目自带完整的BuildSpec实现:
{
  "version": "0.2",
  "phases": {
    "install": {
      "commands": [
        "npm install -g cdk-assets@2"
      ]
    },
    "build": {
      "commands": [
        "cdk-assets --path \"MyStack.assets.json\" --verbose publish \"2357296280127ce793d8dbb13e6c907db22f5dcc57a173ba77fcd19a76d8f444:12345678910-eu-west-2\""
      ]
    }
  }
}
  • 禁用时,BuildSpec仅指向一个自动生成的文件路径,但这个文件在CodeBuild环境中找不到:
buildspec-c866864112c35d54804951dbe96b99440c9b891fde-FileAsset.yaml
解决方案

1. 升级CDK版本

这个问题是早期CDK版本的已知bug——禁用并行资产发布时,自动生成的BuildSpec文件不会被包含到cdk.out输出目录中。建议直接升级到最新稳定版CDK,或者至少升级到v2.40.0及以上版本(该版本修复了类似的资产发布路径问题)。

2. 调整Synth步骤的输出配置

如果暂时无法升级CDK,可以修改Synth步骤确保BuildSpec文件被正确输出:

  • 移除primaryOutputDirectory配置,让CodeBuild默认输出整个项目的构建结果,而非仅cdk.out目录;
  • 或者在synth命令后,把自动生成的BuildSpec文件复制到cdk.out目录,比如在commands里添加:
cp ../buildspec-*.yaml apps/cloud-app/cdk.out/

注意根据你的项目结构调整路径,确保能正确定位到生成的BuildSpec文件。

3. 替代方案:调整并行构建配额

如果不想禁用publishAssetsInParallel,可以通过以下方式解决并行数超限问题:

  • 在AWS控制台的CodeBuild页面申请提高账户的并行构建数量上限;
  • 部分CDK版本支持通过maxWorkers参数限制资产发布阶段的并行CodeBuild数量,避免触发配额限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:50:20