自this question回复以来,AWS Tools for Powershell已经发布,我基本上遇到了同样的问题:我在一个AWS账户上有一个RDS快照,我希望转移到另一个账户。
到目前为止,我已经能够使用Get-RDSDBSnapshot
cmdlet选择我想要的快照,并且我想获取该Amazon.RDS.Model.DBSnapshot
对象并在其他帐户中使用它。
我一直在环顾四周,我认为Restore-RDSDBInstanceFromDBSnapshot
cmdlet(映射到rds-restore-db-instance-from-db-snapshot)可能正是我正在寻找的,但我不相信我了解它的行为 - 是否可以使用此cmdlet从我的第一个帐户获取快照,并将其还原到第二个帐户中的实例?
我特别关注Snapshot对象中是否存在任何特定于帐户的详细信息,或者是否会阻止该数据跨帐户移动的cmdlet处理。如果存在一个比PowerShell更通用的解决方案,我会没事的。
答案 0 :(得分:13)
更新2015/10/29:
自我原始发布(link to announcement)以来,AWS已为此功能添加了原生支持。未加密的MySQL,Oracle,SQL Server和PostgreSQL支持此功能。
您可以选择公开或私下共享您的RDS快照(通过管理具有查看快照权限的特定AWS账户ID)。默认情况下,快照可以与最多20个帐户私下共享。
可以通过单击“快照(左侧导航栏)>从RDS控制台管理共享快照(顶部工具栏)',它将引导您进入以下UI:
这也可以在RDS API和CLI中使用。
原始答案:
我还将此发布到AWS开发者论坛,并从PhilP @ AWS获得response。似乎我们根本无法通过powershell或任何其他手段来做到这一点。不过他确实有一些其他的建议:
无法直接从一个帐户共享RDS快照 到另一个。但是我可以在这里提出一些建议(取决于 在你当前的配置上):
如果您的RDS实例可公开访问:
- 在您的第二个帐户
上启动新的RDS数据库- 将适当的数据库管理工具安装到PC上,并让该PC网络访问两个RDS实例(安全组和数据库用户访问以进行读写)
- 使用数据库管理工具将数据从一个数据库复制到另一个数据库
通过EC2实例作为中间人复制数据:
- 启动使用适当的数据库服务器软件配置的EC2实例
- 将RDS数据库数据从RDS实例复制到EC2实例
- 然后将新的RDS实例启动到第二个帐户
- 配置适当的访问权限(安全组和数据库用户访问权限以进行读写)
- 将数据库数据从EC2实例复制到新创建的RDS实例
我的RDS实例无法公开访问,而且他的建议是EC2解决方案更可取。根据服务器故障解决方案,我们可以交替使用mysqldump。
编辑:我想更新一下,我已成功实施了EC2中介建议。这可以通过多种方式实现自动化,但我选择的解决方案包括将bash脚本作为用户数据传递给(linux AMI)EC2实例,并在脚本中处理数据传输的详细信息。
此解决方案最终具有相当的成本效益,但需要注意的是您希望RDS实例和EC2实例位于同一可用区中。这在很大程度上是因为data transfer between RDS-EC2 in the same availability zone is free具有私有IP地址。
答案 1 :(得分:0)
亚马逊终于有可能实现这一目标。您可以使用Edit-RDSDBSnapshotAttribute cmdlet(example here)与其他帐户共享快照,然后可以使用Restore-RDSDBInstanceFromDBSnapshot cmdlet将其还原到共享快照的帐户。
您甚至可以立即共享加密的快照。关于如何做到这一点a good walkthrough。