在部署 Amazon ECS 時指定 Amazon EBS 磁碟區組態 - Amazon Elastic Container Service

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

在部署 Amazon ECS 時指定 Amazon EBS 磁碟區組態

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

若要設定磁碟區,您可以使用 Amazon ECS APIs,也可以傳遞 JSON 檔案做為下列 AWS CLI 命令的輸入:

  • run-task:用於執行獨立的 ECS 任務。

  • start-task:用在特定容器執行個體中執行獨立的 ECS 任務。此命令不適用於 Fargate 任務。

  • create-service:用於建立新的 ECS 服務。

  • update-service:用於更新現有服務。

注意

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

您也可以使用 AWS 管理主控台來設定 Amazon EBS 磁碟區。如需詳細資訊,請參閱將應用程式作為 Amazon ECS 任務執行建立 Amazon ECS 滾動更新部署更新 Amazon ECS 服務

下列 JSON 程式碼片段展示了可在部署時設定的 Amazon EBS 磁碟區的所有參數。若要將這些參數用於磁碟區組態,請以自己的資訊取代 user input placeholders。如需有關這些參數的詳細資訊,請參閱磁碟區組態

"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 磁碟區連接問題進行疑難排解 。如需 EBS 磁碟區連接所需的 Amazon ECS 基礎設施 AWS Identity and Access Management (IAM) 角色資訊,請參閱 Amazon ECS 基礎設施 IAM 角色

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

為獨立任務設定磁碟區

下列程式碼片段展示了用於設定 Amazon EBS 磁碟區以連接至獨立任務的語法。下列 JSON 程式碼片段展示了用於設定 volumeTypesizeInGiBencryptedkmsKeyId 的語法。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" } } ] }

在建立服務時設定磁碟區

下列程式碼片段展示了用於設定 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 } } ] }

在更新服務時設定磁碟區

下列 JSON 程式碼片段展示了用於更新先前未設定 Amazon EBS 磁碟區以連接至任務之服務的語法。您必須提供任務定義修訂版的 ARN,並將 configuredAtLaunch 設定為 true。下列 JSON 程式碼片段展示了用於設定 volumeTypesizeInGiBthroughputiops 以及 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 磁碟區

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

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

Amazon EBS 磁碟區的終止政策

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

注意

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

標記 Amazon EBS 磁碟區

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

重要

Amazon ECS 會自動將 AmazonECSCreatedAmazonECSManaged 預留標籤連接到 Amazon EBS 磁碟區。這表示您最多可以控制為一個磁碟區連接 48 個額外標籤。這些額外標籤可為使用者自訂標籤、ECS 受管標籤或傳播標籤。

若想為磁碟區新增 Amazon ECS 受管標籤,必須在呼叫 UpdateServiceCreateServiceRunTaskStartTask 時,將 enableECSManagedTags 設定為 true。開啟 Amazon ECS 受管標籤功能後,Amazon ECS 會自動為磁碟區新增包含叢集與服務資訊的標籤 (即 aws:ecs:clusterNameaws:ecs:serviceName)。如需有關標記 Amazon ECS 資源的詳細資訊,請參閱標記 Amazon ECS 資源

下列 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 磁碟區。