![在 AWS EC2 机器之间复制数据](https://linux22.com/image/651000/%E5%9C%A8%20AWS%20EC2%20%E6%9C%BA%E5%99%A8%E4%B9%8B%E9%97%B4%E5%A4%8D%E5%88%B6%E6%95%B0%E6%8D%AE.png)
有时,为了进行一些调试或手动迁移,我需要将大量数据从一个 EC2 实例复制到另一个 EC2 实例。当数据量很小的时候,只需从实例 A scp 到我的机器,然后再 scp 到实例 B 就足够简单了,但对于大型负载来说,这是不可持续的。
我目前登录 AWS 实例的方法是通过 OpenVPN 隧道上的 SSH。EC2 机器上的 OS 用户实际上没有从一台机器到另一台机器的 SSH 选项。
我这里有几个选择。我可以生成一个 SSH 密钥,仅用于从一台机器 SSH 到另一台机器。或者我可能只在实例的子网内启用基于密码的登录(不确定这是否可行)。听起来都不是特别有吸引力或安全。
在这种情况下最佳做法是什么?我确信我不是第一个需要启用此类功能的人。
答案1
如果 EC2 实例基于 EBS,并且可以接受一定的停机时间,则可以对包含数据的 EBS 卷进行快照,基于该快照创建新的 EBS 卷,然后将其附加到另一个实例。请参阅创建 Amazon EBS 快照和从快照还原 Amazon EBS 卷。
另一个选择是通过复制s3相反,使用AWS CLI使用命令aws s3 cp
或s3命令。
另一个选择是亚马逊弹性文件系统,它允许您以类似于 NFS 的方式在 EC2 实例和本地服务器之间共享文件系统。截至 2018 年 9 月 15 日,此服务尚未在所有 AWS 区域提供。您可能需要咨询AWS 区域表检查它是否在您的目标地区可用。
请注意,这些选项都不需要实例能够相互访问,并且不需要 SSH 密钥。
答案2
我的这个脚本可以在两个远程点之间进行带加密的网络传输...
http://slashusr.com/scripts/tarnet
我在 AWS 添加快照传输支持之前就使用过它,现在仍然有时使用它在 AWS 和其他地方(例如我的非云专用服务器)之间切换。