我正在寻找一种将 AWS 存储桶的每日备份作为增量备份的方法。这些将离线存储并远离 AWS。
对于其他存储系统(例如 NAS 驱动器),我使用每日rsync进行备份。使用 rsync 的--link-dest
开关,我可以每天拍摄远程文件系统的完整快照。自上次备份以来未更改的任何文件都将硬链接到上次备份。这意味着每日完整快照仅占用增量备份的存储空间。
我想为亚马逊 S3 存储桶设置类似的东西。存储桶中有 20GB,但每天只有约 50MB 的变化。
请注意,这是备份 S3 存储桶的内容,而不是将其他内容备份到 S3 存储桶。
我可以看到如何使用 AWS CLI 工具进行完整备份。我看不到如何进行增量备份。
我想我可以(每天)将 S3 同步到本地硬盘,然后每天备份本地硬盘。这感觉非常笨拙。
编辑
这是一个简单的技术问题,而不是对备份安全性的一般讨论。但既然有人问我“你为什么需要这个”,我现在明白我需要解释备份的基本原则。
轶事:我最近目睹了第三方 IT 提供商因为沟通不畅而(完全)放弃了 S3 存储桶。这可能非常昂贵(最近的工作约 10 万英镑,总工作约 100 万英镑)。幸运的是,我们碰巧在本地笔记本电脑上也有副本,我们只花了 1000 英镑就为他们重建了内容。
它让我再次坚信,唯一有效的“备份”是在离线和离线存储的隔离系统上,并且具有有效实施时间锁定的媒体轮换。其他备份可以增强,提供更快速的恢复等...但是将所有 AWS 备份保存在您自己的 AWS 帐户上并不安全,因为...用户错误。
注意:这是在提到离线备份之前对原始问题的回答。将其留在这里作为原始问题的答案:如何创建 AWS S3 存储桶的增量备份。
第一个问题是为什么要备份 S3 存储桶?您要保护的问题是什么?
请记住,S3 的持久性大约是 99.99999% - 您极不可能由于硬件故障而丢失对象,因此我们可以排除这种情况。
如果您想确保可以恢复 S3 中意外覆盖的对象,您可以使用S3 版本控制- 这将保留文件所有旧版本的历史记录,您可以通过这种方式恢复。删除也一样。
说到删除 - 您可以要求对 S3 删除使用 MFA作为另一层保护,例如出于合规性和审计原因。(谢谢蒂姆:)
如果您需要在其他某个区域使用第二个 DR(灾难恢复)存储桶,以防万一您的主要区域离线,您可以使用S3 跨区域复制,它会在每次更改时自动将您的存储桶内容从一个区域镜像到另一个区域。
如果以上都不能满足您的需求,您可能需要一个Lambda 函数来为您处理 S3 存储桶中的每个更改。这样,每次您在 S3 中写入/更新对象时,Lambda 都会备份到您的首选目的地。例如,这可用于在不同 AWS 账户之间镜像 S3 存储桶、镜像到其他云提供商或离线目的地(例如,镜像到您的本地服务器)。使用 Lambda,您可以在如何处理更改方面获得最大的灵活性。请参阅将 Lambda 与 Amazon S3 结合使用。
如果这还不够,您可以随时使用
aws s3 sync
它来比较源存储桶和目标存储桶并仅复制已更改的内容。(更新)对于离线备份
aws s3 sync
- 可以同步到磁盘/从磁盘同步,而不仅仅是在存储桶之间。这有很多可供选择。希望其中一些适合您的需求:)
除此之外还有一种方法
aws s3 sync
,但它可能同样笨拙。你看,它归结为在 S3 存储桶上添加一个在 PUT 上触发的 Lambda 挂钩。理论上,这将允许您构建S3 存储桶的仅添加副本,因此不会复制任何 DELETE。有这方面的教程,但本质上是:增量备份逻辑将由您编写。