

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

# 在部署 Amazon ECS 時指定 Amazon EBS 磁碟區組態
<a name="configure-ebs-volume"></a>

在註冊任務定義 (`configuredAtLaunch` 參數設定為 `true`) 之後，即可在部署時 (執行獨立任務或建立/更新服務時) 設定 Amazon EBS 磁碟區。如需有關使用 `configuredAtLaunch` 參數將磁碟區組態延至啟動時進行的詳細資訊，請參閱[在 Amazon ECS 任務定義中將磁碟區組態延至啟動時進行](specify-ebs-config.md)。

若要設定磁碟區，您可以使用 Amazon ECS APIs，也可以傳遞 JSON 檔案做為下列 AWS CLI 命令的輸入：
+ `[run-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html)`：用於執行獨立的 ECS 任務。
+ `[start-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/start-task.html)`：用在特定容器執行個體中執行獨立的 ECS 任務。此命令不適用於 Fargate 任務。
+ `[create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html)`：用於建立新的 ECS 服務。
+ `[update-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html)`：用於更新現有服務。

**注意**  
若要讓任務中的容器寫入掛載的 Amazon EBS 磁碟區，容器必須具有適當的檔案系統許可。當您在容器定義中指定非根使用者時，Amazon ECS 會自動使用群組型許可來設定磁碟區，以允許指定的使用者讀取和寫入磁碟區。如果未指定使用者，容器會以根身分執行，並具有磁碟區的完整存取權。

 您也可以使用 AWS 管理主控台來設定 Amazon EBS 磁碟區。如需詳細資訊，請參閱[將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)、[建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)及[更新 Amazon ECS 服務](update-service-console-v2.md)。

下列 JSON 程式碼片段展示了可在部署時設定的 Amazon EBS 磁碟區的所有參數。若要將這些參數用於磁碟區組態，請以自己的資訊取代 `user input placeholders`。如需有關這些參數的詳細資訊，請參閱[磁碟區組態](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html#sd-volumeConfigurations)。

```
"volumeConfigurations": [
        {
            "name": "ebs-volume", 
            "managedEBSVolume": {
                "encrypted": true, 
                "kmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", 
                "volumeType": "gp3", 
                "sizeInGiB": 10, 
                "snapshotId": "snap-12345", 
                "volumeInitializationRate":100,
                "iops": 3000, 
                "throughput": 125, 
                "tagSpecifications": [
                    {
                        "resourceType": "volume", 
                        "tags": [
                            {
                                "key": "key1", 
                                "value": "value1"
                            }
                        ], 
                        "propagateTags": "NONE"
                    }
                ], 
                "roleArn": "arn:aws:iam::1111222333:role/ecsInfrastructureRole", 
                 "terminationPolicy": {
                    "deleteOnTermination": true//can't be configured for service-managed tasks, always true 
                },
                "filesystemType": "ext4"
            }
        }
    ]
```

**重要**  
請確保您在組態中指定的 `volumeName` 與在任務定義中指定的 `volumeName` 相同。

如需有關檢查磁碟區連接狀態的詳細資訊，請參閱[對 Amazon ECS 任務的 Amazon EBS 磁碟區連接問題進行疑難排解](troubleshoot-ebs-volumes.md)。如需 EBS 磁碟區連接所需的 Amazon ECS 基礎設施 AWS Identity and Access Management (IAM) 角色資訊，請參閱 [Amazon ECS 基礎結構 IAM 角色](infrastructure_IAM_role.md)。

以下 JSON 程式碼片段範例展示了 Amazon EBS 磁碟區組態。這些範例可以透過將程式碼片段儲存在 JSON 檔案中，並將檔案做為 AWS CLI 命令的參數 （使用 `--cli-input-json file://filename` 參數） 傳遞來使用。以您自己的資訊取代 `user input placeholders`。

## 為獨立任務設定磁碟區
<a name="ebs-run-task"></a>

下列程式碼片段展示了用於設定 Amazon EBS 磁碟區以連接至獨立任務的語法。下列 JSON 程式碼片段展示了用於設定 `volumeType`、`sizeInGiB`、`encrypted` 與 `kmsKeyId` 的語法。JSON 檔案中指定的組態將用於建立 EBS 磁碟區並將其連接至獨立任務。

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "volumeConfigurations": [
        {
            "name": "datadir",
            "managedEBSVolume": {
                "volumeType": "gp3",
                "sizeInGiB": 100,
                "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
                "encrypted": true,
                "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            }
        }
   ]
}
```

## 在建立服務時設定磁碟區
<a name="ebs-create-service"></a>

下列程式碼片段展示了用於設定 Amazon EBS 磁碟區以連接至由服務管理之任務的語法。這些磁碟區來源於透過 `snapshotId` 參數指定的快照，傳輸速率為 200 MiB/s。JSON 檔案中指定的組態將用於建立 EBS 磁碟區並將其連接至由服務管理的每項任務。

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "serviceName": "mysvc",
   "desiredCount": 2,
   "volumeConfigurations": [
        {
            "name": "myEbsVolume",
            "managedEBSVolume": {
              "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
              "snapshotId": "snap-12345",
              "volumeInitializationRate": 200
            }
        }
   ]
}
```

## 在更新服務時設定磁碟區
<a name="ebs-update-service"></a>

下列 JSON 程式碼片段展示了用於更新先前未設定 Amazon EBS 磁碟區以連接至任務之服務的語法。您必須提供任務定義修訂版的 ARN，並將 `configuredAtLaunch` 設定為 `true`。下列 JSON 程式碼片段展示了用於設定 `volumeType`、`sizeInGiB`、`throughput` 與 `iops` 以及 `filesystemType` 的語法。此組態用於建立 EBS 磁碟區，並將其連接至由服務管理的每項任務。

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "service": "mysvc",
   "desiredCount": 2,
   "volumeConfigurations": [
        {
            "name": "myEbsVolume",
            "managedEBSVolume": {
              "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
               "volumeType": "gp3",
                "sizeInGiB": 100,
                 "iops": 3000, 
                "throughput": 125, 
                "filesystemType": "ext4"
            }
        }
   ]
}
```

### 將服務設定為不再使用 Amazon EBS 磁碟區
<a name="ebs-service-disable-ebs"></a>

下列 JSON 程式碼片段展示了用於更新服務以不再使用 Amazon EBS 磁碟區的語法。您必須提供一個將 `configuredAtLaunch` 設定為 `false` 的任務定義 ARN，或提供一個不包含 `configuredAtLaunch` 參數的任務定義。您還必須提供空 `volumeConfigurations` 物件。

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "service": "mysvc",
   "desiredCount": 2,
   "volumeConfigurations": []
}
```

