CodePipelineCodeBuildCloudFormationLambda:在单个构建中构建多个lambdas,并正确分配其代码。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodePipelineCodeBuildCloudFormationLambda:在单个构建中构建多个lambdas,并正确分配其代码。相关的知识,希望对你有一定的参考价值。
我有一个用AWS CDK和CodePipeline构建的CD流水线。它为 5 个 lambdas 编译代码,并将每个 lambdas 推送到一个次要构件。
每个工件的 S3 位置都被分配给 CloudFormation 模板的参数,这些模板被附加到了 Code
的部分lambdas。
这工作很好!我的问题是,我不能在CodeBuild中添加第六个二级工件(硬限制)。
我的问题是,我不能在CodeBuild中添加第六个二级构件(硬限制)。我也不能将所有的lambda代码合并到一个工件中,因为(就我所见)CodePipeline不够聪明,在指定 Code
到 CloudFormation 中的 lambda。
从CodeBuildCodePipeline部署多个lambdas有什么建议?别人是如何解决这个问题的?
编辑:Code pipeline CF模板注:我只包含了2个lambdas作为例子
Lambda应用程序模板
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"Lambda1": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": {
"Ref": "lambda1SourceBucketNameParameter3EE73025"
},
"S3Key": {
"Ref": "lambda1SourceObjectKeyParameter326E8288"
}
}
}
},
"Lambda2": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": {
"Ref": "lambda2SourceBucketNameParameter3EE73025"
},
"S3Key": {
"Ref": "lambda2SourceObjectKeyParameter326E8288"
}
}
}
}
},
"Parameters": {
"lambda1SourceBucketNameParameter3EE73025": {
"Type": "String"
},
"lambda1SourceObjectKeyParameter326E8288": {
"Type": "String"
},
"lambda2SourceBucketNameParameterA0D2319B": {
"Type": "String"
},
"lambda2SourceObjectKeyParameterF3B3F2C2": {
"Type": "String"
}
}
}
代码流水线模板。
{
"Resources": {
"Pipeline40CE5EDC": {
"Type": "AWS::CodePipeline::Pipeline",
"Properties": {
"Stages": [
{
"Actions": [
{
"ActionTypeId": {
"Provider": "CodeBuild"
},
"Name": "CDK_Build",
"OutputArtifacts": [
{
"Name": "CdkbuildOutput"
}
],
"RunOrder": 1
},
{
"ActionTypeId": {
"Provider": "CodeBuild"
},
"Name": "Lambda_Build",
"OutputArtifacts": [
{ "Name": "CompiledLambdaCode1" },
{ "Name": "CompiledLambdaCode2" }
],
"RunOrder": 1
}
],
"Name": "Build"
},
{
"Actions": [
{
"ActionTypeId": {
"Provider": "CloudFormation"
},
"Configuration": {
"StackName": "DeployLambdas",
"ParameterOverrides": "{\"lambda2SourceBucketNameParameterA0D2319B\":{\"Fn::GetArtifactAtt\":[\"CompiledLambdaCode1\",\"BucketName\"]},\"lambda2SourceObjectKeyParameterF3B3F2C2\":{\"Fn::GetArtifactAtt\":[\"CompiledLambdaCode1\",\"ObjectKey\"]},\"lambda1SourceBucketNameParameter3EE73025\":{\"Fn::GetArtifactAtt\":[\"CompiledLambdaCode2\",\"BucketName\"]},\"lambda1SourceObjectKeyParameter326E8288\":{\"Fn::GetArtifactAtt\":[\"CompiledLambdaCode2\",\"ObjectKey\"]}}",
"ActionMode": "CREATE_UPDATE",
"TemplatePath": "CdkbuildOutput::CFTemplate.template.json"
},
"InputArtifacts": [
{ "Name": "CompiledLambdaCode1" },
{ "Name": "CompiledLambdaCode2" },
{ "Name": "CdkbuildOutput" }
],
"Name": "Deploy",
"RunOrder": 1
}
],
"Name": "Deploy"
}
],
"ArtifactStore": {
"EncryptionKey": "the key",
"Location": "the bucket",
"Type": "S3"
},
"Name": "Pipeline"
}
}
}
}
审核过的模板。
因此,我没有看到 CodeBuild 动作的五个输入,但我确实看到 CloudFormation 动作(Deploy)的两个输入。
I 假设 您的问题是认为CloudFormation动作的输入限制为5。 这个假设正确吗?
CloudFormation动作的限制实际上是10。 请参阅 "工件的动作类型约束" @ https:/docs.aws.amazon.comcodepipipelinelatestuserguidereference-pipeline-structure.html#reference-action-artifacts。
所以,如果你最多可以用10个,这就够了吗?
如果不行,我还有其他的想法,需要更长的时间来记录。
以上是关于CodePipelineCodeBuildCloudFormationLambda:在单个构建中构建多个lambdas,并正确分配其代码。的主要内容,如果未能解决你的问题,请参考以下文章