

# S3 Files 最佳实践
<a name="s3-files-best-practices"></a>

本页介绍使用 S3 文件系统的推荐最佳实践。

## 性能和成本优化
<a name="s3-files-best-practices-performance"></a>
+ **并行化您的工作负载**：S3 Files 旨在支持高度并行的工作负载。在多个文件和多个计算实例之间分配读取有助于最大限度地提高聚合吞吐量。还可以在同一个存储桶中创建多个范围限定为不同特定前缀的文件系统（而不是在整个存储桶上创建一个文件系统），以进行水平扩展并提高聚合吞吐量。
+ **将文件系统的范围限定为工作负载所需的最小前缀，以最大限度地减少重命名的影响**：S3 没有原生的目录概念。重命名或移动目录时，S3 Files 必须使用更新的键将数据写入新对象，并删除该目录中每个文件的原始数据。重命名包含数千万个文件的目录会显著增加 S3 请求成本和同步时间。将文件系统的范围限定为活动的数据集，或者对数据进行结构化，以使您希望重命名的目录包含更少的文件。有关更多信息，请参阅 [了解重命名和移动操作的影响](s3-files-synchronization.md#s3-files-sync-rename-move)。
+ **使用较大的 IO 大小**：S3 Files 将每个读取和写入操作计量为至少 32 KB。使用较大的 IO 大小（1 MB 或更大）可以分摊每次操作的开销，并且比许多小规模读取或写入更具成本效益。使用挂载助手时，默认的 NFS 读取和写入缓冲区大小设置为 1 MB 以获得最佳性能。
+ **调整导入配置中的 sizeLessThan 值以匹配文件大小**：默认情况下，当您首次访问目录时，S3 Files 会缓存小于 128 KB 的文件的数据。大于此阈值的文件将直接从 S3 读取。如果您的工作负载对较大的文件执行小型、对延迟敏感的读取，请提高 sizeLessThan 阈值，使其与文件系统的高性能存储所需的文件大小相匹配，以实现低延迟访问。有关更多信息，请参阅 [自定义 S3 Files 的同步](s3-files-synchronization-customizing.md)。
+ **设置与工作负载生命周期相匹配的到期时段**：未在到期时段内读取的数据会自动从文件系统中移除。对于短期工作负载，例如批处理作业或训练运行，请使用较短的到期时间（1-7 天），以最大限度地降低存储成本。对于在数周内重访相同数据的工作负载，请使用更长的过期时间（30–90 天），以继续受益于低延迟。有关更多信息，请参阅 [自定义 S3 Files 的同步](s3-files-synchronization-customizing.md)。
+ **对混合工作负载使用前缀范围的规则**：如果存储桶同时包含频繁访问和不频繁访问的数据，请为每个前缀创建单独的导入规则。这样，您就可以积极地为热前缀导入数据，同时仅保留冷的前缀元数据。有关更多信息，请参阅 [自定义 S3 Files 的同步](s3-files-synchronization-customizing.md)。
+ **在每个可用区中创建一个挂载目标**：我们建议在您运营的每个可用区中创建一个挂载目标，这样您就可以降低跨可用区数据传输成本并提高性能。这样可以确保计算资源始终具有通往文件系统的本地网络路径，从而提高可用性和延迟。使用 AWS 管理控制台创建文件系统时，S3 Files 会自动在所选 VPC 的每个可用区中创建一个挂载目标。

## 同步
<a name="s3-files-best-practices-sync"></a>
+ **了解 S3 Files 一致性模型**：当同时修改文件系统中的文件与其在 S3 存储桶中的相应对象时，S3 Files 会将 S3 存储桶视为事实来源，并将该文件移动到丢失找回目录中。为避免冲突，请将一个路径（文件系统或 S3）指定为主写入器。
+ **监控同步运行状况**：使用 CloudWatch 指标来跟踪文件系统与 S3 存储桶之间的同步状态。`PendingExports` 不断增长表示您的工作负载生成更改的速度快于同步速率，这意味着同步需要更长的时间才能完成。非零的 `ExportFailures` CloudWatch 指标表示无法导出而需要操作的文件。有关更多信息，请参阅 [S3 Files 故障排除](s3-files-troubleshooting.md)。

## 访问控制
<a name="s3-files-best-practices-access"></a>
+ **遵循最低权限原则**：仅授予每个 IAM 角色和文件系统策略所需的最低权限。例如，如果计算资源只需要从文件系统读取数据，则附加 `AmazonS3FilesClientReadOnlyAccess` 托管式策略而不是 `AmazonS3FilesClientFullAccess`。此外，请考虑创建范围限定为特定前缀而不是整个存储桶的文件系统，以便客户端只能访问该前缀内的数据。
+ **请勿修改 S3 Files IAM 角色**：请勿修改或删除 S3 Files 为与 S3 存储桶同步而代入的 IAM 角色。更改或移除此角色可能会中断文件系统与 S3 存储桶之间的同步。
+ **请勿修改 S3 Files EventBridge 规则**：S3 Files 会创建 EventBridge 规则（以 DO-NOT-DELETE-S3-Files 为前缀）来检测 S3 存储桶中的更改。请勿禁用、修改或删除此规则。将其移除会防止 S3 Files 检测到存储桶中的新对象或更改的对象，从而导致您的文件系统变得过时。
+ **考虑限制访问由 `efs-utils` 写入的日志**：`efs-utils` 将 S3 对象键名称直接写入它存储在目录 `/var/log/amazon/efs` 中的日志。如果您的 S3 键名称包含敏感信息，则应通过 POSIX 权限限制对该目录的访问。例如，您可以通过命令 `sudo chmod 700 /var/log/amazon/efs` 限制访问。

## 监控
<a name="s3-files-best-practices-monitoring"></a>
+ **设置同步失败警报**：对 `ImportFailures` 和 `ExportFailures` 创建 CloudWatch 警报，以便在文件同步失败时收到通知。导出失败可能表示权限问题、加密密钥问题或路径长度限制。有关更多信息，请参阅 [S3 Files 故障排除](s3-files-troubleshooting.md)。