## Amazon EBS 磁碟區的終止政策
<a name="ebs-volume-termination-policy"></a>

當 Amazon ECS 任務終止時，Amazon ECS 會依據 `deleteOnTermination` 值，判斷是否應刪除與已終止任務相關聯的 Amazon EBS 磁碟區。依預設，在任務終止後，會刪除連接至任務的 EBS 磁碟區。對於獨立任務，您可以變更此設定，在任務終止時保留磁碟區。

**注意**  
連接至由服務管理之任務的磁碟區不會保留下來，一律會在任務終止時被刪除。

## 標記 Amazon EBS 磁碟區
<a name="ebs-volume-tagging"></a>

您可以使用 `tagSpecifications` 物件來標記 Amazon EBS 磁碟區。透過該物件，您可以提供自訂標籤，也可以根據磁碟區是連接至獨立任務還是服務中的任務，設定標籤是從任務定義還是從服務進行傳播。一個磁碟區最多可連接 50 個標籤。

**重要**  
Amazon ECS 會自動將 `AmazonECSCreated` 和 `AmazonECSManaged` 保留標籤附加至 Amazon EBS 磁碟區。這表示您最多可以控制為一個磁碟區連接 48 個額外標籤。這些額外標籤可為使用者自訂標籤、ECS 受管標籤或傳播標籤。

若想為磁碟區新增 Amazon ECS 受管標籤，必須在呼叫 `UpdateService`、`CreateService`、`RunTask` 或 `StartTask` 時，將 `enableECSManagedTags` 設定為 `true`。開啟 Amazon ECS 受管標籤功能後，Amazon ECS 會自動為磁碟區新增包含叢集與服務資訊的標籤 (即 `aws:ecs:clusterName` 與 `aws:ecs:serviceName`)。如需有關標記 Amazon ECS 資源的詳細資訊，請參閱[標記 Amazon ECS 資源](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)。

下列 JSON 程式碼片段展示了用於為連接至服務中每項任務的每個 Amazon EBS 磁碟區新增使用者自訂標籤的語法。若要使用此範例建立服務，請以自己的資訊取代 `user input placeholders`。

```
{
   "cluster": "mycluster",
   "taskDefinition": "mytaskdef",
   "serviceName": "mysvc",
   "desiredCount": 2,
   "enableECSManagedTags": true,
   "volumeConfigurations": [
        {
            "name": "datadir",
            "managedEBSVolume": {
                "volumeType": "gp3",
                "sizeInGiB": 100,
                 "tagSpecifications": [
                    {
                        "resourceType": "volume", 
                        "tags": [
                            {
                                "key": "key1", 
                                "value": "value1"
                            }
                        ], 
                        "propagateTags": "NONE"
                    }
                ],
                "roleArn":"arn:aws:iam:1111222333:role/ecsInfrastructureRole",
                "encrypted": true,
                "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            }
        }
   ]
}
```

**重要**  
您必須指定 `volume` 資源類型來標記 Amazon EBS 磁碟區。