首页 > 解决方案 > AWS CDK 资产路径不正确

问题描述

9 月 6 日,我使用 CodePipeline 运行了一个构建。它使用 CDK 为项目的堆栈生成 CloudFormation 模板。堆栈具有资产(一个 Lambda 层),并且资产正确放置在 cdk.out 文件夹中。这可以在 CloudFormation 模板中看到:

      "Metadata": {
        "aws:cdk:path": "MyStack/MyLayer/Resource",
        "aws:asset:path": "asset.ccb8fd8b4259a8f517879d7aaa083679461d02b9d60bfd12725857d23567b70f",
        "aws:asset:property": "Content"
      }

从昨天开始,构建失败并显示“上传的文件必须是非空 zip”。当我进一步调查时,我注意到模板不再正确。而是将资产路径设置为 Lambda 的源代码:

      "Metadata": {
        "aws:cdk:path": "MyStack/MyLayer/Resource",
        "aws:asset:path": "/codebuild/output/src216693626/src/src/lambdas/layers",
        "aws:asset:property": "Content"
      }

构建时,我在 buildspec 文件中添加了其他命令,显示该assets.abcdef文件夹具有层及其依赖项,而 src 文件夹没有。然而,模板现在不同了。

在这段时间内没有更改任何代码,我尝试了 CDK 版本 1.105.0 和 1.119.0。

这段代码声明了层:

    new lambdapython.PythonLayerVersion(this.stack, 'MyLayer', {
      entry: path.join(__dirname, '../../src/lambdas/layers'),
      description: 'Common utilities for the Lambdas',
      compatibleRuntimes: [lambda.Runtime.PYTHON_3_8],
      layerVersionName: `${Aws.STACK_NAME}Utils`,
    });

有没有一种已知的方法可以强制堆栈使用 cdk.out 文件夹中的资产?在过去的几天里,CDK 如何生成模板的资产路径有什么变化吗?

标签: amazon-cloudformationaws-cdkaws-codepipeline

解决方案


事实证明,cdk ls在解决另一个问题时,我添加了一个来打印额外的调试信息。该命令重新合成了堆栈,但资产路径不正确。

          build: {
            commands: [
              'cd ' + config.cdkDir,
              'cdk synth',
              'cdk ls --long'
            ]
          }

cdk ls --long解决方案是从构建规范定义中删除。


推荐阅读