

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

# 教程：挂载来自其它 VPC 的文件系统
<a name="efs-different-vpc"></a>

在此教程中，您将设置一个 EC2 实例来挂载位于其它虚拟私有云（VPC）中的 EFS 文件系统。您可以使用 EFS 挂载帮助程序执行该操作。挂载帮助程序是 `amazon-efs-utils` 工具集的一部分。有关 `amazon-efs-utils`的更多信息，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。

必须使用 VPC 对等连接或 VPC 传输网关连接客户端的 VPC 和 EFS 文件系统的 VPC。当您使用 VPC 对等连接或传输网关连接 VPC 时，一个 VPC 中的 EC2 实例可以访问另一个 VPC 中的 EFS 文件系统，即使 VPCs 它们属于不同的账户。

**注意**  
不支持将 Amazon EFS 与基于 Microsoft Windows 的客户端结合使用。

**Topics**
+ [先决条件](#wt6-prepare)
+ [步骤 1：确定挂载目标的可用区 ID](#wt6-efs-utils-step1)
+ [步骤 2：确定挂载目标 IP 地址](#wt6-efs-utils-step2)
+ [步骤 3：为挂载目标添加主机条目](#wt6-efs-utils-step3)
+ [步骤 4：使用 EFS 挂载帮助程序挂载您的文件系统](#wt6-efs-utils-step4)
+ [第 5 步：清理资源并保护您的 AWS 账户](#wt6-step5-cleanup)

## 先决条件
<a name="wt6-prepare"></a>

要完成本教程，您必须满足以下条件：
+ 在使用此过程之前，将在 EC2 实例上安装 `amazon-efs-utils` 工具集。有关安装 `amazon-efs-utils` 的说明，请参阅[安装 Amazon EFS 客户端](using-amazon-efs-utils.md)。
+ 下列情况之一：
  + EFS 文件系统所在的 VPC 与 EC2 实例所在的 VPC 之间的 VPC 对等连接。*VPC 对等连接*是两 VPCs者之间的网络连接。这种类型的连接使您能够使用私有 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 地址在它们之间路由流量。您可以使用 VPC 对等互连 VPCs 在同一个 AWS 区域 或两者之间 AWS 区域进行连接。有关更多信息，请参阅《Amazon VPC 对等连接指南》**中的[创建并接受 VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)。
  + EFS 文件系统所在的 VPC 与 EC2 实例所在的 VPC 之间的中转网关连接。*传输网关*是一个网络中转枢纽，可用于将您的网络 VPCs 和本地网络互连。有关更多信息，请参阅《Amazon VPC Transit Gateway 指南》**中的[开始使用 Amazon VPC 中转网关](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)。

## 步骤 1：确定挂载目标的可用区 ID
<a name="wt6-efs-utils-step1"></a>

为了确保您的文件系统的高可用性，我们建议您始终使用与 NFS 客户端位于相同可用区的 EC2 挂载目标 IP 地址。如果要挂载其他账户中的 EFS 文件系统，请确保 NFS 客户端和 EFS 挂载目标位于相同的可用区 ID 中。此要求适用，因为可用区名称在账户之间可能会有所不同。

**确定 EC2 实例的可用区 ID**

1. 连接到您的 EC2 实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。

1. 按以下所示，使用 `describe-availability-zones` CLI 命令确定 EC2 实例所在的可用区 ID。

   ```
   [ec2-user@ip-10.0.0.1] $ aws ec2 describe-availability-zones --zone-name
   {
       "AvailabilityZones": [
           {
               "State": "available", 
               "ZoneName": "us-east-2b", 
               "Messages": [], 
               "ZoneId": "use2-az2", 
               "RegionName": "us-east-2"
           }
       ]
   }
   ```

   可用区 ID 将在 `ZoneId` 属性 `use2-az2` 中返回。

## 步骤 2：确定挂载目标 IP 地址
<a name="wt6-efs-utils-step2"></a>

您已知道 EC2 实例的可用区 ID，现在可以检索位于同一可用区 ID 中的挂载目标的 IP 地址。

**在同一可用区 ID 中确定挂载目标 IP 地址**
+ 按以下所示，使用 `describe-mount-targets` CLI 命令在 `use2-az2` 可用区 ID 中检索文件系统的挂载目标 IP 地址。

  ```
  $ aws efs describe-mount-targets --file-system-id file_system_id
  {
      "MountTargets": [
          {
              "OwnerId": "111122223333",
              "MountTargetId": "fsmt-11223344", 
    =====>    "AvailabilityZoneId": "use2-az2",
              "NetworkInterfaceId": "eni-048c09a306023eeec", 
              "AvailabilityZoneName": "us-east-2b", 
              "FileSystemId": "fs-01234567", 
              "LifeCycleState": "available", 
              "SubnetId": "subnet-06eb0da37ee82a64f", 
              "OwnerId": "958322738406", 
    =====>    "IpAddress": "10.0.2.153"
          }, 
  ...
          {
              "OwnerId": "111122223333",
              "MountTargetId": "fsmt-667788aa", 
              "AvailabilityZoneId": "use2-az3", 
              "NetworkInterfaceId": "eni-0edb579d21ed39261", 
              "AvailabilityZoneName": "us-east-2c", 
              "FileSystemId": "fs-01234567", 
              "LifeCycleState": "available", 
              "SubnetId": "subnet-0ee85556822c441af", 
              "OwnerId": "958322738406", 
              "IpAddress": "10.0.3.107"
          }
      ]
  }
  ```

  `use2-az2` 可用区 ID 中的挂载目标的 IP 地址为 10.0.2.153。

## 步骤 3：为挂载目标添加主机条目
<a name="wt6-efs-utils-step3"></a>

您现在可以在 EC2 实例上的 `/etc/hosts` 文件中生成一个条目，将挂载目标 IP 地址映射到您的 EFS 文件系统的主机名。

**为挂载目标添加主机条目**

1. 将挂载目标 IP 地址行添加到 EC2 实例的 `/etc/hosts` 文件中。该条目使用 `mount-target-IP-Address file-system-ID.efs.region.amazonaws.com` 格式。使用以下命令，将该行添加到文件中。

   ```
   echo "10.0.2.153 fs-01234567.efs.us-east-2.amazonaws.com" | sudo tee -a /etc/hosts
   ```

1. 确保 EC2 实例和挂载目标的 VPC 安全组具有允许根据需要访问 EFS 文件系统的规则。有关更多信息，请参阅 [使用 VPC 安全组](network-access.md)。

## 步骤 4：使用 EFS 挂载帮助程序挂载您的文件系统
<a name="wt6-efs-utils-step4"></a>

要挂载 EFS 文件系统，必须先在 EC2 实例上创建挂载目录。然后，使用 EFS 挂载助手，您可以通过 AWS Identity and Access Management (IAM) 授权或 EFS 接入点挂载文件系统。有关更多信息，请参阅[使用 IAM 控制文件系统访问](iam-access-control-nfs-efs.md)和[使用接入点工作](efs-access-points.md)。

**创建挂载目录**
+ 使用以下命令创建用于挂载文件系统的目录。

  ```
  $ sudo mkdir /mnt/efs/
  ```

**使用 IAM 授权挂载文件系统**
+ 使用以下命令，通过 IAM 授权挂载文件系统。

  ```
  $ sudo mount -t efs -o tls,iam file-system-id /mnt/efs/
  ```

**使用 EFS 访问点挂载文件系统**
+ 使用以下命令，通过 EFS 访问点挂载文件系统。

  ```
  $ sudo mount -t efs -o tls,accesspoint=access-point-id file-system-id /mnt/efs/
  ```

现已挂载 EFS 文件系统，您可以使用以下过程对其进行测试。

**测试 EFS 文件系统连接**

1. 使用以下命令将目录更改为您创建的新目录。

   ```
   $ cd ~/mnt/efs
   ```

1. 创建一个子目录，并将该子目录的所有权更改为您的 EC2 实例用户。接下来，使用以下命令导航到该新目录。

   ```
   $ sudo mkdir getting-started
   $ sudo chown ec2-user getting-started
   $ cd getting-started
   ```

1. 使用以下命令创建一个文本文件。

   ```
   $ touch test-file.txt
   ```

1. 使用以下命令列出目录内容。

   ```
   $ ls -al
   ```

这样，将会创建以下文件。

```
-rw-rw-r-- 1 username username 0 Nov 15 15:32 test-file.txt
```

您也可以在 `/etc/fstab` 文件中添加条目以自动挂载文件系统。有关更多信息，请参阅 [在现有 EC2 Linux 实例上启用自动挂载](mount-fs-auto-mount-update-fstab.md)。

**警告**  
请在自动挂载文件系统时使用 `_netdev` 选项，它用于指定网络文件系统。如果缺少 `_netdev`，您的 EC2 实例可能会停止响应。出现该结果是因为，需要在计算实例启动其网络后初始化网络文件系统。有关更多信息，请参阅 [自动挂载失败，并且实例没有响应](troubleshooting-efs-mounting.md#automount-fails)。

## 第 5 步：清理资源并保护您的 AWS 账户
<a name="wt6-step5-cleanup"></a>

完成本教程后，请执行以下步骤以清理资源并保护您的 AWS 账户。

**清理资源并保护您的 AWS 账户**

1. 使用以下命令卸载 EFS 文件系统。

   ```
   $ sudo umount ~/efs
   ```

1. 打开 Amazon Elastic File System 控制台，网址为[https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)。

1. 选择要从文件系统列表中删除的 EFS 文件系统。

1. 对于**操作**，选择**删除文件系统**。

1. 在**永久删除文件系统**对话框中，键入要删除的 EFS 文件系统的文件系统 ID，然后选择**删除文件系统**。

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**安全组**。

1. 选择您针对本教程向其中添加了规则的安全组的名称。
**警告**  
不要删除您的 VPC 的默认安全组。

1. 对于**操作**，请选择**编辑入站规则**。

1. 选择在添加的入站规则末尾的 X，然后选择**保存**。