使用 Amazon S3 文件网关大规模迁移数据并节省成本

将数据迁移到云端需要具有不同数据类型的经验以及保留源数据结构和元数据属性的能力。客户通常将本地文件数据存储在传统文件服务器上,出于包括数据生命周期管理在内的各种原因保留数据创建的原始时间戳。客户发现,要找到既支持保留源数据结构、元数据又支持混合实施的将数据迁移到云的路径是一项艰巨的任务。这最终会阻止客户获得云存储的全部好处,包括成本、性能和规模。

客户使用 Amazon S3 文件网关 亚马逊简单存储服务 (S3 ) 分别将本地数据迁移到云端并进行存储。数据存入 Amazon S3 存储后,客户使用 S3 生命周期策略 作为一种可扩展的解决方案, 根据对象 “创建日期” 自动对不同 Amaz on S3 存储类别 进行对象分层,这有助于客户大规模优化存储成本。当客户使用 S3 文件网关将对象上传到 Amazon S3 时,它会将源文件的 “修改日期” 更新为 S3 中的对象 “创建日期”,并将其存储。借助 S3 中新的 “创建日期”,Amazon S3 中的对象期限会重置,从而防止生命周期策略使用源服务器中的原始 “创建日期” 将对象分层到成本较低的存储类别。对于本地有大量旧文件并使用 S3 文件网关迁移和上传到 S3 存储的客户来说,这带来了挑战。

在这篇博客中,我们将介绍 亚马逊云科技 服务如何帮助您将数据迁移到云端,同时保持元数据属性不变,优化存储成本,以及使用标准 SMB(服务器消息块)和 NFS(网络文件系统)文件协议提供从本地应用程序访问云端数据的权限。我们将指导您如何保留和使用原始对象/文件元数据(原始修改日期的属性)来自动将文件放入所选的存储类别。

解决方案架构

该架构说明了我们如何将带有原始元数据的文件从本地文件系统迁移和上传到云端。如上所述,您将使用 Robocopy 复制源数据,然后将其存储到 S3 文件网关文件共享中。源文件包含元数据字段,例如 “上次修改日期” 和 “创建日期”。此后,我们在文档中将此源元数据信息称为原始统计 () 时间。然后,该解决方案使用 S3 文件网关自动迁移数据,并将数据存储到 S3 存储桶,并根据原始统计数据选择存储类别 ()。

对于由 “Amazon S3 文件网关” 存储在 S3 存储桶中的每个对象,Amazon S3 会维护一组 用户定义的对象元数据 , 以保留源文件的原始统计 () 时间。我们使用 Lambda 函数从用户定义的元数据字段读取原始统计数据 () 时间,以实例化 API 调用,将对象移动到相应的 S3 存储类。在此示例中,Glacier 即时检索 (GIR) 和 Glacier 深度存档 (GDA) S3 存储类已用于演示目的。

此架构图演示了两种不同的用例。第一个用例是使用 Amazon S3 文件网关将您的本地文件服务器数据迁移到 Amazon S3 存储桶。第二个用例是,它允许从您的本地位置通过 Amazon S3 文件网关的文件接口访问存储在 Amazon S3 中的对象。

Figure 1: Solution overview with Amazon S3 File Gateway, and AWS Lambda

图 1:使用亚马逊 S3 文件网关和 亚马逊云科技 Lambda 的解决方案概述

涉及的服务

该解决方案由以下主要服务组成。首先,我们将提供有关主要服务的背景信息。然后,我们将引导您了解这些服务如何创建整体解决方案。

  • Robopy
  • 亚马逊 S3 文件网关
  • 亚马逊 S3
  • 亚马逊云科技 Lambda

Robopy

Robocopy 允许您在文件复制过程中从微软 Windows 文件服务器复制本地文件元数据。您可以使用多种方法来保留正在迁移到 Amazon S3 的对象(文件)的文件元数据。我们将向您展示如何运行 Robocopy 命令来演示如何将文件时间戳和权限元数据从源同步到 S3 文件网关文件共享。

