亚马逊AWS官方博客

AWS DataSync 的新增功能 — 在 AWS 和 Google Cloud Storage 或 AWS 和 Microsoft Azure 文件之间移动数据

借助 AWS DataSync,可以自动化并加快将数据移入和移出 AWS Storage 服务的速度。例如,您可以使用 DataSync 将数据迁移到 AWS,复制数据以实现业务连续性,以及移动数据以在云中进行分析和处理。您可以使用 DataSync 在 AWS Storage 服务之间传输数据,包括 Amazon Simple Storage Service(Amazon S3)Amazon Elastic File System(Amazon EFS)Amazon FSx。DataSync 还与 Amazon CloudWatchAWS CloudTrail 集成,用于记录、监控和警报。

今天,我们为 DataSync 添加了在 AWS Storage 服务与 Google Cloud Storage 或 Microsoft Azure 文件之间迁移数据的功能。通过这种方式,您可以简化数据处理或存储整合任务。如果您需要导入、共享数据并与使用 Google Cloud Storage 或 Microsoft Azure 文件的客户、供应商或合作伙伴交换数据,这也很有帮助。DataSync 提供端到端的安全性,包括加密和完整性验证,以确保您的数据安全、完好无损并随时可用。

我们来看看这些步骤的实际操作。

准备 DataSync 代理
首先,我需要一个 DataSync 代理来读取或写入位于 Google Cloud Storage 或 Azure 文件中的存储。我把代理部署在 Amazon Elastic Compute Cloud(Amazon EC2)实例上。最新的 DataSync Amazon 机器映像(AMI)ID 存储在 Parameter Store 中,这是 AWS Systems Manager 的一项功能。我使用 AWS 命令行界面(AWS CLI)来获取 /aws/service/datasync/ami 参数的值:

aws ssm get-parameter --name /aws/service/datasync/ami --region us-east-1
{
    "Parameter": {
        "Name": "/aws/service/datasync/ami",
        "Type": "String",
        "Value": "ami-0e244fe801cf5a510",
        "Version": 54,
        "LastModifiedDate": "2022-05-11T14:08:09.319000+01:00",
        "ARN": "arn:aws:ssm:us-east-1::parameter/aws/service/datasync/ami",
        "DataType": "text"
    }
}

使用 EC2 控制台,我使用参数的 Value 属性中指定的 AMI ID 启动一个 EC2 实例。对于联网,我使用公有子网和自动分配公有 IP 地址的选项。EC2 实例需要通过网络访问数据移动任务的来源和目的地。实例的另一个要求是能够从 DataSync 接收 HTTP 流量以激活代理。

在基于 Amazon VPC 服务的虚拟私有云(VPC)中使用 AWS DataSync 时,最佳做法是使用 VPC 端点将代理与 DataSync 服务连接。在 VPC 控制台中,我在导航窗格中选择 Endpoints(端点),然后选择 Create endpoint(创建端点)。我输入端点的名称并选择 AWS services(AWS 服务)类别。

控制台屏幕截图。

我在 Services(服务)部分中,寻找 DataSync。

控制台屏幕截图。

然后,我选择启动 EC2 实例的相同 VPC。

控制台屏幕截图。

为了减少跨可用区的流量,我选择用于 EC2 实例的相同子网。

控制台屏幕截图。

在 EC2 实例上运行的 DataSync 代理需要对 VPC 端点的网络访问权限。为简单起见,我为两者都使用了 VPC 的默认安全组。我创建了 VPC 端点,几分钟后就可以使用了。

控制台屏幕截图。

AWS DataSync 控制台中,我从导航窗格中选择 Agents(代理),然后选择 Create agent(创建代理)。我为 Hypervisor(虚拟机监控器)选择了 Amazon EC2

控制台屏幕截图。

我为 Endpoint type(端点类型)选择了 VPC endpoints using AWS PrivateLink(使用 AWS PrivateLink 的 VPC 端点)。我选择之前创建的 VPC endpoint(VPC 端点)以及用于 VPC 端点的相同 Subnet(子网)和 Security group(安全组)。

我选择 Automatically get the activation key(自动获取激活密钥)选项,然后键入 EC2 实例的公有 IP。然后,我选择 Get key(获取密钥)。

控制台屏幕截图。

激活 DataSync 代理后,我不再需要 HTTP 访问权限,我将其从 EC2 实例的安全组中删除。现在 DataSync 代理处于活动状态,我可以配置任务和位置来移动数据。

将数据从 Google Cloud Storage 迁移到 Amazon S3
我在 Google Cloud Storage 存储桶中有几张图片,我想将这些文件与 S3 存储桶同步。在 Google Cloud 控制台中,我打开存储桶的设置。在那里,我创建了一个具有 Storage Object Viewer 权限的服务账户,并记下凭证(访问密钥和密钥)以编程方式访问存储桶。

回到 AWS DataSync 控制台中,我依次选择 Tasks(任务)和 Create task(创建任务)。

为了配置任务的来源,我创建了一个位置。我为 Location type(位置类型)选择了 Object storage(对象存储),然后选择了我刚刚创建的代理。对于 Server(服务器),我使用 storage.googleapis.com。然后,我输入 Google Cloud 存储桶分区的名称以及存储我的图片的文件夹。

