首页 > 解决方案 > AWS CodeDeploy 可以为 lambda 进行跨账户部署吗?

问题描述

我找不到任何信息如何使用 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.ymlwithaws cloudformation命令或转向使用 CloudFormation。

CodeDeploy 需要什么输入工件来部署 lambda?

非常感谢!

标签: amazon-web-servicesaws-lambdaamazon-cloudformationaws-code-deployaws-codepipeline

解决方案


使用 CodePipeline 部署 Lambda - 首选方法是使用 CloudFormation 作为部署提供程序而不是 CodeDeploy 服务,因为关于 CodeDeploy 服务如何接受 appspec 文件存在一些悬而未决的问题(Codepipeline 压缩工件,而 CD 需要解压缩的 appspec 文件)

推荐的方法如下定义: 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


推荐阅读