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

3 分的閱讀內容
0

我想將 Amazon Elastic File System (Amazon EFS) 檔案系統掛載到 Amazon Elastic Container Service (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 中。

  1. 若要允許從與 Fargate 任務或服務相關聯之安全性群組在連接埠 2049 (網路檔案系統或 NFS) 進行傳入連線,請編輯 EFS 檔案系統的安全群組規則

  2. 更新 Amazon ECS 服務的安全群組,以允許在連接埠 2049 上傳出連線到 Amazon EFS 檔案系統的安全群組。

建立任務定義

  1. 開啟 Amazon ECS 主控台

  2. 從導覽窗格中,選擇任務定義,然後選擇建立新的任務定義

  3. 選取啟動類型相容性區段,選擇 FARGATE,然後選擇下一步

  4. 設定任務和容器定義 區段的任務定義名稱中,輸入任務定義的名稱。

  5. 磁碟區區段中選擇新增磁碟區

6.    在名稱中,輸入您的磁碟區名稱。

  1. 磁碟區類型中,輸入 EFS。

  2. 檔案系統 ID 中,輸入您 Amazon EFS 檔案系統的 ID。

注意:您可以為根目錄傳輸中加密EFS IAM 授權指定自訂選項。或者,您可以接受預設值,其中 "/" 是根目錄。

  1. 選擇新增

  2. 容器定義區段中,選擇新增容器

  3. 儲存與記錄區段的掛載點子區段中,選取您在步驟 5 中為來源磁碟區建立的磁碟區。

  4. 容器路徑中,選擇您的容器路徑。

  5. (選擇性) 在環境區段的進入點中輸入您的進入點。

  6. 命令中,輸入 [df ,-h] 命令以顯示掛載的檔案系統。

**注意:**您可以使用進入點和命令來測試 Amazon EFS 檔案系統是否已成功掛載。預設情況下,容器會在 df -h 命令成功執行後退出。步驟 16 中的 JSON 任務定義範例使用無限 while 迴圈來保持任務執行。

  1. 選擇新增

  2. 填寫任務定義精靈中的其餘欄位,然後選擇建立

在下列範例中,任務定義建立了名為 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 日誌驅動程式的執行角色 Amazon 資源名稱 (ARN)。

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

  1. 使用您先前建立的任務定義執行 Fargate 任務。

**重要事項:**請務必在 Fargate 平台 1.4.0 版上執行您的任務。

  1. 若要確認 Amazon EFS 檔案系統是否已成功掛載到 Fargate 容器,請檢查您的任務日誌

df-h 的輸出類似以下內容:

2020-10-27 15:15:35
Filesystem 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 EFS 檔案系統和 Amazon ECS

AWS 官方
AWS 官方已更新 3 年前