在另一个 AWS 账户中创建 RDS/Postgres 副本?

Posted

技术标签:

【中文标题】在另一个 AWS 账户中创建 RDS/Postgres 副本?【英文标题】:Create an RDS/Postgres Replica in another AWS account? 【发布时间】:2019-12-02 21:27:20 【问题描述】:

我有一个带有 Postgres RDS 数据库的 AWS 账户,该数据库代表应用程序的生产环境。我们有另一个团队正在另一个 AWS 账户中构建分析基础设施。他们需要能够从我们的生产数据库中提取数据来完善他们的报告。

从我目前的研究来看,似乎有两种选择:

    创建一个 bash 脚本,该脚本在使用 pg_dumppg_restore 的 CRON 计划上运行,并将其存储在其中一个账户中的 EC2 实例上。

    按计划自动化创建快照的过程,然后将其发送到其他账户 S3 存储桶。然后创建一个 Lambda(或其他脚本),在将快照放入 S3 存储桶时触发并还原它。这样做的缺点是我们必须在每次还原时创建一个新的 RDS 实例(因为您无法将快照还原到现有实例),这会更改数据库的 FQDN(我们可以使用 Route53 和 CNAME 来缓解)会更新,但这很复杂)。

    在原始 AWS 账户中创建一个只读副本并为该实例打开安全性,以便他们可以直接访问它(但我的账户负责与托管和访问它相关的所有成本)。

这些似乎都不是好的选择。有没有其他方法可以做到这一点?

【问题讨论】:

【参考方案1】:

我建议使用 AWS Data Migration Service 它可以监听源数据库上的更改并将它们流式传输到目标 (https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html)

还有一篇第三方博客文章解释了如何设置 https://medium.com/tensult/cross-account-and-cross-region-rds-mysql-db-replication-part-1-55d307c7ae65

Pricing 是每小时,取决于复制 EC2 实例的大小。它在目标帐户中运行,因此不会位于您的成本中心。

【讨论】:

中等帖子适用于 MySQL,不适用于 RDS 上的 Postgres。使用 RDS 上的 Postgres,您只能跨数据库(帐户/rds 之外)执行逻辑复制 同意博文,但 AWS Data Migration Service 确实支持来自 Amazon RDS Postgres 数据源的连续流式传输,因此可以使用相同的架构(尽管我没有亲自尝试过)。对于 PostgreSQL,AWS DMS 设置逻辑复制槽并使用 test_decoding 插件从源读取更改并将它们迁移到目标。 @SébastienStormacq 谢谢!这看起来很有希望,但我无法让它发挥作用。我的复制任务一直失败,并且在 CloudWatch 中没有创建任何日志流。我可以说它可以很好地连接到源/目标,但是当我运行任务时它只是说“从子任务 0 线程 0 收到的最后一个错误任务错误通知 [reptask/replicationtask.c:2673] [1020482] 停止原因FATAL_ERROR 错误级别 FATAL" 。有什么想法吗? 逻辑复制,但是有很多限制。这是一个仅流式传输 DML 更改的发布-订阅模型。因此,如果主架构发生任何更改,这些更改不会复制到从属架构。 我已经尝试使用 DMS 来达到这个目的,但不是很开心。原来它在迁移过程中删除了架构默认值,例如序列 ID。此处描述的相同问题***.com/questions/55633029/… 有一个带有模式转换工具的 hack,但老实说共享 pg_dump 似乎不那么麻烦

以上是关于在另一个 AWS 账户中创建 RDS/Postgres 副本?的主要内容,如果未能解决你的问题,请参考以下文章

在 CodePipeline 中创建使用另一个 AWS 账户的资源的管道

查找谁在联合 AWS 账户中创建了 s3 存储桶

我可以在另一个 AWS 账户中使用 AWS Route53 注册域吗?

如何在 EC2 的不同机架中创建两个实例? (AWS 中的机架意识)

使用默认 aws/S3 KMS 密钥对解密对象进行跨账户访问

AWS ECS Fargate 从跨账户 ECR 存储库中提取映像