我需要将我的 CF 模板(GraphQL 架构、Lambda 源等)的一些文件存储到 S3 存储桶中,该存储桶也将(希望)在同一模板中定义,因为这似乎是直接删除内容之外的唯一方法进入模板来做。我也在尝试提前考虑 CI/CD,如果签入这些文件并且 CI/CD 工具适当地移动它们会很好。
有没有办法将文件从模板复制到 S3?大多数人如何使用 CI/CD 来做到这一点?
我需要将我的 CF 模板(GraphQL 架构、Lambda 源等)的一些文件存储到 S3 存储桶中,该存储桶也将(希望)在同一模板中定义,因为这似乎是直接删除内容之外的唯一方法进入模板来做。我也在尝试提前考虑 CI/CD,如果签入这些文件并且 CI/CD 工具适当地移动它们会很好。
有没有办法将文件从模板复制到 S3?大多数人如何使用 CI/CD 来做到这一点?
恐怕无法上传到从同一模板创建的存储桶。但是,如果存储桶是预先存在的,例如帐户范围的
deployment
存储桶或其中一个cf-templates-...
存储桶,您就有一些选择。使用Ansible playbook上传辅助文件,并在同一 playbook 中创建/更新 CloudFormation 堆栈。这是一种非常流行的 CI/CD 管道方法。在您的 Ansible 剧本中,您将拥有如下内容:
aws cloudformation package
将文件压缩并上传到 S3,然后aws cloudformation deploy
创建并执行 CloudFormation 更改集。又是一种非常流行的方法,可以很好地与 CI/CD 配合使用。在您的 CloudFormation 模板中,您可以像这样引用本地文件:
当
aws cloudformation package
运行时,它会输出一个修改过的模板,扩展了代码路径:然后你
aws cloudformation deploy
这个扩展的模板。或者使用其他方法进行部署 - 模板已准备好使用。这个
package
/deploy
方法的美妙之处在于它为您处理本地文件到 S3 的上传。在不同的项目中,我们在各种 CI/CD 管道中使用这两种方法,并且都非常有效。
希望有帮助:)
另一种选择是使用cfpack工具。它允许您定义需要上传到 S3 存储桶的工件。查看Artifacts部分了解更多详细信息,它解释了如何处理 Graphql 模式和解析器。
除此之外,cfpack 允许您将大型 CloudFormation 模板拆分为较小的文件。当您拥有巨大的 CloudFormation 模板时,这尤其有用。所以试试吧。
一些 AWS 工具,例如 λ#,能够创建带有资产的可重新部署的 CloudFormation 模板。看看这个例子:https ://github.com/LambdaSharp/StaticWebsite-Sample