

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 AWS 在不同 AWS 区域的 Amazon EFS 文件系统之间同步数据 DataSync
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync"></a>

*Sarat Chandra Pothula 和 Aditya Ambati，Amazon Web Services*

## Summary
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-summary"></a>

该解决方案提供了一个强大的框架，用于在不同 AWS 区域中的 Amazon Elastic File System（Amazon EFS）实例之间高效、安全地同步数据。这种方法具有可扩展性，并能够以受控的方式跨区域复制数据。该解决方案可以增强您的灾难恢复和数据冗余策略。

通过使用 AWS Cloud Development Kit（AWS CDK），可以将此模式用作一种基础设施即代码（IaC）方法来部署解决方案资源。AWS CDK 应用程序部署了 AWS、 DataSync亚马逊 EFS、亚马逊虚拟私有云（亚马逊 VPC）和亚马逊弹性计算云（亚马逊 VPC EC2）的基本资源。此 IaC 提供了一个可重复、受版本控制并且完全符合 AWS 最佳实践的部署过程。

## 先决条件和限制
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ [已安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)且[已配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) AWS 命令行界面（AWS CLI）版本 2.9.11 或更高版本。
+ [已安装](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)且[已引导](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) AWS CDK 2.114.1 或更高版本。
+ NodeJS 20.8.0 或更高版本，[已安装](https://nodejs.org/en/download)。

**限制**
+ 该解决方案继承了 Amazon EFS DataSync 和 Amazon EFS 的限制，例如数据传输速率、大小限制和区域可用性。有关更多信息，请参阅 [AWS DataSync 配额](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html)和 A [mazon EFS 配额](https://docs.aws.amazon.com/efs/latest/ug/limits.html)。
+ 此解决方案仅支持 Amazon EFS。 DataSync 支持[其他 AWS 服务](https://docs.aws.amazon.com/datasync/latest/userguide/working-with-locations.html)，例如亚马逊简单存储服务 (Amazon S3) Service 和 Amazon for Lust FSx re。然而，该解决方案需要修改，才能与其他的这些服务同步数据。

## 架构
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-architecture"></a>

![用于将数据复制到不同区域中的 EFS 文件系统的架构图](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e28ba6c2-ab8b-4812-932e-f038106d5496/images/18b35ae9-a22e-43e7-b7a3-30e40321c44e.png)


该解决方案将部署以下 AWS CDK 堆栈：
+ **Amazon VPC 堆栈** –­ 此堆栈将在主要和次要 AWS 区域中设置虚拟私有云（VPC）资源，包括子网、互联网网关和 NAT 网关。
+ **Amazon EFS 堆栈** — 此堆栈将 Amazon EFS 文件系统部署到主区域和次要区域，并将它们连接到各自 VPCs的区域。
+ **Amazon EC2 堆**栈 — 此堆栈在主要和次要区域启动 EC2 实例。这些实例被配置为挂载 Amazon EFS 文件系统，这样就使它们能够访问共享存储。
+ **DataSync 位置堆栈** — 此堆栈使用名`DataSyncLocationConstruct`为的自定义构造在主要和次要区域中创建 DataSync 位置资源。这些资源将定义用于同步数据的端点。
+ **DataSync 任务堆栈** — 此堆栈使用名`DataSyncTaskConstruct`为的自定义结构在主区域中创建 DataSync 任务。此任务配置为使用 DataSync 源位置和目标位置在主区域与次要区域之间同步数据。

## 工具
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-tools"></a>

**Amazon Web Services**
+ [AWS Cloud Development Kit（AWS CDK）](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 是一个软件开发框架，可帮助您在代码中定义并预调配 AWS 云基础设施。
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html) 是一项在线数据传输和发现服务，可帮助您在 AWS 存储服务之间移动文件或对象数据。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon Elastic File System（Amazon EFS）](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)可帮助您在 AWS 云端创建和配置共享文件系统。
+ [Amazon Virtual Private Cloud（Amazon VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)可帮助您将 AWS 资源启动到您定义的虚拟网络中。此虚拟网络类似于您在自己的数据中心内运行的传统网络，具有使用 AWS 可扩展基础设施的优势。

**代码存储库**

此模式的代码可在 GitHub [Amazon EFS 跨区域 DataSync 项目](https://github.com/aws-samples/aws-efs-crossregion-datasync/tree/main)存储库中找到。

## 最佳实践
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-best-practices"></a>

遵循中[使用 AWS CDK 创建 IaC 项目的最佳实践中描述 TypeScript 的最佳](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/introduction.html)实践。

## 操作说明
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-epics"></a>

### 部署 AWS CDK 应用程序
<a name="deploy-the-aws-cdk-app"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆项目存储库。 | 输入以下命令以克隆 [Amazon EFS 跨区域 DataSync 项目](https://github.com/aws-samples/aws-efs-crossregion-datasync/tree/main)存储库。<pre>git clone https://github.com/aws-samples/aws-efs-crossregion-datasync.git</pre> | AWS DevOps | 
| 安装 npm 依赖项。 | 输入如下命令。<pre>npm ci</pre> | AWS DevOps | 
| 选择主要区域和次要区域。 | 在克隆的存储库中，导航到 `src/infa` 目录。在 `SECONDARY_AWS_REGION` 文件中，更新 `Launcher.ts` 和 `PRIMARY_AWS_REGION` 值。使用相应的[区域代码](https://docs.aws.amazon.com/general/latest/gr/datasync.html#datasync-region)。<pre>const primaryRegion = { account: account, region: '<PRIMARY_AWS_REGION>' };<br />const secondaryRegion = { account: account, region: '<SECONDARY_AWS_REGION>' };</pre> | AWS DevOps | 
| 引导 环境。 | 输入如下命令，以便引导您要使用的 AWS 账户和 AWS 区域。<pre>cdk bootstrap <aws_account>/<aws_region></pre><br />有关详情，请参阅 AWS CDK 文档中的[引导](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)。 | AWS DevOps | 
| 列出 AWS CDK 堆栈。 | 输入如下命令，以便查看应用程序中的 AWS CDK 堆栈的列表。<pre>cdk ls</pre> | AWS DevOps | 
| 合成 AWS CDK 堆栈。 | 输入以下命令，为 AWS CDK 应用程序中定义的每个堆栈生成一个 AWS CloudFormation 模板。<pre>cdk synth</pre> | AWS DevOps | 
| 部署 AWS CDK 应用程序。 | 输入如下命令，以便将所有堆栈都部署到您的 AWS 账户中，无需手动批准即可进行任何更改。<pre>cdk deploy --all --require-approval never</pre> | AWS DevOps | 

### 验证部署
<a name="validate-the-deployment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 登录主区域中的 EC2 实例。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync.html) | AWS DevOps | 
| 创建一个临时文件。 | 输入如下命令，以便在 Amazon EFS 挂载路径中创建一个临时文件。<pre>sudo dd if=/dev/zero \<br />of=tmptst.dat \<br />bs=1G \<br />seek=5 \<br />count=0<br /><br />ls -lrt tmptst.dat</pre> | AWS DevOps | 
| 启动 DataSync 任务。 | 输入以下命令将临时文件从主区域复制到辅助区域，其中`<ARN-task>`是您的 DataSync 任务的 Amazon 资源名称 (ARN)。<pre>aws datasync start-task-execution \<br />    --task-arn <ARN-task></pre><br />此命令将以如下格式返回任务执行操作的 ARN。<br />`arn:aws:datasync:<region>:<account-ID>:task/task-execution/<exec-ID>` | AWS DevOps | 
| 检查数据传输状态。 | 输入以下命令来描述 DataSync 执行任务，其中`<ARN-task-execution>`是任务执行的 ARN。<pre>aws datasync describe-task-execution \<br />    --task-execution-arn <ARN-task-execution></pre><br />当、和`VerifyStatus`都具有值时 `PrepareStatus``TransferStatus`， DataSync 任务就完成了`SUCCESS`。 | AWS DevOps | 
| 登录辅助区域中的 EC2 实例。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync.html) | AWS DevOps | 
| 验证复制操作。 | 输入如下命令，以便确认 Amazon EFS 文件系统中存在此临时文件。<pre>ls -lrt<br />tmptst.dat</pre> | AWS DevOps | 

## 相关资源
<a name="synchronize-data-between-amazon-efs-file-systems-in-different-aws-regions-by-using-aws-datasync-resources"></a>

**AWS 文档**
+ [AWS CDK API 参考](https://docs.aws.amazon.com/cdk/api/v2/python/modules.html)
+ [使用 Amazon EFS 配置 AWS DataSync 转账](https://docs.aws.amazon.com/datasync/latest/userguide/create-efs-location.html)
+ [排除 AWS DataSync 转账问题](https://docs.aws.amazon.com/datasync/latest/userguide/troubleshooting-datasync-locations-tasks.html)

**其他 AWS 资源**
+ [AWS DataSync FAQs](https://aws.amazon.com/datasync/faqs/)