如何解决CodePipeline中Cfn操作的字符限制

问题描述 投票:1回答:1

[使用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个字符,这些字符只是因为太冗长而丢失。通过覆盖那些生成的名称,我可以成为其中的一部分吗?

amazon-web-services amazon-cloudformation aws-codepipeline aws-cdk
1个回答
0
投票

我从CDK维护者here获得了一些帮助,这使我在1000个字符的限制内康复。在此处复制解决方法:

LambdaSourceBucketNameParameterLambdaSourceObjectKeyParameter只是默认参数名称。您可以创建自己的:

lambda.Code.fromCfnParameters({
  bucketNameParam: new CfnParameter(this, 'A'),
  objectKeyParam: new CfnParameter(this, 'B'),
});

您还可以显式命名工件,从而比默认设置节省很多字符:

const sourceOutput = new codepipeline.Artifact('S');
© www.soinside.com 2019 - 2024. All rights reserved.