使用第三方控制器部署 Amazon ECS 服務 - Amazon Elastic Container Service

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

使用第三方控制器部署 Amazon ECS 服務

外部部署類型可讓您使用任何第三方部署控制器來完全控制 Amazon ECS 服務的部署程序。服務的詳細資訊是由服務管理 API 動作 (CreateServiceUpdateServiceDeleteService) 或任務集管理 API 動作 (CreateTaskSetUpdateTaskSetUpdateServicePrimaryTaskSet和 ) 管理DeleteTaskSet。每個 API 動作都會管理服務定義參數的子集。

API UpdateService 動作會更新服務所需的計數和運作狀態檢查寬限期參數。如果需要更新啟動類型、平台版本、負載平衡器詳細資訊、網路組態或任務定義,您必須建立新的任務集。

API UpdateTaskSet 動作只會更新任務集的擴展參數。

API UpdateServicePrimaryTaskSet 動作會修改服務中哪個任務集是主要任務集。當您呼叫 API DescribeServices 動作時,它會傳回為主要任務集指定的所有欄位。如果更新服務的主要任務集,當定義新的主要任務時,存在於新主要任務集的任何任務集參數值 (不同於服務中的舊主要任務集) 將會更新為新的值。如果沒有為服務定義主要任務集,則描述服務時,任務集欄位是 null。

外部部署考量

使用外部部署類型時,請考慮下列各項:

  • 支援的負載平衡器類型可為 Application Load Balancer 或 Network Load Balancer。

  • Fargate 啟動類型或 EXTERNAL 部署控制器類型不支援 DAEMON 排程策略。

外部部署工作流程

以下是在 Amazon ECS 上管理外部部署的基本工作流程。

