

# 配置和使用 Mountpoint
<a name="mountpoint-usage"></a>

要使用适用于 Amazon S3 的 Mountpoint，您的主机需要有效的 AWS 凭证，有权访问您要挂载的一个或多个 Amazon S3 存储桶。有关不同的身份验证方式，请参阅 GitHub 上的 Mountpoint [AWS 凭证](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#aws-credentials)。

例如，您可以创建一个新的 AWS Identity and Access Management（IAM）用户和角色用于此目的。请确保此角色有权访问您要挂载的一个或多个存储桶。您可以通过实例配置文件[将 IAM 角色传递](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)给您的 Amazon EC2 实例。

**Topics**
+ [使用适用于 Amazon S3 的 Mountpoint](#using-mountpoint)
+ [在 Mountpoint 中配置缓存](#mountpoint-caching)

## 使用适用于 Amazon S3 的 Mountpoint
<a name="using-mountpoint"></a>

使用适用于 Amazon S3 的 Mountpoint 执行以下操作：

1. 挂载 Amazon S3 存储桶。

   1. 您可以使用 `mount-s3` 命令手动挂载 Amazon S3 存储桶。

      在下面的示例中，将 `amzn-s3-demo-bucket` 替换为 S3 存储桶的名称，并将 `~/mnt` 替换为主机上您希望在其中挂载 S3 存储桶的目录。

      ```
      mkdir ~/mnt
      mount-s3 amzn-s3-demo-bucket ~/mnt
      ```

      由于 Mountpoint 客户端默认情况下在后台运行，因此 `~/mnt` 目录现在支持您访问 Amazon S3 存储桶中的对象。

   1. 或者，从 Mountpoint v1.18 起，您可以配置在实例启动或重启时自动挂载 Amazon S3 存储桶。

      对于现有或正在运行的 Amazon EC2 实例，请在 Linux 系统的 `/etc/fstab` 目录中找到 `fstab` 文件。然后，向 `fstab` 文件中添加一行。例如，要使用前缀 `example-prefix/` 将 *amzn-s3-demo-bucket* 挂载到系统路径 `/mnt/mountpoint`，请参阅以下内容。要使用以下示例，请将*用户输入占位符* 替换为您自己的信息。

      ```
      s3://amzn-s3-demo-bucket/example-prefix/ /mnt/mountpoint mount-s3 _netdev,nosuid,nodev,nofail,rw 0 0
      ```

      有关示例中使用的选项的解释，请参阅下表。    
<a name="auto-mount-commands"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/mountpoint-usage.html)

      对于新的 Amazon EC2 实例，您可以修改 Amazon EC2 模板上的用户数据，并按如下方式设置 `fstab` 文件。要使用以下示例，请将*用户输入占位符* 替换为您自己的信息。

      ```
      #!/bin/bash -e
      MP_RPM=$(mktemp --suffix=.rpm)
      curl https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm > $MP_RPM
      yum install -y $MP_RPM
      rm $MP_RPM
      
      MNT_PATH=/mnt/mountpoint
      echo "s3://amzn-s3-demo-bucket/ ${MNT_PATH} mount-s3 _netdev,nosuid,nodev,rw,allow-other,nofail" >> /etc/fstab
      mkdir $MNT_PATH
      
      systemctl daemon-reload
      mount -a
      ```

1. 通过 Mountpoint 访问 Amazon S3 存储桶中的对象。

   在本地挂载存储桶后，您可以使用常用的 Linux 命令（例如 `cat` 或 `ls`）来处理您的 S3 对象。适用于 Amazon S3 的 Mountpoint 通过以正斜杠 (`/`) 字符为界拆分 Amazon S3 存储桶中的密钥，将这些密钥解释为文件系统路径。例如，如果您的存储桶中有对象密钥 `Data/2023-01-01.csv`，那么您的 Mountpoint 文件系统中将有一个名为 `Data` 的目录，其中有一个名称为 `2023-01-01.csv` 的文件。

   适用于 Amazon S3 的 Mountpoint 特意不实现文件系统的完整 [POSIX](https://en.wikipedia.org/wiki/POSIX) 标准规范。Mountpoint 针对以下工作负载进行了优化：此类工作负载需要通过文件系统接口对存储在 Amazon S3 中的数据进行高吞吐量读写访问，但不依赖文件系统功能。有关更多信息，请参阅 GitHub 上的适用于 Amazon S3 的 Mountpoint 的[文件系统行为](https://github.com/awslabs/mountpoint-s3/blob/main/doc/SEMANTICS.md)。需要更丰富的文件系统语义的客户应该考虑其他 AWS 文件服务，例如 [Amazon Elastic File System（Amazon EFS）](https://aws.amazon.com/efs/)或 [Amazon FSx](https://aws.amazon.com/fsx/)。

   

1. 使用 `umount` 命令卸载 Amazon S3 存储桶。此命令卸载您的 S3 存储桶并退出 Mountpoint。

   要使用以下示例命令，请将 `~/mnt` 替换为主机上挂载 S3 存储桶的目录。

   ```
   umount ~/mnt
   ```
**注意**  
要获取此命令的选项列表，请运行 `umount --help`。

有关其它 Mountpoint 配置详细信息，请参阅 GitHub 上的 [Amazon S3 bucket configuration](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#s3-bucket-configuration) 和 [file system configuration](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#file-system-configuration)。

## 在 Mountpoint 中配置缓存
<a name="mountpoint-caching"></a>

适用于 Amazon S3 的 Mountpoint 支持不同类型的数据缓存。要加快重复读取请求的速度，您可以选择以下选项：
+ **本地缓存** – 您可以在 Amazon EC2 实例存储或 Amazon Elastic Block Store 卷中使用本地缓存。如果您重复从同一个计算实例读取相同的数据，并且本地实例存储中有未使用的空间用于存放重复读取的数据集，则应该选择使用本地缓存。
+ **共享缓存** – 您可以在 S3 Express One Zone 上使用共享缓存。如果您重复读取多个计算实例中的小对象，或者您不知道重复读取的数据集的大小并希望从弹性缓存大小中受益，则应选择使用共享缓存。选择该选项后，Mountpoint 会在使用 S3 Express One Zone 的目录存储桶中，保留大小不超过一兆字节的对象。
+ **合并本地缓存和共享缓存** – 如果您的本地缓存中有未使用的空间，但又想在多个实例之间共享缓存，则可以选择同时使用本地缓存和共享缓存。

在 Mountpoint 中缓存非常适合重复读取相同数据的使用场景，这些数据在多次读取期间不会发生更改。例如，可以将缓存用于需要多次读取训练数据集的机器学习训练作业，以提高模型精度。

有关如何在 Mountpoint 中配置缓存的更多信息，请参阅以下示例。

**Topics**
+ [本地缓存](#local-cache-example)
+ [共享缓存](#shared-cache-example)
+ [合并本地缓存和共享缓存](#shared-local-cache-example)

### 本地缓存
<a name="local-cache-example"></a>

您可以利用 `--cache CACHE_PATH` 标志选择使用本地缓存。在以下示例中，将 *`CACHE_PATH`* 替换为要在其中缓存数据的目录的文件路径。将 *`amzn-s3-demo-bucket`* 替换为 Amazon S3 存储桶的名称，并将 *`~/mnt`* 替换为主机上您希望在其中挂载 S3 存储桶的目录。

```
mkdir ~/mnt
mount-s3 --cache CACHE_PATH amzn-s3-demo-bucket ~/mnt
```

如果您在挂载 Amazon S3 存储桶时选择使用本地缓存，Mountpoint 会在所配置的缓存位置创建一个空的子目录（如果该子目录尚不存在）。首次挂载存储桶以及卸载存储桶时，Mountpoint 会删除本地缓存的内容。

**重要**  
如果启用本地缓存，Mountpoint 会将挂载的 Amazon S3 存储桶中的未加密对象内容，持久保存在挂载时提供的本地缓存位置。为了保护您的数据，您应使用文件系统访问控制机制，限制对数据缓存位置的访问。

### 共享缓存
<a name="shared-cache-example"></a>

如果您重复读取多个计算实例中的小对象（最大 1 MB），或者重复读取的数据集大小通常超过本地缓存的大小，则应在 [S3 Express One Zone](https://aws.amazon.com/s3/storage-classes/express-one-zone/) 中使用共享缓存。当您从多个实例重复读取相同的数据时，这样可以避免向挂载的 Amazon S3 存储桶发出冗余请求，从而缩短延迟。

选择使用共享缓存后，您需要为缓存在您的 S3 Express One Zone 目录存储桶中的数据付费。您还需要为针对您在 S3 Express One Zone 目录存储桶中存储的数据发出的请求付费。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。Mountpoint 从不删除目录存储桶中的缓存对象。要管理存储成本，您应该[在目录存储桶上设置生命周期策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-lifecycle.html)，以便在您指定的时间段后，Amazon S3 可使 S3 Express One Zone 中的缓存数据过期。有关更多信息，请参阅 GitHub 上的 [Mountpoint for Amazon S3 caching configuration](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#caching-configuration)。

要在将 Amazon S3 存储桶挂载到计算实例时选择在 S3 Express One Zone 中进行缓存，请使用 `--cache-xz` 标志并将目录存储桶指定为缓存位置。在以下示例中，替换*用户输入占位符*。

```
mount-s3 amzn-s3-demo-bucket ~/mnt --cache-xz amzn-s3-demo-bucket--usw2-az1--x-s3
```

### 合并本地缓存和共享缓存
<a name="shared-local-cache-example"></a>

如果您的实例上有未使用的空间，但又想在多个实例之间使用共享缓存，则可以选择同时使用本地缓存和共享缓存。使用此缓存配置，当所需数据缓存在本地存储中时，您可以避免从同一实例向目录存储桶中的共享缓存发送冗余读取请求。这可以降低请求成本并提高性能。

 要在挂载 Amazon S3 存储桶时同时选择使用本地缓存和共享缓存，请使用 `--cache` 和 `--cache-xz` 标志来指定这两个缓存位置。要利用以下示例来选择同时使用本地缓存和共享缓存，请替换*用户输入占位符*。

```
mount -s3 amzn-s3-demo-bucket ~/mnt --cache /path/to/mountpoint/cache --cache -xz amzn-s3-demo-bucket--usw2-az1--x-s3
```

有关更多信息，请参阅 GitHub 上的 [Mountpoint for Amazon S3 caching configuration](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#caching-configuration)。

**重要**  
如果您启用共享缓存，Mountpoint 会将对象内容从挂载的 Amazon S3 存储桶复制到您作为共享缓存位置提供的 S3 目录存储桶中，从而使任何有权访问 S3 目录存储桶的调用方都可以访问这些内容。要保护缓存的数据，您应遵循 [Amazon S3 的安全最佳实践](security-best-practices.md)以确保存储桶使用了正确的策略，并且不是公开可访问的。您应该使用专用于 Mountpoint 共享缓存的目录存储桶，并仅向 Mountpoint 客户端授予访问权限。