AWS CDK资产路径不正确



在9月6日,我使用CodePipeline运行了一个构建。它使用CDK为项目的堆栈生成一个CloudFormation模板。堆栈具有资产(Lambda层),并且这些资产被正确地放置在cdk中。从文件夹中。这可以在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版本。

下面的代码声明了Layer:
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中的资产?文件夹吗?在过去的几天里,CDK如何生成模板的资产路径有什么变化吗?

原来我添加了一个cdk ls,以便在排除另一个问题时打印出额外的调试信息。该命令重新合成了堆栈,但使用了错误的资源路径。

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

解决方法是从buildspec定义中删除cdk ls --long