AWS CDK 资产路径不正确

问题描述 投票:0回答:2

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 生成模板资源路径的方式是否发生了变化?

aws-cloudformation aws-cdk aws-codepipeline
2个回答
2
投票

原来我在解决另一个问题时添加了一个

cdk ls
来打印额外的调试信息。该命令重新综合了堆栈,但资产路径不正确。

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

解决方案是从构建规范定义中删除

cdk ls --long


0
投票

如果您在运行 cdksynch 命令时未指定 --no-staging,也可能会发生这种情况。指定 no-staging 将引用原始代码。

此处有一些详细信息:https://github.com/aws/aws-cdk/issues/10367

命令示例:

cdk synth --no-staging --context deployment_env=dev > template.yml
© www.soinside.com 2019 - 2024. All rights reserved.