

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

# 亚马逊 S3 文件卷
<a name="s3files-volumes"></a>

S3 Files 允许文件系统直接访问存储在亚马逊简单存储服务 (Amazon S3) 存储桶中的数据。使用 Amazon Batch，您可以在任务定义中定义 S3 文件卷，以便您的容器可以使用标准文件操作读取和写入 Amazon S3 数据。

要使用 S3 文件卷，您需要将 S3 文件系统和挂载目标配置在与 Amazon Batch 计算环境相同的 VPC 中。有关完整的设置说明，包括存储桶配置、IAM 角色、文件系统创建和挂载目标，请参阅 Amazon [S3 用户指南中的 S3 文件先决条件](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-prereq-policies.html)*和亚马逊**弹性容器服务开发人员指南中的 Amazon* [ECS 配置 S3 文件](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/s3files-volumes.html)。

## 亚马逊 S3 文件量注意事项
<a name="s3files-volume-considerations"></a>

使用 S3 文件卷时，请考虑以下事项：
+ 
**重要**  
目前，Amazon EC2 启动类型不支持 S3 Files。如果您在任务定义中配置 S3 文件系统并尝试在 Amazon EC2 启动类型上运行该文件系统，则任务将在启动时失败。Amazon EC2 启动类型支持计划在未来版本中提供。
+ S3 文件卷始终启用传输加密。您可以选择使用`transitEncryptionPort`参数指定端口。默认端口为 `2049`。
+ 该任务角色（等同于 Amazon ECS 任务角色）必须拥有`s3files:ClientMount`文件系统上的`s3files:ClientWrite`权限。要直接从 Amazon S3 读取`s3:GetObject`，该角色还需要存储桶上的`s3:GetObjectVersion`、和`s3:ListBucket`权限。
+ S3 文件系统挂载目标必须位于同一 VPC 中，并且可以从 Amazon Batch 计算环境的子网访问。挂载目标安全组必须允许来自计算环境安全组的入站 NFS 流量（TCP 端口 2049）。

## 使用 Amazon S3 文件接入点
<a name="s3files-volume-accesspoints"></a>

S3 Files 接入点是文件系统中应用程序特定的入口点，它为所有文件系统请求强制执行 POSIX 用户身份和根目录。您可以使用接入点隔离租户，以便每个作业只能访问共享文件系统中自己的目录。

**注意**  
使用`accessPointArn`参数指定接入点时，`rootDirectory`必须省略或将其设置为`/`。接入点强制使用自己的根目录路径。

有关创建和管理接入点的更多信息，请参阅 *Amazon S3 用户指南*中的[为 S3 文件系统创建接入点](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-access-points-creating.html)。有关使用文件系统策略强制实施接入点隔离的更多信息，请参阅 A *mazon S3 用户指南*中的 [S3 文件如何与 IAM 配合](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-security-iam.html)使用。

## 在任务定义中指定 Amazon S3 文件文件系统
<a name="specify-s3files-config"></a>

要将 S3 Files 卷用于容器，您必须在任务定义中指定卷和挂载点配置。以下作业定义 JSON 代码段显示容器的`volumes`和`mountPoints`对象的语法：

```
{
    "ecsProperties": {
        "taskProperties": [
            {
                ...,
                "taskRoleArn": "arn:aws:iam::{{<account>}}:role/{{<job-role-name>}}",
                "containers": [
                    {
                        ...,
                        "mountPoints": [
                            {
                                "sourceVolume": "{{myS3FilesVolume}}",
                                "containerPath": "{{/mnt/s3data}}",
                                "readOnly": {{false}}
                            }
                        ]
                    }
                ],
                "volumes": [
                    {
                        "name": "{{myS3FilesVolume}}",
                        "s3filesVolumeConfiguration": {
                            "fileSystemArn": "arn:aws:s3files:{{<region>}}:{{<account>}}:file-system/{{<fs-id>}}",
                            "rootDirectory": "{{/keypath/in/s3}}"
                        }
                    }
                ]
            }
        ]
    }
}
```

`s3filesVolumeConfiguration`  
类型：对象  
必需：否  
此参数是在使用 S3 文件卷时指定的。    
`fileSystemArn`  
类型：字符串  
是否必需：是  
要使用的 S3 文件系统的完整 ARN。  
`rootDirectory`  
类型：字符串  
必需：否  
S3 文件系统中的目录，作为主机内的根目录挂载。如果省略此参数，则使用文件系统的根目录。指定`/`与忽略此参数效果相同。其长度最多为 4096 个字符。  
如果在中指定了 S3 文件访问点`accessPointArn`，则必须省略根目录参数或将其设置为`/`。这将强制使用在接入点上设置的路径。  
`transitEncryptionPort`  
类型：整数  
必需：否  
在 Amazon Batch 主机和 S3 文件服务器之间发送加密数据时使用的端口。如果您未指定传输加密端口，`2049`则使用默认值。该值必须在 0 到 65535 之间。S3 文件卷始终启用传输加密。  
`accessPointArn`  
类型：字符串  
必需：否  
要使用的 S3 文件接入点的 ARN。如果指定了接入点，则必须省略在`s3filesVolumeConfiguration`中的根目录值，或者将其设置为`/`。这将强制使用在接入点上设置的路径。接入点强制执行 POSIX 用户身份，并且可以限制对文件系统中特定目录的访问。有关更多信息，请参阅 [A *mazon S3 用户指南中的为 S3* 文件系统创建接入点](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-access-points-creating.html)。

## 将 S3 文件卷与 Amazon Batch 和 Amazon EKS 一起使用
<a name="s3files-eks-volumes"></a>

对于使用 Amazon EKS 资源的作业，通过 EKS 任务定义卷配置`persistentVolumeClaim`中的 Amazon Batch 支持 S3 文件卷。在任务定义中引用永久卷和永久卷之前，您必须在 Amazon EKS 集群中预先创建永久卷和永久卷声明。

以下任务定义片段显示了如何引用 S3 文件永久卷声明：

```
{
    "eksProperties": {
        "podProperties": {
            ...,
            "containers": [
                {
                    ...,
                    "volumeMounts": [
                        {
                            "name": "{{s3files-vol}}",
                            "mountPath": "{{/mnt/s3data}}"
                        }
                    ]
                }
            ],
            "volumes": [
                {
                    "name": "{{s3files-vol}}",
                    "persistentVolumeClaim": {
                        "claimName": "{{<s3files-pvc-name>}}"
                    }
                }
            ]
        }
    }
}
```

有关使用 Amazon EKS 设置 S3 文件的更多信息，请参阅 Amazon [S3 *用户指南中的在亚马逊 EKS 中安装 S3* 文件系统](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-files-mounting-eks.html)。有关完整的音量参数参考，请参阅 *Amazon Batch API 参考[EksVolume](https://docs.amazonaws.cn/batch/latest/APIReference/API_EksVolume.html)*中的。