

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

# Amazon EFS 卷
<a name="efs-volumes"></a>

Amazon Elastic File System (Amazon EFS) 提供简单的可扩展文件存储以供Amazon Batch作业使用。使用 Amazon EFS 时，存储容量是弹性的。它会随着添加和删除文件而自动扩展。应用程序可在需要时获得所需存储。

可以将 Amazon EFS 文件系统与Amazon Batch配合使用，以便导出跨容器实例的实例集的文件系统数据。这样，作业就可以访问相同的永久存储。但是，必须将容器实例 AMI 配置为在 Docker 进程守护程序启动前挂载 Amazon EFS 文件系统。此外，作业定义必须引用容器实例上的卷挂载才能使用该文件系统。下面几个部分可帮助开始使用 Amazon EFS 与Amazon Batch配合使用。

## Amazon EFS 卷注意事项
<a name="efs-volume-considerations"></a>

使用 Amazon EFS 卷时应注意以下事项：
+ 对于使用 EC2 资源的作业，已将 Amazon EFS 文件系统支持作为公开预览版添加，其中包括 Amazon ECS 优化 AMI 版本`20191212`以及容器代理版本 1.35.0。但是，Amazon EFS 文件系统支持通过 Amazon ECS 优化 AMI 版本`20200319`和容器代理版本 1.38.0 正式推出，该版本包含 Amazon EFS 接入点和 IAM 授权功能。建议使用 Amazon ECS 优化 AMI 版本`20200319`或更高版本以利用这些功能。有关更多信息，请参阅*《Amazon Elastic Container Service 开发人员指南》*中的[ Amazon ECS 优化 AMI 版本](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/ecs-ami-versions.html)。
**注意**  
如果创建自己的 AMI，则必须使用容器代理 1.38.0 或更高版本、`ecs-init`版本 1.38.0-1 或更高版本，并在 Amazon EC2 实例上运行以下命令。这一切都是为了启用 Amazon ECS 卷插件。命令取决于将 Amazon Linux 2 还是 Amazon Linux 用作基本映像。  

Amazon Linux 2  

  ```
  $ yum install amazon-efs-utils
  systemctl enable --now amazon-ecs-volume-plugin
  ```

Amazon Linux  

  ```
  $ yum install amazon-efs-utils
  sudo shutdown -r now
  ```
