

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

# 使用主控台為 Amazon ECS 設定 Amazon EFS 檔案系統
<a name="tutorial-efs-volumes"></a>

了解如何搭配 Amazon ECS 使用 Amazon Elastic File System (Amazon EFS) 檔案系統。

## 步驟 1：建立 Amazon ECS 叢集
<a name="efs-create-cluster"></a>

使用下列步驟來建立 Amazon ECS 叢集。

**建立新叢集 (Amazon ECS 主控台)**

在開始之前，請指派適當的 IAM 許可。如需詳細資訊，請參閱[Amazon ECS 叢集範例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 從導覽列中選取要使用的「區域」。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇 **Create cluster** (建立叢集)。

1. 在**叢集組態**下的**叢集名稱**中，輸入叢集名稱的 `EFS-tutorial`。

1. (選用) 若要變更任務和服務啟動所在的 VPC 和子網路，請在 **Networking** (聯網) 下，執行下列任一操作：
   + 若要移除子網路，請在 **Subnets** (子網路) 下，對您要移除之每一個子網路選擇 **X**。
   + 若要變更為非 **default** (預設) VPC，請在 **VPC** 下，選擇現有的 **VPC**，然後在 **Subnets** (子網路) 下選擇各個子網路。

1.  若要將 Amazon EC2 執行個體新增至叢集，展開 **Infrastructure** (基礎設施)，然後選取 **Amazon EC2 執行個體**。接下來，設定作為容量提供者的 Auto Scaling 群組：

   1. 若要建立 Auto Scaling 群組，請從 **Auto Scaling group (ASG)** (Auto Scaling 群組 (ASG)) 中選取 **Create new group** (建立新群組)，然後提供有關該群組的下列詳細資訊：
     + 在**作業系統/架構**中，選擇 Amazon Linux 2。
     + 對於 **EC2 instance type (EC2 執行個體類型)**，選擇 `t2.micro`。

        對於 **SSH key pair** (SSH 金鑰對)，選擇在連線到執行個體時證明您身分的金鑰對。
     + 在**容量**中，輸入 `1`。

1. 選擇**建立**。

## 步驟 2：為 Amazon EC2 執行個體和 Amazon EFS 檔案系統建立安全群組
<a name="efs-security-group"></a>

在此步驟中，您將為 Amazon EC2 執行個體建立安全群組，以允許連接埠 80 上的入站網路流量，並為 Amazon EFS 檔案系統建立一個允許從容器執行個體進行入站存取的安全群組。

使用下列選項為 Amazon EC2 執行個體建立安全群組：
+ **安全群組名稱** - 為您的安全群組輸入唯一的名稱。
+ **VPC** - 選擇您先前為叢集所確認的 VPC。
+ **傳入規則**
  + **類型** - **HTTP**
  + **資源來源** - **0.0.0.0/0**。

使用下列選項為 Amazon EFS 檔案系統建立安全群組：
+ **安全群組名稱** - 為您的安全群組輸入唯一的名稱。例如 `EFS-access-for-sg-dc025fa2`。
+ **VPC** - 選擇您先前為叢集所確認的 VPC。
+ **傳入規則**
  + **類型** - **NFS**
  + **來源** - 使用您為執行個體建立的安全群組 ID 進行**自訂**。

如需有關如何建立安全群組的資訊，請參閱 *Amazon EC2 User Guide* 中的 [Create a security group for your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-security-group.html)。

## 步驟 3：建立 Amazon EFS 檔案系統
<a name="efs-create-filesystem"></a>

在此步驟中，您將建立一個 Amazon EFS 檔案系統。

**建立 Amazon ECS 任務的 Amazon EFS 檔案系統。**

1. 開啟 Amazon Elastic File System 主控台，網址為 [https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)。

1. 選擇 **Create file system (建立檔案系統)**。

1. 輸入檔案系統的名稱，然後選擇容器執行個體所託管的 VPC。根據預設，指定之 VPC 中的每個子網路，都會收到一個使用該 VPC 之預設安全群組的掛載目標。然後，選擇**自訂**。
**注意**  
本教學課程假設您的 Amazon EFS 檔案系統、Amazon ECS 叢集、容器執行個體與任務皆位於同一 VPC 中。如需有關從不同 VPC 掛載檔案系統的詳細資訊，請參閱 *Amazon EFS User Guide* 中的 [Walkthrough: Mount a file system from a different VPC](https://docs.aws.amazon.com/efs/latest/ug/efs-different-vpc.html)。

1. 在**檔案系統設定**頁面上，設定選用設定，然後在**效能設定**下，為您的檔案系統選擇**高載**輸送量模式。設定完設定之後，請選取**下一步**。

   1. (選用) 為您的檔案系統新增標籤。例如，您可以在 **Name** (名稱) 鍵旁的 **Value** (值) 欄中輸入名稱，藉此為檔案系統指定不會重複的一名稱。

   1. (選用) 啟用生命週期管理，以避免在不常存取的儲存體上浪費成本。如需詳細資訊，請參閱《Amazon Elastic File System 使用者指南》**中的 [EFS 生命週期管理](https://docs.aws.amazon.com/efs/latest/ug/lifecycle-management-efs.html)。

   1. (選用) 啟用加密。選取此核取方塊以啟用靜態 Amazon EFS 檔案系統的加密。

1. 在**網路存取**頁面的**掛載目標**下，將每個可用區域的現有安全群組組態替換為您為 [步驟 2：為 Amazon EC2 執行個體和 Amazon EFS 檔案系統建立安全群組](#efs-security-group) 中的檔案系統建立的安全群組，然後選擇**下一步**。

1.  您不需要為本教學課程設定**檔案系統政策**，因此您可以選擇**下一步**略過此區段。

1. 檢閱您的檔案系統選項，然後選擇**建立**以完成程序。

1. 從**檔案系統**畫面中，記錄**檔案系統 ID**。在下一個步驟中，您將會在 Amazon ECS 任務定義中參考這個值。

## 步驟 4：將內容新增至 Amazon EFS 檔案系統
<a name="efs-add-content"></a>

在此步驟中，您會將 Amazon EFS 檔案系統掛載到 Amazon EC2 執行個體，並將內容新增到其中。這是為了在本教學課程中進行測試，以說明資料的持久性。使用此功能時，通常會將應用程式或其他方法的資料寫入 Amazon EFS 檔案系統。

**建立 Amazon EC2 執行個體並掛載 Amazon EFS 檔案系統**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 選擇**啟動執行個體**。

1. 在**應用程式和作業系統映像 (Amazon Machine Image)** 下，選取 **Amazon Linux 2 AMI (HVM)**。

1. 在**執行個體類型**中，保留預設執行個體類型 `t2.micro`。

1.  在**金鑰對 (登入)** 下，選取用於 SSH 存取執行個體的金鑰對。

1. 在**網路設定**下，選取為 Amazon EFS 檔案系統和 Amazon ECS 叢集指定的 VPC。選取子網路和在 [步驟 2：為 Amazon EC2 執行個體和 Amazon EFS 檔案系統建立安全群組](#efs-security-group) 中建立的執行個體安全群組。設定執行個體的安全群組。確認已啟用**自動指派公有 IP**。

1. 在**設定儲存**下，選擇檔案系統的**編輯**按鈕，然後選擇 **EFS**。選取您在 [步驟 3：建立 Amazon EFS 檔案系統](#efs-create-filesystem) 中建立的檔案系統。您可以選擇性地變更掛載點，或保留預設值。
**重要**  
您必須先選擇子網路，然後才能將檔案系統新增至執行個體。

1. 清除**自動建立並連接安全群組**。保持選取另一個核取方塊。選擇 **Add shared file system (新增共用檔案系統)**。

1. 在 **Advanced Details** (進階詳細資訊) 下，確保透過 Amazon EFS 檔案系統掛載步驟自動填入使用者資料指令碼。

1.  在**摘要**下，確定**執行個體數量**為 **1**。選擇**啟動執行個體**。

1. 在**啟動執行個體**頁面上，選擇**檢視所有執行個體**以查看執行個體的狀態。初始時，您的**執行個體狀態**為 `PENDING`。當狀態變更為 `RUNNING` 且執行個體通過所有狀態檢查之後，執行個體即可供使用。

現在，您可以連線到 Amazon EC2 執行個體，並將內容新增至 Amazon EFS 檔案系統。

**連線到 Amazon EC2 執行個體，並將內容新增至 Amazon EFS 檔案系統。**

1. 您建立之 Amazon EC2 執行個體的 SSH。如需詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Connect to your Linux instance using SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)。

1. 從終端機視窗，執行 **df -T** 命令，確認 Amazon EFS 檔案系統已掛載。在下列輸出中，我們已反白顯示 Amazon EFS 檔案系統掛載。

   ```
   $ df -T
   Filesystem     Type            1K-blocks    Used        Available Use% Mounted on
   devtmpfs       devtmpfs           485468       0           485468   0% /dev
   tmpfs          tmpfs              503480       0           503480   0% /dev/shm
   tmpfs          tmpfs              503480     424           503056   1% /run
   tmpfs          tmpfs              503480       0           503480   0% /sys/fs/cgroup
   /dev/xvda1     xfs               8376300 1310952          7065348  16% /
   127.0.0.1:/    nfs4     9007199254739968       0 9007199254739968   0% /mnt/efs/fs1
   tmpfs          tmpfs              100700       0           100700   0% /run/user/1000
   ```

1. 導覽至掛載 Amazon EFS 檔案系統所在的目錄。在上述範例中，即為 `/mnt/efs/fs1`。

1. 建立名為 `index.html` 且具有下列內容的檔案：

   ```
   <html>
       <body>
           <h1>It Works!</h1>
           <p>You are using an Amazon EFS file system for persistent container storage.</p>
       </body>
   </html>
   ```

## 步驟 5：建立任務定義
<a name="efs-task-def"></a>

以下任務定義會建立名稱為 `efs-html` 的資料磁碟區。`nginx` 容器會將主機資料磁碟區掛載於 NGINX 根目錄 `/usr/share/nginx/html`。

**使用 Amazon ECS 主控台建立新的任務定義**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇 **Task Definitions** (任務定義)。

1. 選擇 **Create new task definitio** (建立新任務定義)、**Create new task definition with JSON** (使用 JSON 建立新的任務定義)。

1. 在 JSON 編輯器方塊中，複製並貼上以下 JSON 文字，以 Amazon EFS 檔案系統的 ID 取代 `fileSystemId`。

   ```
   {
       "containerDefinitions": [
           {
               "memory": 128,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "containerPort": 80,
                       "protocol": "tcp"
                   }
               ],
               "essential": true,
               "mountPoints": [
                   {
                       "containerPath": "/usr/share/nginx/html",
                       "sourceVolume": "efs-html"
                   }
               ],
               "name": "nginx",
               "image": "public.ecr.aws/docker/library/nginx:latest"
           }
       ],
       "volumes": [
           {
               "name": "efs-html",
               "efsVolumeConfiguration": {
                   "fileSystemId": "fs-1324abcd",
                   "transitEncryption": "ENABLED"
               }
           }
       ],
       "family": "efs-tutorial",
       "executionRoleArn":"arn:aws:iam::111122223333:role/ecsTaskExecutionRole"
   }
   ```
**注意**  
Amazon ECS 任務執行 IAM 角色不需要任何特定的 Amazon EFS 相關許可，即可掛載 Amazon EFS 檔案系統。依預設，如果不存在基於 Amazon EFS 資源的政策，則會在建立檔案系統時授予所有主體 (\$1) 存取權。  
僅當在 Amazon ECS 任務定義中啟用「EFS IAM 授權」時，才需要 Amazon ECS 任務角色。啟用該功能後，必須在基於 Amazon EFS 資源的政策中允許該任務角色的身分存取 Amazon EFS 檔案系統，並應停用匿名存取。

1. 選擇**建立**。

## 步驟 6：執行任務並檢視結果
<a name="efs-run-task"></a>

現在，已建立您的 Amazon EFS 檔案系統，並且提供 NGINX 容器的 Web 內容，您可以使用建立的任務定義來執行任務。NGINX Web 伺服器會隨即提供您簡單的 HTML 頁面。如果您在 Amazon EFS 檔案系統中更新了內容，這些變更也會傳播至所有也掛載該檔案系統的容器。

任務會在您為叢集定義的子網路中執行。

**使用主控台執行任務並檢視結果**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在 **Clusters** (叢集) 頁面上，選取要在哪個叢集中執行獨立任務。

   決定您要從中啟動服務的資源。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/tutorial-efs-volumes.html)

1. (選用) 選擇已排程的任務在叢集基礎設施中的分佈方式。展開 **Compute configuration** (運算組態)，然後執行下列操作：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/tutorial-efs-volumes.html)

1. 針對 **Application type** (應用程式類型)，選擇 **Task** (任務)。

1. 在**任務定義**中，選擇您先前建立的 `efs-tutorial` 任務定義。

1. 在**所需任務**中，輸入 `1`。

1. 選擇**建立**。

1. 在**叢集**頁面上，選擇**基礎設施**。

1. 在**容器執行個體**下，選擇要連線的容器執行個體。

1. 在**容器執行個體**頁面的**聯網**下，記錄執行個體的公有 IP 或**公有 DNS**。

1. 開啟瀏覽器並輸入公有 IP 地址。您應該看到下列訊息：

   ```
   It works!
   You are using an Amazon EFS file system for persistent container storage.
   ```
**注意**  
如果您未看到該訊息，請確認您容器執行個體的安全群組，允許連接埠 80 上的入站網路流量，且檔案系統的安全群組允許來自容器執行個體的入站存取。