

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EFS 磁碟區
<a name="efs-volumes"></a>

Amazon Elastic File System (Amazon EFS) 提供簡單、可擴展的檔案儲存，可與您的 AWS Batch 任務搭配使用。利用 Amazon EFS，儲存容量即可有彈性。當您新增和移除檔案時，它會自動擴展。您的應用程式可在需要時具備所需的儲存容量。

您可以使用 Amazon EFS 檔案系統搭配 AWS Batch 在容器執行個體機群之間匯出檔案系統資料。如此一來，您的任務就可以存取相同的持久性儲存。但您必須在 Docker 常駐程式啟動之前，先設定您的容器執行個體 AMI，以掛載 Amazon EFS 檔案系統。此外，您的任務定義必須參考容器執行個體上的磁碟區掛載，才能使用檔案系統。下列各節可協助您開始使用 Amazon EFS 搭配 AWS Batch。

## Amazon EFS 磁碟區考量事項
<a name="efs-volume-considerations"></a>

使用 Amazon EFS 磁碟區時應考慮以下事項：
+ 對於使用 EC2 資源的任務，Amazon EFS 檔案系統支援已新增為使用 `20191212` Amazon ECS 最佳化 AMI 版本搭配容器代理程式版本 1.35.0 的公開預覽。不過，Amazon EFS 檔案系統支援使用`20200319`容器代理程式 1.38.0 版的 Amazon ECS 最佳化 AMI 版本進入一般可用性，其中包含 Amazon EFS 存取點和 IAM 授權功能。我們建議您使用 Amazon ECS 最佳化 AMI 版本 `20200319` 或更新版本，以利用這些功能。如需詳細資訊，請參閱《[Amazon Elastic Container Service 開發人員指南》中的 Amazon ECS 最佳化 AMI 版本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html)。 **
**注意**  
如果您建立自己的 AMI，則必須使用容器代理程式 1.38.0 或更新版本、1.38.0-1 `ecs-init`版或更新版本，並在 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 開發人員指南*》中的 [AWS Fargate 平台版本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)。
+ 使用 Fargate 資源在任務中指定 Amazon EFS 磁碟區時，Fargate 會建立主管容器，負責管理 Amazon EFS 磁碟區。主管容器會使用少量任務的記憶體。查詢任務中繼資料第 4 版端點時，可看見監督容器。如需詳細資訊，請參閱 * AWS Fargate的 Amazon Elastic Container Service 使用者指南*中的[任務中繼資料端點版本 4](https://docs.aws.amazon.com/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 使用者指南》中的[使用 Amazon EFS 存取點](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)。

存取點可以針對透過存取點提出的所有檔案系統要求，強制執行使用者身分 (包括使用者的 POSIX 群組)。存取點也可以針對檔案系統強制執行不同的根目錄，讓用戶端只能存取指定目錄或其子目錄中的資料。

**注意**  
建立 EFS 存取點時，您可以在檔案系統上指定要做為根目錄的路徑。當您在 AWS Batch 任務定義中參考具有存取點 ID 的 EFS 檔案系統時，必須省略根目錄或將其設定為 `/` 這會強制執行在 EFS 存取點上設定的路徑。

您可以使用 AWS Batch 任務 IAM 角色來強制執行特定應用程式使用特定存取點。透過結合 IAM 政策與存取點，您可以輕鬆地為應用程式提供特定資料集的安全存取權。此功能使用 Amazon ECS IAM 角色執行任務功能。如需詳細資訊，請參閱《Amazon Elastic Container Service 開發人員指南》**中的[任務 IAM 角色](https://docs.aws.amazon.com/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 檔案系統識別碼。  
`rootDirectory`  
類型：字串  
必要：否  
在 Amazon EFS 檔案系統中的目錄，其將掛載作為主機內的根目錄。如果省略此參數，使用 Amazon EFS 磁碟區的根目錄。指定 `/` 的效果與忽略此參數的效果相同。長度上限為 4，096 個字元。  
如果在 中指定了 EFS 存取點`authorizationConfig`，則必須省略根目錄參數，或將 設定為 `/`。這會強制執行在 EFS 存取點上設定的路徑。  
`transitEncryption`  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
決定是否為 AWS Batch 主機和 Amazon EFS 伺服器之間傳輸的 Amazon EFS 資料啟用加密。若使用 Amazon EFS IAM 授權，則必須啟用傳輸加密。如果省略此參數，系統會使用 `DISABLED` 的預設值。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》中的[加密傳輸中的資料](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)。  
`transitEncryptionPort`  
類型：整數  
必要：否  
在 AWS Batch 主機和 Amazon EFS 伺服器之間傳送加密資料時要使用的連接埠。如果您未指定傳輸加密連接埠，它會使用 Amazon EFS 掛載協助程式使用的連接埠選擇策略。該值必須介於 0 到 65,535 之間。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的 [EFS 掛載協助程式](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)。  
`authorizationConfig`  
類型：物件  
必要：否  
Amazon EFS 檔案系統的授權組態詳細資訊。    
`accessPointId`  
類型：字串  
必要：否  
要使用的存取點 ID。如果指定存取點，`efsVolumeConfiguration`則必須省略 中的根目錄值，或將 設定為 `/`。這會強制執行在 EFS 存取點上設定的路徑。如果使用存取點，則必須在 `EFSVolumeConfiguration` 中啟用傳輸加密。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的[使用 Amazon EFS 存取點](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)。  
`iam`  
類型：字串  
有效值：`ENABLED` \$1 `DISABLED`  
必要：否  
決定是否在掛載 Amazon EFS 檔案系統時使用 AWS Batch 任務定義中定義的任務 IAM 角色。如果已啟用，必須在 `EFSVolumeConfiguration` 中啟用傳輸加密。如果省略此參數，系統會使用 `DISABLED` 的預設值。如需 IAM 執行角色的詳細資訊，請參閱 [AWS Batch IAM 執行角色](execution-IAM-role.md)。