使用外部部署控制器管理 Amazon ECS 服務
  1. 建立 Amazon ECS 服務。唯一的必要參數是服務名稱。使用外部部署控制器建立服務時,您可以指定以下參數。在服務內建立任務集時,指定所有其他服務參數。

    serviceName

    類型:字串

    必要:是

    您的服務名稱。可以包含最多可達 255 個字元 (大小寫)、數字、連字號和底線。叢集中不得有相同的服務名稱,但一個區域內或多個區域間的多個叢集中可以有類似的服務名稱。

    desiredCount

    指定的任務集任務定義的執行個體化數量,將放在服務內保持執行。

    deploymentConfiguration

    選用的部署參數,可控制在部署期間執行多少任務以及停止和啟動任務的順序。

    tags

    類型: 物件陣列

    必要:否

    您套用到服務以協助您分類和組織的中繼資料。每個標籤皆包含由您定義的一個金鑰與一個選用值。刪除服務時,也會一併刪除標籤。服務最多可套用 50 個標籤。如需詳細資訊,請參閱標記 Amazon ECS 資源

    key

    類型:字串

    長度限制:長度下限為 1。長度上限為 128。

    必要:否

    組成標籤的鍵值組的一部分。索引鍵是一般標籤,作用就像更特定標籤值的類別。

    value

    類型:字串

    長度限制:長度下限為 0。長度上限為 256。

    必要:否

    組成標籤的鍵值組的選用部分。值就像標籤類別 (索引鍵) 內的描述項。

    enableECSManagedTags

    指定是否針對服務中的任務使用 Amazon ECS 受管標籤。如需詳細資訊,請參閱使用標籤計費

    propagateTags

    類型:字串

    有效值:TASK_DEFINITION | SERVICE

    必要:否

    指定是否將標籤從任務定義或服務複製到服務中的任務。如果沒有指定值,則不會複製標籤。標籤只能在建立服務期間複製到服務內的任務。若要在建立服務或建立任務後將標籤新增至任務,請使用 API TagResource 動作。

    schedulingStrategy

    使用的排程策略。使用外部部署控制器的服務僅支援 REPLICA 排程策略。

    placementConstraints

    您服務的任務要使用的置放限制物件陣列。每項任務您最多可以指定 10 項限制 (此限制包含任務定義中的限制以及執行時間指定的限制)。若您使用的是 Fargate 啟動類型,則不支援任務置放限制條件。

    placementStrategy

    您服務的任務要使用的置放策略物件。每項服務您最多可以指定四項策略規則。

    以下是使用外部部署控制器建立服務的服務定義範例。

    { "cluster": "", "serviceName": "", "desiredCount": 0, "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }
  2. 建立初始任務集。任務集包含以下關於服務的詳細資訊:

    taskDefinition

    供任務集的任務使用的任務定義。

    launchType

    類型:字串

    有效值:EC2 | FARGATE | EXTERNAL

    必要:否

    您服務執行所在的啟動類型。如果未指定啟動類型,預設會使用預設的 capacityProviderStrategy。如需詳細資訊,請參閱Amazon ECS 啟動類型

    若有指定 launchType,則必須省略 capacityProviderStrategy 參數。

    platformVersion

    類型:字串

    必要:否

    您服務中任務正在其上執行的平台版本。平台版本僅會為使用 Fargate 啟動類型的任務指定。如果尚未指定,預設會使用最新版本 (LATEST)。

    AWS Fargate 平台版本用於參考 Fargate 任務基礎設施的特定執行期環境。在您執行任務或建立服務時指定 LATEST 平台版本,即可取得任務所能使用的最新平台版本。當您擴展服務規模時,這些任務會收到於服務的目前部署上所指定的平台版本。如需詳細資訊,請參閱適用於 Amazon ECS 的 Fargate 平台版本

    注意

    使用 EC2 啟動類型的任務不會指定平台版本。

    loadBalancers

    用來代表您的服務所使用之負載平衡器的負載平衡器物件。當使用外部部署控制器時,僅支援 Application Load Balancer 和 Network Load Balancer。如果您使用 Application Load Balancer,每個任務集僅允許一個 Application Load Balancer 目標群組。

    以下程式碼片段顯示要使用的 loadBalancer 物件範例。

    "loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ]
    注意

    指定 loadBalancer 物件時,您必須指定 targetGroupArn 並省略 loadBalancerName 參數。

    networkConfiguration

    服務的網路組態。使用 awsvpc 網路模式的任務定義需要此參數,才能接收其自己的彈性網路介面,其他網路模式不支援此參數。如需 Fargate 啟動類型聯網的詳細資訊,請參閱 Fargate 啟動類型的 Amazon ECS 任務聯網選項

    serviceRegistries

    要指派給此服務的服務探索登錄檔詳細資訊。如需詳細資訊,請參閱使用 服務探索將 Amazon ECS 服務與 DNS 名稱連線

    scale

    需要放在任務集來保持執行的任務數的浮點百分比。值是以服務的 desiredCount 的百分比總計指定。接受的值為 0 到 100 之間的數字。

    以下是為外部部署控制器建立任務集的 JSON 範例。

    { "service": "", "cluster": "", "externalId": "", "taskDefinition": "", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "DISABLED" } }, "loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "launchType": "EC2", "capacityProviderStrategy": [ { "capacityProvider": "", "weight": 0, "base": 0 } ], "platformVersion": "", "scale": { "value": null, "unit": "PERCENT" }, "clientToken": "" }
  3. 需要變更服務時,請根據您要更新的參數,使用 UpdateTaskSetUpdateServiceCreateTaskSet API 動作。如果您建立任務集,請對服務中的每個任務集使用 scale 參數,以決定在服務中要保持執行多少個任務。例如,如果您有一個服務包含 tasksetA 並建立 tasksetB,您可能想要先測試 tasksetB 的有效性,然後才將生產流量轉移給它。您可以將這兩個任務集的 scale 都設為 100,而當您準備好將所有生產流量轉移至 tasksetB 時,您可以將 tasksetAscale 更新為 0 以縮減它。