亚马逊 S3 文件网关

S3 文件网关是一项 亚马逊云科技 服务,支持将本地文件数据迁移到 亚马逊云科技 中的 亚马逊简单存储服务 ( S3) 存储。客户使用 Amazon S3 文件网关 在 Amazon S3 存储中 以对象的形式存储和检索服务器消息块 (SMB) 和网络文件共享 (NFS) 数据文件。将对象上传到 S3 存储后,客户可以利用提供的许多功能。其中一些功能包括加密、版本控制和生命周期管理。

亚马逊云科技 Lambda

亚马逊云科技 Lambda 是一项无服务器、事件驱动的计算服务,允许您在无需预置或管理服务器的情况下运行代码。在此解决方案中,亚马逊云科技 Lambda 利用其与 Amazon S3 的深度集成,帮助自动将文件移动到相应的 Amazon S3 存储类别。

解决方案演练

原始数据存储在本地 NAS 存储中,可以访问 SMB 或 NFS 协议。出于本文的目的,我们将研究解决方案工作流程。我们将引导您完成:

  1. 使用 Robocopy 复制数据并保留原始数据
  2. 配置亚马逊 S3 文件网关和亚马逊 S3 存储。
  3. 使用 亚马逊云科技 Lambda 自动执行 S3 生命周期策略。

1。使用 Robocopy 复制数据并保留原始统计数据 ()

在使用 Robocopy 工具将数据复制到 S3 文件网关时,应注意确保使用适当的元数据保存技术。这将确保将数据从本地 NAS 系统复制到 S3 文件网关并最终复制到 Amazon S3 时保留原始文件时间戳。在执行复制时,必须指定是否需要复制文件元数据。您应该使用 Amazon S3 文件网关在 Robocopy 工具中使用相应的选项来复制元数据。请参阅 S3 元数据文档 以了解更多信息。

以下示例显示了 Robocopy 如何运行以保留源文件元数据,这些元数据最终使用 S3 文件网关作为用户元数据存储在 S3 对象中。

C:\> robocopy <source> <destination> /TIMFIX /E /SECFIX

在哪里,

  • /TIMEFIX = 同步时间戳
  • /E 复制子文件夹,包括空文件夹
  • /SECFIX 复制 NTFS 权限
  • /V 用于详细记录

以下是有关如何仅复制权限和 ACL 信息的示例:

C:\> robocopy <source> <destination> /e /sec /secfix /COPY:ATSOU

Robocopy 有一个预览或试运行 (/L) 选项,在执行操作之前,你可以使用它来查看它会进行哪些更新。值得注意的是,使用 Robocopy 可能会很慢,因为它取决于每个前缀中的文件数量、客户端工作站根磁盘的速度以及是否启用了 Amazon S3 版本控制并带有删除标记。有关详细信息,请参阅 Robocopy 文档

2。配置亚马逊 S3 文件网关和亚马逊 S3 存储

您可以将 Amazon S3 文件网关作为虚拟机安装在本地环境中。它支持 VMware、微软 Hyper-V 和 Linux KVM,或者充当 专用的硬件设备 。 当 Robocopy 将文件从源服务器复制到 S3 文件网关上的文件共享时,它会将文件作为 亚马逊云科技 中的数据对象上传到 S3 存储中。文件网关充当用户需要经常访问的文件的缓存存储区。未访问或不经常使用的文件通过文件网关从 Amazon S3 存储桶中检索。

将文件复制到文件共享中时,数据将作为对象载入 Amazon S3。这些文件的原始元数据保留/存储在 S3 对象的 “用户元数据” 中。虽然每个 Amazon S3 对象都将有新的创建时间,但我们感兴趣的领域是存储在 “用户元数据” 中的原始 “mtime” 参数。

