我无法找到有关如何通过CodeDeploy操作设置CodePipeline的任何信息,该操作将CloudFormation堆栈部署的现有lambda的新版本部署到另一个AWS账户中。即跨帐户部署,其中一个管道可以部署到开发,测试和生产中。
我想使用CodeDeploy,因为我希望这会简单地部署现有的lambda,无论是否在堆栈中。这是正确的假设吗?
是否可以使用CodeDeploy部署lambda跨帐户?
我已经用这样的管道进行了测试:
DeployApplication:
Type: AWS::CodeDeploy::Application
Properties:
ComputePlatform: Lambda
LambdaDeploymentGroup:
Type: AWS::CodeDeploy::DeploymentGroup
Properties:
ApplicationName: !Ref DeployApplication
ServiceRoleArn: !ImportValue delivery-pipeline-foundation-codedeploy-role
DeploymentStyle:
DeploymentOption: WITH_TRAFFIC_CONTROL
DeploymentType: BLUE_GREEN
...并且具有这样的阶段/动作:
- Name: Deploy_to_Dev
Actions:
- Name: CreateChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CodeDeploy
Version: 1
Configuration:
ApplicationName: !Ref DeployApplication
DeploymentGroupName: !Ref LambdaDeploymentGroup
InputArtifacts:
- Name: !Sub ${AWS::StackName}-build-output
RunOrder: 1
第一个问题是我不知道如何设置跨帐户部署权限!我知道如何在具有三个级别的权限的情况下使用CloudFormation:CodePipeline,Stage / action和CloudFormation,其中最后一个在目标帐户中,而两个在管道帐户中。
对于具有CodePipeline和CodeDeploy的管道帐户,似乎他们需要该帐户中的角色,而不是目标帐户中的角色。显然,要部署一个帐户,还必须具有在该帐户中进行部署的权限。
如何为CodeDeploy设置权限以部署Lambda跨帐户?
另一个问题是,我不知道要使CodeDeploy正常工作需要什么。我已经在网上阅读了各种各样的文章,但是似乎没人知道,并且将buildspec.yml
与aws cloudformation
命令一起使用,或者转而使用CloudFormation。
CodeDeploy部署lambda需要哪些输入工件?
非常感谢!
答案 0 :(得分:0)
使用CodePipeline部署Lambda-首选方法是使用CloudFormation而不是CodeDeploy服务作为部署提供程序,因为关于CodeDeploy服务如何接受appspec文件存在一些未决问题(Codepipeline将工件压缩,而CD需要解压缩appspec文件)< / p>
推荐的方法定义如下: https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html
CloudFormation支持跨帐户操作,因此它应该很好地满足您的用例。详细信息在这里: https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create-cross-account.html