我们成功地构建了一个AWS CloudFormation堆栈,其中包括一个无服务器RDS PostgreSQL实例。一旦PostgreSQL实例就位,我们将自动恢复PostgreSQL数据库转储(二进制格式(,该转储是在CloudFormation刚刚创建的实例PostgreSQL上的本地开发机器上使用pg_dump创建的。
我们使用了一个Lambda函数(由CloudFormation过程实例化(,该函数包括在Lambda层中构建的pg_restore可执行文件,我们还将数据库转储文件打包在Lambda中。
上述方法似乎很复杂,因为可能已经解决了很多次。。。但谷歌搜索几乎没有发现任何与我们的情况相符的内容。我们可能以错误的方式思考我们的情况,所以请随时提供不同的方法(例如,是否有一种CodePipeline/CodeBuild方法可以自动化所有内容(。我们倾向于尽可能多地使用AWS工具集。
每次我们部署到新环境(例如,开发、测试、阶段、预生产、演示、alpha、beta、生产、故障排除(时,都会运行此流程,这可能是我们CI/CD实践的一部分。
有人有什么建议或博客文章可以说明实现我们目标的另一种方法吗?
如果您已经通过IaC(基础设施即代码(提供了所有内容,那么这将节省大部分时间,并且您应该已经能够通过传递--profile some profile标志,通过AWS凭据和配置文件中的不同角色将基础设施复制到其他帐户/堆栈。我建议在Cloudformation上使用AWS SAM(无服务器应用程序模型(,尽管我发现我只需要写大约1/2的代码(角色和策略主要是为你创建的(,而且更好;通过控制台进行更快的反馈。我还建议sam-sync(它目前处于测试版,但值得使用(,这样你就不需要在代码更新上创建"更改集",纯粹是代码更新,所以部署需要3-4秒。这里有一些AWS SAM示例,请检查视频和模式:https://serverlessland.com(AWS官方网站(
在RDS的恢复方面,我可能会创建一个基本RDS,然后拍摄该RDS的快照,并从快照中恢复所有其他RDS实例,而不是一直手动创建它。您可以复制快照,实际上可以跨帐户(如果需要,还可以跨区域(自动备份到快照,这应该是一个更干净的
还有一个干净的解决方案,可以使用AWS DMS(数据迁移服务(和CDC(更改数据捕获(在AWS帐户之间即时复制数据。所以过程是你有一个源数据库和一个目标数据库,还有一个"复制实例"(例如EC2 Micro(,它监视你的源数据库,并可以将其复制到不同的实例中(所以你总是在数据上保持同步,例如,如果你有几个开发人员在单独的"堆栈"上工作,以避免污染彼此的日志,你可以从一个数据库中无缝复制数据和更改(如果需要的话(-所以这适用于AWS中已经存在的源数据库和目标数据库,但您也可以使用AWS DMS将本地数据库迁移到AWS,更多信息请点击此处:https://docs.aws.amazon.com/dms/latest/sbs/chap-manageddatabases.html