将数据首次迁移到 S3 存储后,您可以实现许多 S3 功能,以进一步优化成本并改善数据的安全状况。要更深入地了解文件网关和 Amazon S3 的功能,请参阅这些文档链接。

  • 亚马逊 S3 文件网关
  • 亚马逊 S3
  • 亚马逊 S3 存储类别
  • 在 Amazon S3 中使用加密保护数据
  • 亚马逊 S3 生命周期管理政策

3。使用 亚马逊云科技 Lambda 自动执行 S3 生命周期策略

使用亚马逊 S3 文件网关,在亚马逊 S3 中写入的每个对象都使用触发 亚马逊云科技 Lambda 函数的 PUT REST 调用。此 亚马逊云科技 Lambda 函数从 S3 对象的 “用户元数据” 中读取原始文件时间戳。该函数计算 “mtime” 参数(以 Unix 时间格式存储),并应用规则来了解数据是否有资格向下分层到不同的 Amazon S3 存储类别。如果根据定义的规则,数据符合移动条件,则该函数会根据需要应用操作来移动数据。在这里,您可以为 S3 生命周期策略定义阈值,将对象分层到不同的存储类别。

请参阅下面的示例代码,您可以使用它来构建解决方案。您可以根据需要对其进行更改和修改以满足您的要求。

import boto3
import json
import math
import numpy as np
bucket='demo-storagegateway'
s3 = boto3.client('s3')

from urllib.parse import unquote_plus

def lambda_handler(event, context):
	sourcekey = event['Records'][0]['s3']['object']['key']
	print ("sourcekey", sourcekey, unquote_plus(sourcekey))

	response = s3.head_object(Bucket=bucket, Key=unquote_plus(sourcekey))

	metadatareturn = response['Metadata']['file-mtime']
	OriginalTime = np.timedelta64(metadatareturn[:-2].ljust(9, '0'),'ns')

	print("metadata", metadatareturnint)
	if (OriginalTime + np.timedelta64(3650, "D")) > np.timedelta64(365, "D"):

		print("made it to file_key_name")
		file_key_name = unquote_plus(sourcekey)
		print(file_key_name)
		print("made it to copy_source_object")
		copy_source_object = {'Bucket': bucket, 'Key': file_key_name}
		print(copy_source_object)
		Testcopy=s3.copy_object(CopySource=copy_source_object, Bucket=bucket, 		Key=file_key_name, StorageClass='GLACIER')
		print("Testcopy", Testcopy)
Figure 2: Sample 亚马逊云科技 Lambda function code

摘要

在这篇博客中,我们介绍了如何在通过 S3 文件网关将数据从本地文件服务器移动到 Amazon S3 的初始迁移阶段保留文件的原始时间戳。您还讨论了如何利用 亚马逊云科技 Lambda 与 Amazon S3 的深度集成,根据代码中定义的特定日期将文件移动到成本较低的存储空间。这种方法的好处可确保不遗漏任何数据,您还可以以经济实惠的方式迁移和保留所有元数据。该解决方案不仅提供数据迁移路径,还为您的云之旅打开了大门。

通过利用 亚马逊云科技 Storage Gateway、Amazon S3 和 亚马逊云科技 Lambda,您可以将数据迁移到耐用、可扩展且高度可用的云存储中。您可以通过从本地访问数据来利用混合云存储,而无需对现有环境进行任何更改。它使您能够实现云原生功能,以简化数据管理、优化数据价值并大规模节省成本。

如果您有任何意见或问题,请随时将其留在评论部分。

Vikas Kakkar

Vikas Kakkar

Vikas Kakkar 是一位涉及 亚马逊云科技 存储服务的高级存储解决方案架构师。他在电信、银行、政府、国防和制造业等多个行业的基础设施解决方案架构方面拥有 24 年的经验。他是一个狂热的网球迷,喜欢经常玩这个游戏。

Ananta Khanal

Ananta Khanal

Ananta Khanal 是 亚马逊云科技 专注于云存储解决方案的解决方案架构师。他在 IT 领域工作了 15 年以上,并在不同的公司担任过各种职务。他热衷于云技术、基础设施管理、IT 战略和数据管理。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。