我有一个运行Web服务器的EC2实例,该服务器将用户上传的文件存储到S3。这些文件只写入一次,并且永不更改,但偶尔会被用户检索。我们每年可能会积累大约200-500GB的数据。我们希望确保此数据是安全的,尤其是防止意外删除,并且希望能够恢复被删除的文件,无论其原因如何。
我已经阅读了有关S3存储桶的版本控制功能,但是似乎无法找到没有修改历史记录的文件是否可以恢复。有关版本控制,请参见此处的AWS文档:
http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html
在这些示例中,它们没有显示上传数据但从未修改然后删除数据的场景。在这种情况下删除的文件是否可以恢复?
然后,我们认为可以使用对象生命周期管理将S3文件备份到Glacier:
http://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html
但是,这似乎对我们不起作用,因为文件对象没有复制到Glacier而是移到了Glacier(更准确地说,这似乎是一个已更改的对象属性,但无论如何...)。
因此,似乎没有直接的方法来备份S3数据,并且将数据从S3传输到本地服务器可能很耗时,并且随着时间的流逝会产生大量的传输成本。
最后,我们认为我们将每月创建一个新存储桶以用作每月的完整备份,并在第1天将原始存储桶的数据复制到新存储桶。然后使用类似duplicity(http://duplicity.nongnu.org/),我们每晚都会同步备份存储桶。月底,我们将备份存储桶中的内容放入Glacier存储中,并使用原始存储桶的最新副本创建一个新的备份存储桶...并重复此过程。这似乎可行,并且可以最大程度地降低存储/传输成本,但是我不确定双重性是否允许直接进行存储区到存储区传输,而无需先将数据传输到控制客户端。
所以,我想这里有几个问题。首先,S3版本控制是否允许恢复从未修改过的文件?有什么方法可以将S3中的文件“复制”到我错过的Glacier吗?重复性或任何其他工具是否可以直接在S3存储桶之间传输文件以避免传输成本?最后,在备份S3数据的方法上我是否偏离了常规?
预先感谢您提供的任何见解!