AWS Codepipeline将cloudformation部署到Dev帐户,并使用输出堆栈在Central帐户中创建



我想建立一个跨账户的Codepiepline,Codepipeline保留在中央账户上,所以我扮演DEV账户的角色并创建堆栈,但同时我想在中央账户中创建参数存储,并使用开发人员账户的输出堆栈

例如

  1. Central帐户中的Codepipeline将承担开发人员帐户的角色,用于部署s3bucket
  2. 和!GetAtt mydemo。在中心帐户中创建参数存储的域名

**My all pipeline with stay on Central account and keep all parameters store from DEV account so My codebuild,other codepipeline can read the value

有什么想法吗?

#This s3 will be deploy to dev account
Resources:
DeployDevAccountBucket:
Type: AWS::S3::Bucket
Properties: 
BucketName: "dev-bucket"
AccessControl: Private
BucketEncryption: 
ServerSideEncryptionConfiguration: 
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
VersioningConfiguration:
Status: "Enabled"
#This parameter store will be deploy to Central account 
BucketNameParameter: 
Type: AWS::SSM::Parameter
Properties: 
Name: !Sub "dev-account-s3-domainname"
Type: String
Value: !GetAtt  DeployDevAccountBucket.DomainName

使用CloudFormation(CFN(和单个堆栈,无法做到这一点。CFN是特定于地区和帐户的,不支持跨帐户部署。

您必须重新构建管道才能使用CFN StackSets,这需要根据帐户或地区将模板拆分为不同的模板。

但最简单的方法可能是使用CodeBuild,明确地承担跨帐户角色以在不同帐户中部署堆栈。

#此参数存储将部署到中央帐户

没有任何方法可以使用开发帐户中的AWS::SSM::Parameter资源在其他帐户中创建参数。

我的所有管道都保留在中央帐户上,并保留DEV帐户中的所有参数存储,这样我的代码构建,另一个代码管道可以读取值

但是,如果管道在中心帐户中,并且您在代码管道中使用cloudformation操作类型,则您仍然可以通过代码管道cloudformation action Output Variables访问堆栈输出。下游管道任务可以通过角色假设将这些输出放入一个参数中——在Central帐户中,无论管道是否已经运行,或者实际上在任何帐户中。

还有另一种方法:您可以定义一个自定义云信息资源,该资源将在不同的帐户中扮演角色,并在那里管理参数。不过,您必须分别管理该资源的角色和lambda(或任何实现(。我认为堆栈输出方法更好。

最新更新