控制台屏幕截图。

对于身份验证,我输入访问密钥和创建服务账户时检索到的密钥。我选择 Next(下一步)。

控制台屏幕截图。

为了配置任务的目的地,我创建了另一个位置。这次,我为 Location Type(位置类型)选择了 Amazon S3。我选择目的地 S3 存储桶并输入一个文件夹,该文件夹将用作传输到存储桶的文件的前缀。我使用 Autogenerate(自动生成)按钮创建 IAM 角色,该角色将授予 DataSync 访问 S3 存储桶的权限。

控制台屏幕截图。

在下一步中,我将配置任务设置。我输入任务的名称。或者,我可以微调 DataSync 验证传输数据的完整性或为任务分配带宽的方式。

控制台屏幕截图。

我还可以选择要扫描的数据和要传输的数据。默认情况下,扫描所有源数据,只传输已更改的数据。在 Additional settings(其他设置)中,我禁用 Copy object tags(复制对象标签),因为 Google Cloud Storage 当前不支持标签。

控制台屏幕截图。

我可以选择用于运行此任务的计划。现在,我将其保留为 Not scheduled(未计划),我选择手动启动。

控制台屏幕截图。

对于日志记录,我使用 Autogenerate(自动生成)按钮为 DataSync 创建日志组。我选择 Next(下一步)。

控制台屏幕截图。

我检查配置并创建任务。现在,我从控制台启动数据移动任务。几分钟后,这些文件将与我的 S3 存储桶同步,我可以从 S3 控制台访问它们。

控制台屏幕截图。

将数据从 Azure 文件移动到 Amazon FSx for Windows File Server
我拍了很多照片,而且在 Azure 文件共享中还有几张图片。我想将这些文件与 Amazon FSx for Windows 文件系统同步。在 Azure 控制台中,我选择文件共享,然后选择 Connect(连接)按钮以生成 PowerShell 脚本,用于检查是否可以通过网络访问此存储账户。

$connectTestResult = Test-NetConnection -ComputerName <SMB_SERVER> -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    # Save the password so the drive will persist on reboot
    cmd.exe /C "cmdkey /add:`"danilopsync.file.core.windows.net`" /user:`"localhost\<USER>`" /pass:`"<PASSWORD>`""
    # Mount the drive
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\danilopsync.file.core.windows.net\<SHARE_NAME>" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445.Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

从这个脚本中,我获取了配置 DataSync 位置所需的信息:

  • SMB 服务器
  • 共享名称
  • 用户
  • 密码

回到 AWS DataSync 控制台中,我依次选择 Tasks(任务)和 Create task(创建任务)。

为了配置任务的来源,我创建了一个位置。我为 Location Type(位置类型)选择了 Server Message Block (SMB)(服务器消息块(SMB)),然后选择之前创建的代理。然后,我使用在脚本中找到的信息输入用于身份验证的 SMB Server(SMB 服务器)地址、Share name(共享名称)和 User(用户)/Password(密码)。

控制台屏幕截图。

要配置任务的目的地,我再次创建一个位置。这次,我为 Location type(位置类型)选择了 Amazon FSx。我选择了之前创建的 FSx for Windows 文件系统,并使用默认共享名称。我使用默认安全组连接到文件系统。因为我将AWS Directory Service for Microsoft Active Directory 与 FSx for Windows File Server 一起使用,所以我使用的是 AWS Delegated FSx AdministratorsDomain Admins 组的用户成员的凭证。有关更多信息,请参阅文档中的为 FSx for Windows File Server 创建位置

控制台屏幕截图。

在下一步中,我输入任务的名称,并将所有其他选项保留为其默认值,就像对上一个任务所做的那样。

控制台屏幕截图。

我检查配置并创建任务。现在,我从控制台启动数据移动任务。几分钟后,这些文件将与我的 FSx for Windows 文件系统共享同步。我挂载了 Windows EC2 实例的文件系统共享,然后看到我的图片在那里。

EC2 屏幕截图。

创建任务时,我可以重复使用现有位置。例如,如果我想将文件从 Azure 文件同步到我的 S3 存储桶,我可以快速选择我为这篇文章创建的两个对应位置。

可用性和定价
您可以使用 AWS DataSync 控制台AWS 命令行界面(CLI)AWS SDK 来移动数据,以创建在 AWS Storage 和 Google Cloud Storage 存储桶或 Azure 文件系统之间移动数据的任务。在任务运行时,您可以通过 DataSync 控制台或使用 CloudWatch 监控进度。

具备这些新功能的 DataSync 定价没有任何变化。将数据移入和移出 Google Cloud 或 Microsoft Azure 的费用与当前 DataSync 支持的所有其他数据来源的费用相同。

Google Cloud 或 Microsoft Azure 可能会向您收取数据传输费用。由于 DataSync 在代理和 AWS 之间进行复制时会压缩传输中的数据,因此您可以通过在 Google Cloud 或 Microsoft Azure 环境中部署 DataSync 代理来降低出站费用。

使用 DataSync 将数据从 AWS 移动到 Google Cloud 或 Microsoft Azure 时,您需要支付从 EC2 向互联网传输数据的费用。有关更多信息,请参阅 Amazon EC2 定价

利用 AWS DataSync 自动化并加快数据移动方式。

Danilo