AWS CodeDeploy可以对lambda执行跨帐户部署吗?

时间:2019-09-10 12:27:20

标签: amazon-web-services aws-lambda amazon-cloudformation aws-code-deploy aws-codepipeline

我无法找到有关如何通过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

问题1

第一个问题是我不知道如何设置跨帐户部署权限!我知道如何在具有三个级别的权限的情况下使用CloudFormation:CodePipeline,Stage / action和CloudFormation,其中最后一个在目标帐户中,而两个在管道帐户中。

对于具有CodePipeline和CodeDeploy的管道帐户,似乎他们需要该帐户中的角色,而不是目标帐户中的角色。显然,要部署一个帐户,还必须具有在该帐户中进行部署的权限。

如何为CodeDeploy设置权限以部署Lambda跨帐户?

问题2

另一个问题是,我不知道要使CodeDeploy正常工作需要什么。我已经在网上阅读了各种各样的文章,但是似乎没人知道,并且将buildspec.ymlaws cloudformation命令一起使用,或者转而使用CloudFormation。

CodeDeploy部署lambda需要哪些输入工件?

非常感谢!

1 个答案:

答案 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