我想创建一个流程,将文件从 EC2 / EFS 传输到 Glacier - 但要进行压缩。假设有目录的时间戳精确到小时。每小时,我都想要一个流程来检查超过 24 小时的目录(已配置),将该目录中的文件压缩,并将 zip 文件移动到 Glacier(文件和 zip 文件都已删除)。此外,还要具有高可靠性,某种故障/重试逻辑。理想情况下,它使用现有工具,或者不需要大量外部编码/逻辑。
我发现很多工具几乎做这个:
- AWS DataSync - 可靠地移动文件 - 但没有添加压缩的选项
- AWS DataPipeline - 使用逻辑传输文件 - 但不支持 EFS?(或者 Glacier,但我想我可以将文件移动到 S3,然后传输到 Glacier)。
- 一些混合解决方案,例如
- AWS DataSync 使用 cronjob 来处理 zip 文件 - 但是重试呢?
- AWS StepFunction Workflows 在安装了 EFS 的 EC2 框上运行任务
有一款工具我很确定会这样做,就是Apache-AirFlow
执行工作流程 - 但这需要大量的手动编码,而且我不确定 AWS StepFunctions 是否会产生相同的结果。
这似乎应该是一个已解决的问题 - 安排和压缩文件目录,将其移动到 Glacier(使用重试逻辑) - 但我还没有找到任何真正的干净的还没有解决方案。我是否遗漏了什么?
答案1
您已告诉我们您计划的方法,但没有告诉我们您的问题或目标,这将限制您获得的建议。您是否在存档并试图省钱?您有合规目标吗?
与存储类相比,AWS Glacier 服务实际上仅适用于企业合规性需求。在大多数情况下,带有 Glacier/Deep Archive 存储类的 S3 就足够了。AWS Glacier 甚至没有更便宜的 Deep Archive 存储类。
存储很便宜。我建议你简单地创建一个 AWS S3 生命周期规则,在对象 24 小时后将其移动到 S3 Glacier Deep Archive 存储类。这不会进行任何压缩,但每月每 TB 约 1 美元,除非你使用易于压缩的文件处理大量数据,否则可能不值得进行压缩。
如果您确实需要压缩,这将是一个相当简单的 lambda 脚本。您的 lambda 会在 S3 存储桶中搜索超过 24 小时的文件,然后为了可扩展性,为每个文件启动另一个 lambda 来压缩它,然后将其复制到具有深度存档存储类的另一个 S3 存储桶。
更新
最新信息显示,每小时约有 1 GB 的数据。即每月 720 GB,一年后为 8.6 TB。S3 深度存档类的 8.6 TB 存储每月约 100 美元,如果您必须支付工程师设计、实施和支持系统的费用,这实际上不算什么。这每年都会增加,但如果您有一个生命周期规则来在一年后删除数据,它将限制成本。
AWS Glacier 不像 S3 Glacier/深度存档存储类那样灵活。您无法使用生命周期规则,它没有深度存档。它确实是一款针对具有严格合规性要求的大型企业的产品。
选项一 如果你可以不用压缩,那么你的数据同步建议可能会奏效 - 我对此一无所知,AWS 中有如此多的服务。如果它可以从 EFS 收集文件并以深度存档类放入 S3,那么这项工作就完成了,而且成本低廉。
选项二 如果您的数据高度可压缩,并且将成本从每年 100 美元降低到 30 美元很重要,那么您可以让 lambda 获取数据、进行压缩并写入 S3 深度存档。您不需要您描述的多个步骤。