如何將 Amazon EFS 檔案系統掛載到在 Fargate 上執行的 Amazon ECS 容器或任務上?

3 分的閱讀內容
0

我想將 Amazon Elastic File System (Amazon EFS) 檔案系統掛載到 Amazon Elastic Container Service (Amazon ECS) 容器或任務上。Amazon ECS 容器或任務正在 AWS Fargate 上執行。

解決方法

若要將 Amazon EFS 檔案系統掛載在 Fargate 任務或容器上,您必須先建立任務定義。接著,將該任務定義提供給 AWS 區域中所有可用區域內任務的容器使用。最後,您的 Fargate 任務會使用 Amazon EFS 自動將檔案系統掛載到您在任務定義中指定的任務。

重要: 以下解決方法適用於 Fargate 版本 1.4.0 及更新版本。這些版本具有持續性儲存空間,可讓您在 Amazon ECS 中於任務和容器層級定義。Fargate 版本 1.3.0 或更早版本不支援使用 Amazon EFS 的持續性儲存空間。

先決條件

您必須具有以下項目:

建立和設定 Amazon EFS 檔案系統

  1. 建立 Amazon EFS 檔案系統,然後記下 EFS ID 和安全群組 ID。
    注意: 您的 Amazon EFS 檔案系統、Amazon ECS 叢集和 Fargate 任務都必須位於相同的 VPC 中。
  2. 編輯 EFS 檔案系統的安全群組規則,以允許傳入連線。您必須允許與 Fargate 任務或服務相關聯的安全群組,在連接埠 2049 (網路檔案系統或 NFS) 上進行連線。
  3. 更新 Amazon ECS 服務的安全群組,以允許在連接埠 2049 上傳出連線到 Amazon EFS 檔案系統的安全群組。

建立任務定義

  1. 開啟 Amazon ECS 傳統主控台
  2. 從導覽窗格中選擇 Task Definitions (工作定義),然後選擇 Create new Task Definition (建立新工作定義)。
  3. Select launch type compatibility (選取啟動類型相容性) 區段,選擇 FARGATE,然後選擇 Next Step (下一步)。
  4. Configure task and container definitions (設定任務和容器定義) 區段的 Task Definition Name (任務定義名稱) 中,輸入任務定義的名稱。
  5. Volumes (磁碟區) 區段中選擇 Add volume (新增磁碟區)。
  6. Name (名稱) 中,輸入您的磁碟區名稱。
  7. Volume type (磁碟區類型) 中,輸入 EFS。
  8. File system ID (檔案系統 ID) 中,輸入您 Amazon EFS 檔案系統的 ID。
    注意: 您可以為根目錄傳輸中加密EFS AWS Identity and Access Management (IAM) 授權指定自訂選項。或者,您可以接受預設值選項,其中 "/" 是根目錄。
  9. 選擇 Add (新增)。
  10. Containers Definition (容器定義) 區段中,選擇 Add container (新增容器)。
  11. STORAGE AND LOGGING (儲存與記錄) 區段的 Mount points (掛載點) 子區段中,選取您在步驟 5 中為來源磁碟區建立的磁碟區。
  12. Container path (容器路徑) 中,選擇您的容器路徑。
  13. (選擇性) 在環境區段的進入點中,輸入您的進入點。
  14. 命令中,輸入 df ,-h 命令以顯示掛載的檔案系統。
    注意: 您可以使用進入點和命令,測試 Amazon EFS 檔案系統是否已成功掛載。預設情況下,容器會在 df -h 命令成功執行後退出。步驟 16 中的 JSON 任務定義範例使用無限 while 迴圈來保持任務執行。
  15. 選擇 Add (新增)。
  16. 在任務定義精靈中的其餘欄位輸入您的資訊,然後選擇建立

在下列範例中,JSON 任務定義使用無限迴圈讓任務保持執行狀態。任務定義建立了名為 efs-test 的資料磁碟區。nginx 容器將託管資料磁碟區掛載在Any_Container_Path 路徑上。

{
  "family": "sample-fargate-test",
  "networkMode": "awsvpc",
  "executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "name": "fargate-app",
      "image": "nginx",
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80,
          "protocol": "tcp"
        }
      ],
      "essential": true,
      "entryPoint": [
        "sh",
        "-c"
      ],
      "command": [
        "df -h && while true; do echo \"RUNNING\"; done"
      ],
      "mountPoints": [
        {
          "sourceVolume": "efs-test",
          "containerPath": "Any_Container_Path"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "AWS_LOG_GROUP_PATH",
          "awslogs-region": "AWS_REGION",
          "awslogs-stream-prefix": "AWS_STREAM_PREFIX"
        }
      }
    }
  ],
  "volumes": [
    {
      "name": "efs-test",
      "efsVolumeConfiguration": {
        "fileSystemId": "fs-123xx4x5"
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "256",
  "memory": "512"
}

注意: 使用自訂組態值,取代 fileSystemIdlogConfigurationcontainerPath 及其他預留位置值。另外,請確認您的任務定義具有執行 awslogs 日誌驅動程式的 IAM 角色 Amazon Resource Name (ARN)。
若要將多個 EFS 掛載到不同的目的地 (containerPath),您可以在任務定義中定義多個 mountPoints磁碟區

執行 Fargate 任務並檢查任務日誌

  1. 使用您先前建立的任務定義執行 Fargate 任務。
    重要: 您必須使用 Fargate 平台版本 1.4.0 來執行任務。
  2. 若要確認 Amazon EFS 檔案系統是否已成功掛載到 Fargate 容器,請檢查您的任務日誌
    df-h 的輸出類似以下內容:
    2020-10-27 15:15:35Filesystem 1K-blocks Used Available Use% Mounted on
    
    2020-10-27 15:15:35
    overlay 30832548 9859324 19383976 34% /
    
    2020-10-27 15:15:35
    tmpfs 65536 0 65536 0% /dev
    
    2020-10-27 15:15:35
    shm 2018788 0 2018788 0% /dev/shm
    
    2020-10-27 15:15:35
    tmpfs 2018788 0 2018788 0% /sys/fs/cgroup
    
    2020-10-27 15:15:35
    fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ 9007199254739968 0 9007199254739968 0% /Any_Container_Path
    
    2020-10-27 15:15:35
    /dev/xvdcz 30832548 9859324 19383976 34% /etc/hosts
    
    2020-10-27 15:15:35
    tmpfs 2018788 0 2018788 0% /proc/acpi
    
    2020-10-27 15:15:35
    tmpfs 2018788 0 2018788 0% /sys/firmware
    
    2020-10-27 15:15:35
    tmpfs 2018788 0 2018788 0% /proc/scsi
    
    RUNNING

相關資訊

Amazon EFS 磁碟區的安全性與存取控制

在 Amazon ECS 任務定義中指定 Amazon EFS 檔案系統

使用主控台設定 Amazon ECS 的 Amazon EFS 檔案系統

AWS 官方
AWS 官方已更新 25 天前