使用AWS CDK,我有一个CodePipeline,它为5个不同的Lambda函数生成构建工件,然后将这些工件作为参数传递给CloudFormation模板。基本设置与this example相同,并且CloudFormation部署操作基本上如下所示:
new CloudFormationCreateUpdateStackAction({
actionName: 'Lambda_CFN_Deploy',
templatePath: cdkBuildOutput.atPath('LambdaStack.template.json'),
stackName: 'LambdaDeploymentStack',
adminPermissions: true,
parameterOverrides: {
...props.lambdaCode.assign(lambdaBuildOutput.s3Location),
// more parameter overrides here
},
extraInputs: [lambdaBuildOutput],
})
但是,当我尝试部署时,出现此错误:
1 validation error detected: Value at 'pipeline.stages.3.member.actions.1.member.configuration' failed to satisfy constraint:
Map value must satisfy constraint:
[Member must have length less than or equal to 1000, Member must have length greater than or equal to 1]
CodePipeline documentation指定ActionDeclaration的Configuration
属性中的值最多可以包含1000个字符。如果我查看cdk synth
的YAML输出,则ParameterOverrides
属性显示为1351个字符。所以这是一个问题。
如何解决此问题?将来我可能需要添加更多的Lambda函数,所以这个问题只会变得更糟。问题的部分原因是,CDK code在配置输出的每个存储桶/对象对名称中插入'LambdaSourceBucketNameParameter'
和'LambdaSourceObjectKeyParameter'
,使我失去61 * 5 = 305个字符,这些字符只是因为太冗长。通过覆盖那些生成的名称,我可以成为其中的一部分吗?
答案 0 :(得分:0)
我从CDK维护者here获得了一些帮助,这使我在1000个字符以下的限制之内得到了很好的解决。在此处复制解决方法:
LambdaSourceBucketNameParameter
和LambdaSourceObjectKeyParameter
只是默认参数名称。您可以创建自己的:
lambda.Code.fromCfnParameters({
bucketNameParam: new CfnParameter(this, 'A'),
objectKeyParam: new CfnParameter(this, 'B'),
});
您还可以显式命名工件,从而比默认设置节省很多字符:
const sourceOutput = new codepipeline.Artifact('S');