本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用第三方控制器部署 Amazon ECS 服務
外部部署類型可讓您使用任何第三方部署控制器來完全控制 Amazon ECS 服務的部署程序。服務的詳細資訊是由服務管理 API 動作 (CreateService
、 UpdateService
和 DeleteService
) 或任務集管理 API 動作 (CreateTaskSet
、UpdateTaskSet
、 UpdateServicePrimaryTaskSet
和 ) 管理DeleteTaskSet
。每個 API 動作都會管理服務定義參數的子集。
API UpdateService
動作會更新服務所需的計數和運作狀態檢查寬限期參數。如果需要更新啟動類型、平台版本、負載平衡器詳細資訊、網路組態或任務定義,您必須建立新的任務集。
API UpdateTaskSet
動作只會更新任務集的擴展參數。
API UpdateServicePrimaryTaskSet
動作會修改服務中哪個任務集是主要任務集。當您呼叫 API DescribeServices
動作時,它會傳回為主要任務集指定的所有欄位。如果更新服務的主要任務集,當定義新的主要任務時,存在於新主要任務集的任何任務集參數值 (不同於服務中的舊主要任務集) 將會更新為新的值。如果沒有為服務定義主要任務集,則描述服務時,任務集欄位是 null。
外部部署考量
使用外部部署類型時,請考慮下列各項:
-
支援的負載平衡器類型可為 Application Load Balancer 或 Network Load Balancer。
-
Fargate 啟動類型或
EXTERNAL
部署控制器類型不支援DAEMON
排程策略。
外部部署工作流程
以下是在 Amazon ECS 上管理外部部署的基本工作流程。
使用外部部署控制器管理 Amazon ECS 服務
-
建立 Amazon ECS 服務。唯一的必要參數是服務名稱。使用外部部署控制器建立服務時,您可以指定以下參數。在服務內建立任務集時,指定所有其他服務參數。
serviceName
-
類型:字串
必要:是
您的服務名稱。可以包含最多可達 255 個字元 (大小寫)、數字、連字號和底線。叢集中不得有相同的服務名稱,但一個區域內或多個區域間的多個叢集中可以有類似的服務名稱。
desiredCount
-
指定的任務集任務定義的執行個體化數量,將放在服務內保持執行。
deploymentConfiguration
-
選用的部署參數,可控制在部署期間執行多少任務以及停止和啟動任務的順序。
-
類型: 物件陣列
必要:否
您套用到服務以協助您分類和組織的中繼資料。每個標籤皆包含由您定義的一個金鑰與一個選用值。刪除服務時,也會一併刪除標籤。服務最多可套用 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" }
-
建立初始任務集。任務集包含以下關於服務的詳細資訊:
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": "" }
-
需要變更服務時,請根據您要更新的參數,使用
UpdateTaskSet
、UpdateService
或CreateTaskSet
API 動作。如果您建立任務集,請對服務中的每個任務集使用scale
參數,以決定在服務中要保持執行多少個任務。例如,如果您有一個服務包含tasksetA
並建立tasksetB
,您可能想要先測試tasksetB
的有效性,然後才將生產流量轉移給它。您可以將這兩個任務集的scale
都設為100
,而當您準備好將所有生產流量轉移至tasksetB
時,您可以將tasksetA
的scale
更新為0
以縮減它。