+ 对于 Fargate 资源的作业，使用 1.4.0 或更高的平台版本时，添加了 Amazon EFS 文件系统支持。有关更多信息，请参阅*《Amazon Elastic Container Service 开发人员指南》*中的[Amazon Fargate 平台版本](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/platform_versions.html)。
+ 在使用 Fargate 资源的作业中指定 Amazon EFS 卷时，Fargate 会创建负责管理 Amazon EFS 卷的主管容器。主管容器使用少量的作业内存。主管容器在查询任务元数据版本 4 端点时可见。有关更多信息，请参阅《Amazon Elastic Container Service *Amazon Fargate用户指南》*中的[任务元数据端点版本 4](https://docs.amazonaws.cn/AmazonECS/latest/userguide/task-metadata-endpoint-v4-fargate.html)。

## 使用 Amazon EFS 接入点
<a name="efs-volume-accesspoints"></a>

Amazon EFS 接入点是 EFS 文件系统中特定于应用程序的入口点，便于轻松地管理应用程序对共享数据集的访问。有关 Amazon EFS 接入点以及如何控制访问的更多信息，请参阅[《Amazon Elastic File System 用户指南》](https://docs.amazonaws.cn/efs/latest/ug/efs-access-points.html)中的*使用 Amazon EFS 接入点*。

接入点可以为通过接入点发出的所有文件系统请求强制执行用户身份（包括用户的 POSIX 组）。接入点还可以为文件系统强制执行不同的根目录，以便客户端只能访问指定目录或其子目录中的数据。

**注意**  
创建 EFS 接入点时，可以在文件系统上指定用作根目录的路径。在Amazon Batch作业定义中引用具有接入点 ID 的 EFS 文件系统时，必须忽略根目录或将根目录设置为`/`，以便在 EFS 接入点上强制执行设置的路径。

可以使用Amazon Batch作业 IAM 角色强制特定应用程序使用某个具体的接入点。可以通过将 IAM 策略与接入点相结合轻松地为应用程序提供对特定数据集的安全访问。此功能使用 Amazon ECS IAM 角色来执行任务功能。有关更多信息，请参阅 *Amazon Elastic Container Service 开发人员指南*中的[任务的 IAM 角色](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/task-iam-roles.html)。

## 在作业定义中指定 Amazon EFS 文件系统
<a name="specify-efs-config"></a>

要为容器使用 Amazon EFS 文件系统卷，必须在作业定义中指定卷和挂载点配置。以下作业定义 JSON 代码段显示容器的`volumes`和`mountPoints`对象的语法：

```
{
    "containerProperties": [
        {
            "image": "amazonlinux:2",
            "command": [
                "ls",
                "-la",
                "/mount/efs"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "myEfsVolume",
                    "containerPath": "/mount/efs",
                    "readOnly": true
                }
            ],
            "volumes": [
                {
                    "name": "myEfsVolume",
                    "efsVolumeConfiguration": {
                        "fileSystemId": "fs-12345678",
                        "rootDirectory": "/path/to/my/data",
                        "transitEncryption": "ENABLED",
                        "transitEncryptionPort": integer,
                        "authorizationConfig": {
                            "accessPointId": "fsap-1234567890abcdef1",
                            "iam": "ENABLED"
                        }
                    }
                }
            ]
        }
    ]
}
```

`efsVolumeConfiguration`  
类型：对象  
必需：否  
使用 Amazon EFS 卷时将指定此参数。    
`fileSystemId`  
类型：字符串  
必需：是  
要使用的 Amazon EFS 文件系统 ID。  
`rootDirectory`  
类型：字符串  
必需：否  
Amazon EFS 文件系统中要作为主机内的根目录挂载的目录。如果忽略此参数，将使用 Amazon EFS 卷的根目录。指定`/`与忽略此参数效果相同。其长度最多为 4096 个字符。  
如果在`authorizationConfig`中指定了 EFS 接入点，则必须省略根目录参数，或者将其设置为`/`。这将强制执行 EFS 接入点上设置的路径。  
`transitEncryption`  
类型：字符串  
有效值：`ENABLED` \$1 `DISABLED`  
必需：否  
确定是否对Amazon Batch主机和 Amazon EFS 服务器之间传输的 Amazon EFS 数据启用加密。如果使用 Amazon EFS IAM 授权，则必须启用传输加密。如果忽略此参数，将使用默认值`DISABLED`。有关更多信息，请参阅[《Amazon Elastic File System 用户指南》](https://docs.amazonaws.cn/efs/latest/ug/encryption-in-transit.html)中的*加密传输中数据*。  
`transitEncryptionPort`  
类型：整数  
必需：否  
在Amazon Batch主机和 Amazon EFS 服务器之间发送加密数据时要使用的端口。如果未指定传输加密端口，将使用 Amazon EFS 挂载帮助程序使用的端口选择策略。该值必须在 0 到 65535 之间。有关更多信息，请参阅[《Amazon Elastic File System 用户指南》](https://docs.amazonaws.cn/efs/latest/ug/efs-mount-helper.html)中的 *EFS 挂载帮助程序*。  
`authorizationConfig`  
类型：对象  
必需：否  
Amazon EFS 文件系统的授权配置详细信息。    
`accessPointId`  
类型：字符串  
必需：否  
要使用的接入点 ID。如果指定了接入点，则必须省略在`efsVolumeConfiguration`中的根目录值，或者将其设置为`/`。这将强制执行 EFS 接入点上设置的路径。如果使用接入点，则必须在`EFSVolumeConfiguration`中启用传输加密。有关更多信息，请参阅*《Amazon Elastic File System 用户指南》*中的[使用 Amazon EFS 接入点](https://docs.amazonaws.cn/efs/latest/ug/efs-access-points.html)。  
`iam`  
类型：字符串  
有效值：`ENABLED` \$1 `DISABLED`  
必需：否  
确定在挂载 Amazon EFS 文件系统时是否使用在作业定义中定义的Amazon Batch作业 IAM 角色。如果启用，则必须在`EFSVolumeConfiguration`中启用传输加密。如果忽略此参数，将使用默认值`DISABLED`。有关 IAM 执行角色的更多信息，请参阅 [Amazon Batch IAM 执行角色](execution-IAM-role.md)。