【问题标题】:How to work around Cfn action's character limit in CodePipeline如何解决 CodePipeline 中 Cfn 操作的字符限制
【发布时间】:2020-01-11 02:27:26
【问题描述】:

使用 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】:

    我从 CDK 维护者here 那里得到了一些帮助,这让我在 1000 个字符的限制下得到了很好的帮助。在此处重现解决方法:

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

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

    您还可以显式命名 Artifacts,从而在默认值之外节省大量字符:

    const sourceOutput = new codepipeline.Artifact('S');
    

    2020 年 1 月 10 日编辑

    我终于收到了 AWS Support 关于这个问题的回复:

    我查询了 CodePipeline 团队并搜索了当前的开发工作流程,但找不到与增加传递给 CloudFormation 堆栈的参数限制或此操作的任何替代方法相关的任何当前活动,因此我们发布了根据您对我们开发团队的要求提出的功能要求。

    我无法提供此功能可用的预计时间,但您可以通过 CloudFormation 和 CodePipeline 官方页面关注新功能的发布,以查看新功能何时可用。

    所以目前看来,CfnParameter 解决方法是最好的选择。

    【讨论】:

    • 谢谢,今天还是有问题
    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2021-08-06
    • 1970-01-01
    • 2011-08-22
    • 2019-04-20
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多