Amazon web services AWS云信息模板存储

Amazon web services AWS云信息模板存储,amazon-web-services,aws-lambda,cloud,amazon-cloudformation,Amazon Web Services,Aws Lambda,Cloud,Amazon Cloudformation,我们目前在AWS开发和产品帐户上部署了大量资源。这些包括lambda函数、kinesis流、dynamo db表和RDS实例。其中一些资源是使用我们的ci工具和cloudformation部署的,有些是手动完成的。出于许多原因,我们希望在cloudformation中定义所有内容。大多数资源是更大系统或堆栈的一部分。即,连接到lambda函数的api网关,该函数可能使用由另一个lambda函数填充的运动流。问题是,在这种情况下,cloudformation模板应该存在于哪里?在第一个lambda

我们目前在AWS开发和产品帐户上部署了大量资源。这些包括lambda函数、kinesis流、dynamo db表和RDS实例。其中一些资源是使用我们的ci工具和cloudformation部署的,有些是手动完成的。出于许多原因,我们希望在cloudformation中定义所有内容。大多数资源是更大系统或堆栈的一部分。即,连接到lambda函数的api网关,该函数可能使用由另一个lambda函数填充的运动流。问题是,在这种情况下,cloudformation模板应该存在于哪里?在第一个lambda的回购协议中?第二个lambda?中央cloudformation repo或其他什么地方?

我见过的最佳实践是将模板开发/提交到源代码存储库(通常是Git),然后利用CI工具(如Jenkins、Travis CI、Bambor等)将其复制到您的帐户有权读取(非公开)的S3存储桶中。从S3URL引用所有模板,并使用CI工具使这些URL保持最新

例如,
master
分支以
http://bucket-name-here.s3.amazonaws.com/project-name/template.json
develop
分支在
http://bucket-name-here.s3.amazonaws.com/project-name/template-develop.json
。您可以扩展特性/发布分支以遵循
http://bucket-name-here.s3.amazonaws.com/project-name/template-release-v1.0.json
或类似产品


当您在其他资源中引用这些模板时,您总是会违反您想要的任何代码级别(生产级代码请参考
template.json

将模板存储在任何源代码管理中都是获得集中化和版本化代码好处的良好开端

但是,如果您主要投资于AWS云的自动化,您应该考虑将模板(和其他代码)存储在git服务中

这样做的主要原因和好处是:

  • 与其他AWS服务的紧密集成选项
  • 触发repo操作上的事件,如发送SNS通知或触发Lambda操作的请求和提交
  • 能够使用IAM策略和角色与开发人员以及其他服务和应用程序共享回购访问权限

CodeCommit提供了一种非常细粒度和安全的方法来区分谁可以做什么,以及哪些应用程序可以访问repo,这样您就可以对生产和登台环境进行细分。

我们在GitLab中提供了所有源代码,其中包含大量Jenkins CI/CD环境。并考虑添加管道步骤,以触发AWS CodeCommit+CodePipeline从专用GitLab repo中提取,以Amazon专用方式执行CloudFormation模板,带来所有好处。

谢谢..但在由多个lambda函数组成的堆栈中,模板将驻留在哪个代码repo中?谢谢回答。我们在GITLAB中投入了大量的资金,但是我们可以考虑使用云计算。再说一次,如果我在一个堆栈中有多个lambda,那么模板与哪个lambda共存?即使在这种情况下,我也会将cloudformation模板集中在CodeCommit中,如果需要,您可以执行将模板同步回gitlab repo的操作。通过CC,可以很容易地让lambda使用IAM访问模板,触发器可以真正帮助实现CI/CD过程的自动化。