在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
。