Jam*_*win 7 amazon-web-services aws-cloudformation aws-codepipeline aws-cdk
使用 AWS CDK,我有一个 CodePipeline,它为 5 个不同的 Lambda 函数生成构建工件,然后将这些工件作为参数传递给 CloudFormation 模板。基本设置与此示例相同,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],
})
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试部署时,出现此错误:
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]
Run Code Online (Sandbox Code Playgroud)
所述CodePipeline文档指定在值Configuration
的ActionDeclaration的属性可多达1000个字符。如果我查看来自 的 YAML 输出cdk synth
,则该ParameterOverrides
属性为 1351 个字符。所以这是一个问题。
我该如何解决这个问题?我以后可能需要添加更多的 Lambda 函数,所以这个问题只会变得更糟。部分问题是CDK 代码在配置输出中的每个存储桶/对象对名称中插入了'LambdaSourceBucketNameParameter'
和'LambdaSourceObjectKeyParameter'
,这让我失去了 61 * 5 = 305 个字符,只是因为冗长。我可以通过覆盖那些生成的名称来参与其中吗?
我从这里的CDK 维护者那里得到了一些帮助,这让我远远低于 1000 个字符的限制。在这里重现解决方法:
LambdaSourceBucketNameParameter
和LambdaSourceObjectKeyParameter
只是默认参数名称。您可以创建自己的:
lambda.Code.fromCfnParameters({
bucketNameParam: new CfnParameter(this, 'A'),
objectKeyParam: new CfnParameter(this, 'B'),
});
Run Code Online (Sandbox Code Playgroud)
您还可以显式命名 Artifacts,从而比默认值节省大量字符:
const sourceOutput = new codepipeline.Artifact('S');
Run Code Online (Sandbox Code Playgroud)
编辑2020年1月10日
我终于得到了AWS支持关于这个问题的回复:
我询问了 CodePipeline 团队并搜索了当前的开发工作流程,但找不到任何与增加传递给 CloudFormation 堆栈的参数限制或此操作的任何替代方法相关的当前活动,因此我们发布了基于功能请求的功能。根据您对我们开发团队的要求。
我无法提供该功能的预计上线时间,但您可以通过 CloudFormation 和 CodePipeline 官方页面关注新功能的发布,以查看新功能何时可用。
所以目前看来,CfnParameter
解决方法是最好的选择。
归档时间: |
|
查看次数: |
1326 次 |
最近记录: |