本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 Amazon ECS 藍/綠部署
透過使用 Amazon ECS 藍/綠部署,您可以在生產環境中實作服務變更之前進行和測試。
先決條件
開始藍/綠部署之前,請執行下列操作。
-
設定適當的許可。
-
如需 Elastic Load Balancing 許可的詳細資訊,請參閱 適用於負載平衡器的 Amazon ECS 基礎設施 IAM 角色。
-
如需 Lambda 許可的詳細資訊,請參閱 Amazon ECS 藍/綠部署中 Lambda 函數所需的許可
-
-
Amazon ECS 藍/綠部署需要您的服務使用下列其中一項功能:設定適當的資源。
-
Application Load Balancer - 如需詳細資訊,請參閱藍/綠部署的 Application Load Balancer 資源。
-
Network Load Balancer - 如需詳細資訊,請參閱 Amazon ECS 藍/綠部署的 Network Load Balancer 資源。
-
Service Connect - 如需詳細資訊,請參閱 Amazon ECS 藍/綠部署的 Service Connect 資源。
-
-
建立規則,將流量路由到您的綠色服務修訂版。如需詳細資訊,請參閱 Network Load Balancer 使用者指南中的接聽程式規則。
-
為您的綠色服務修訂建立目標群組。當您為任務使用
awsvpc
網路模式時,目標類型必須是ip
。如需目標群組的相關資訊,請參閱 Network Load Balancer 使用者指南中的目標群組。 -
決定是否要為生命週期事件執行 Lambda 函數。
-
預先向上擴展
-
向上擴展之後
-
測試流量轉移
-
測試流量轉移後
-
生產流量轉移
-
生產流量轉移後
為每個生命週期事件建立 Lambda 函數。如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的使用主控台建立 Lambda 函數。
-
程序
您可以使用 主控台或 AWS CLI 來建立 Amazon ECS 藍/綠服務。
- Console
-
開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2
。 -
決定您要從中啟動服務的資源。
啟動服務的資源 步驟 叢集
-
在叢集頁面,選取您要在哪個叢集中建立服務。
叢集詳細資訊頁面隨即顯示。
-
在 Services (服務) 標籤上,選擇 Create (建立)。
任務定義 -
在任務定義頁面上,選取任務定義。
-
從部署功能表中,選擇建立服務。
隨即顯示建立服務頁面。
-
-
在服務詳細資訊下,執行下列動作:
-
針對任務定義系列,選擇要使用的任務定義。然後,針對任務定義修訂,輸入要使用的修訂。
-
針對 Service name (服務名稱),輸入服務的名稱。
-
-
若要在現有叢集中執行服務,請在現有叢集中選擇叢集。若要在新叢集中執行服務,請選擇建立叢集
-
選擇任務在叢集基礎設施中的分佈方式。在運算組態下,選擇您的選項。
運算選項 步驟 容量提供者策略
-
在 Compute options (運算選項) 下,選擇 Capacity provider strategy (容量提供者策略)。
-
選擇策略:
-
若要使用叢集的預設容量提供者策略,選擇使用叢集預設。
-
若您的叢集沒有預設容量提供者策略,或要使用自訂策略,選擇 Use custom (使用自訂)、Add capacity provider strategy (新增容量提供者策略),然後透過指定 Base (基礎)、Capacity provider (容量提供者) 和 Weight (權重) 來定義您的自訂容量提供者策略。
-
注意
若要在策略中使用容量提供者,容量提供者必須與叢集相關聯。
啟動類型 -
在運算選項區段中,選取啟動類型。
-
針對 啟動類型,選擇啟動類型。
-
(選用) 當指定 Fargate 啟動類型時,針對平台版本,指定要使用的平台版本。如果未指定平台版本,將使用
LATEST
平台版本。
-
-
在部署組態下,執行下列動作:
-
針對服務類型,選擇複本。
-
針對 Desired tasks (所需任務),輸入要在服務中啟動並維護的任務數。
-
若要讓 Amazon ECS 監控跨可用區域的任務分佈,並在發生不平衡時重新分佈,請在可用區域服務重新平衡下,選取可用區域服務重新平衡。
-
針對運作狀態檢查寬限期,輸入服務排程器在任務首次啟動後忽略運作狀態不佳的 Elastic Load Balancing、VPC Lattice 和容器運作狀態檢查的時間量 (以秒為單位)。如果您未指定運作狀態檢查寬限期值,則會使用預設值 0。
-
-
-
針對製作時間,輸入在終止藍色修訂之前,藍色和綠色服務修訂會同時執行的分鐘數。這可讓 有時間進行驗證和測試。
-
(選用) 執行 Lambda 函數以在部署的特定階段執行。在部署生命週期掛鉤下,選取要執行生命週期掛鉤的階段。
若要新增生命週期掛鉤:
-
選擇新增。
-
對於 Lambda 函數,輸入函數名稱或 ARN。
-
針對角色,選取具有叫用 Lambda 函數許可的 IAM 角色。
-
針對生命週期階段,選取 Lambda 函數應執行的階段。
-
-
-
若要設定 Amazon ECS 如何偵測並處理部署失敗,請展開 Deployment failure detection (部署失敗偵測),然後選擇您的選項。
-
若要在任務無法啟動時停止部署,請選取 Use the Amazon ECS deployment circuit breaker (使用 Amazon ECS 部署斷路器)。
若要讓軟體在部署斷路器將部署設定為失敗狀態時,自動轉返部署至最後完成的部署狀態,請選取在失敗時轉返。
-
若要根據應用程式指標停止部署,請選取使用 CloudWatch 警示 (s)。然後,從 CloudWatch 警示名稱中選擇警示。若要建立新的警示,請前往 CloudWatch 主控台。
若要讓軟體在 CloudWatch 警示將部署設定為失敗狀態時,自動轉返部署至最後完成的部署狀態,請選取在失敗時轉返。
-
-
(選用) 若要使用 Service Connect 互連您的服務,請展開 Service Connect,然後指定下列項目:
-
選取開啟 Service Connect。
-
在 Service Connect configuration (Service Connect 組態) 下,指定用戶端模式。
-
如果您的服務執行的網路用戶端應用程式只需要連線到 命名空間中的其他服務,請選擇用戶端。
-
如果服務執行的是網路或 Web 服務應用程式,且需要為此服務提供端點,並連線至命名空間中的其他服務,請選擇 Client and server (用戶端和伺服器)。
-
-
若要使用非預設叢集命名空間的命名空間,請在 Namespace (命名空間) 欄位中選擇服務命名空間。
-
(選用) 設定藍/綠部署的測試流量標頭規則。在測試流量路由下,指定下列項目:
-
選取啟用測試流量標頭規則,以在測試期間將特定請求路由至綠色服務修訂。
-
對於標頭比對規則,設定路由測試流量的條件:
-
標頭名稱:輸入要比對的 HTTP 標頭名稱 (例如,
X-Test-Version
或User-Agent
)。 -
比對類型:選擇比對條件:
-
完全相符:標頭值完全符合指定值的路由請求
-
標頭存在:包含指定標頭的路由請求,無論值為何
-
模式比對:標頭值符合指定模式的路由請求
-
-
標頭值 (如果使用完全相符或模式相符):輸入要比對的值或模式。
您可以新增多個標頭比對規則來建立複雜的路由邏輯。符合任何已設定規則的請求將路由至綠色服務修訂版進行測試。
-
-
選擇新增標頭規則以設定其他標頭比對條件。
注意
測試流量標頭規則可讓您在完成完整部署之前,使用受控流量驗證新功能。這可讓您使用特定請求 (例如來自內部測試工具或 Beta 版使用者的請求) 測試綠色服務修訂,同時維持藍色服務修訂的正常流量流程。
-
-
(選用) 指定日誌組態。選取使用日誌集合。預設選項會將容器日誌傳送至 CloudWatch 日誌。其他日誌驅動程式選項是使用 AWS FireLens 設定。如需詳細資訊,請參閱將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner。
下方更詳細地描述了每個容器日誌目的地。
-
Amazon CloudWatch – 設定任務將容器日誌傳送至 CloudWatch Logs。提供預設日誌驅動程式選項,可代表您建立 CloudWatch 日誌群組。若要指定不同的日誌群組名稱,請變更驅動程式選項值。
-
Amazon Data Firehose – 設定任務將容器日誌傳送至 Firehose。提供預設日誌驅動程式選項,可將日誌傳送至 Firehose 交付串流。若要指定不同的交付串流名稱,請變更驅動程式選項值。
-
Amazon Kinesis Data Streams – 設定任務將容器日誌傳送至 Kinesis Data Streams。提供預設日誌驅動程式選項,可將日誌傳送至 Kinesis Data Streams 串流。若要指定不同的串流名稱,請變更驅動程式選項值。
-
Amazon OpenSearch Service – 設定任務將容器日誌傳送至 OpenSearch Service 網域。務必提供日誌驅動程式選項。
-
Amazon S3 – 設定任務將容器日誌傳送至 Amazon S3 儲存貯體。系統會提供預設日誌驅動程式選項,但您必須指定有效的 Amazon S3 儲存貯體名稱。
-
-
-
(選用) 設定藍/綠部署的負載平衡。
Elastic Load Balancing 類型 步驟 Application Load Balancer
-
針對負載平衡器類型,選擇 Application Load Balancer。
-
選擇 Create a new load balancer (建立新的負載平衡器) 以建立新的 Application Load Balancer,或者 Use an existing load balancer (使用現有負載平衡器) 以選擇現有的 Application Load Balancer。
-
針對容器,選擇託管服務的容器。
-
針對 Load balancer name (負載平衡器名稱),輸入不重複的名稱。
-
針對 Listener (接聽程式),為 Application Load Balancer 輸入連接埠和協定,以偵聽連接請求。根據預設,負載平衡器將被設定為使用連接埠 80 和 HTTP。
-
針對生產規則,輸入規則的評估順序和路徑模式。
此規則適用於您的生產 (藍色) 服務修訂流量。
-
針對測試規則,輸入規則的評估順序和路徑模式。
此規則適用於您的測試 (綠色) 服務修訂流量。
-
-
針對目標群組,設定下列項目:
-
針對 Target group name (目標群組名稱),為目標群組輸入名稱和協定,Application Load Balancer 會將請求路由至該群組。
-
針對通訊協定,選擇 Application Load Balancer 路由請求的目標群組的通訊協定。根據預設,目標群組會將請求路由至您的任務定義中定義的第一個容器。
-
針對取消註冊延遲,輸入負載平衡器將目標狀態變更為 的秒數
UNUSED
。預設為 300 秒。 -
針對 Health check path (運作狀態檢查路徑),輸入容器中的現有路徑,Application Load Balancer 會在該容器中定期傳送請求,以驗證 Application Load Balancer 和容器之間的連接狀態。預設使用根目錄 (
/
)。 -
針對替代群組名稱,輸入測試 (綠色) 服務修訂的目標群組的群組名稱。
-
Network Load Balancer -
針對 Load balancer type (負載平衡器類型),選取 Network Load Balancer。
-
針對 Load Balancer (負載平衡器),選擇現有的 Network Load Balancer。
-
針對 Choose container to load balance (選擇進行負載平衡的容器),選擇託管服務的容器。
-
針對生產接聽程式,選擇生產接聽程式連接埠和生產接聽程式通訊協定。
這是生產 (藍色) 服務修訂流量的接聽程式。
-
針對測試接聽程式,選擇測試接聽程式連接埠和測試接聽程式通訊協定。
這是測試 (綠色) 服務修訂流量的接聽程式。
-
針對目標群組,設定下列項目:
-
針對 Target group name (目標群組名稱),為目標群組輸入名稱和協定,Network Load Balancer 會將請求路由至該群組。
-
針對通訊協定,選擇 Network Load Balancer 路由請求的目標群組的通訊協定。根據預設,目標群組會將請求路由至您的任務定義中定義的第一個容器。
-
針對取消註冊延遲,輸入負載平衡器將目標狀態變更為 的秒數
UNUSED
。預設為 300 秒。 -
針對 Health check path (運作狀態檢查路徑),輸入容器中的現有路徑,Application Load Balancer 會在該容器中定期傳送請求,以驗證 Application Load Balancer 和容器之間的連接狀態。預設使用根目錄 (
/
)。 -
針對替代群組名稱,輸入測試 (綠色) 服務修訂的目標群組的群組名稱。
-
-
-
(選用) 為協助識別您的服務和任務,請展開 Tags (標籤) 區段,然後設定標籤。
若要讓 Amazon ECS 使用叢集名稱和任務定義標籤,自動標記所有新啟動的任務,請選取 Turn on Amazon ECS managed tags (開啟 Amazon ECS 受管標籤),然後針對 Propagate tags from (傳播標籤來源),選取 Task definitions (任務定義)。
若要讓 Amazon ECS 使用叢集名稱和服務標籤,自動標記所有新啟動的任務,請選取 Turn on Amazon ECS managed tags (開啟 Amazon ECS 受管標籤),然後針對 Propagate tags from (傳播標籤來源),選取 Service (服務)。
新增或移除標籤。
-
[新增標籤] 選擇新增標籤,然後執行下列操作︰
-
在索引鍵中,輸入索引鍵名稱。
-
在值中,進入索引鍵值。
-
-
[移除標籤] 在標籤旁邊,選擇移除標籤。
-
-
選擇建立。
- AWS CLI
-
-
建立名為
service-definition.json
且具有下列內容的檔案。將
user-input
取代為您的值。{ "serviceName": "
myBlueGreenService
", "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster
", "taskDefinition": "sample-fargate:1
", "desiredCount": 5, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-09ce6e74c116a2299
", "subnet-00bb3bd7a73526788
", "subnet-0048a611aaec65477
" ], "securityGroups": [ "sg-09d45005497daa123
" ], "assignPublicIp": "ENABLED" } }, "deploymentController": { "type": "ECS" }, "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 2, "alarms": { "alarmNames": [ "myAlarm" ], "rollback": true, "enable": true }, "lifecycleHooks": [ { "hookTargetArn": "arn:aws:lambda:us-west-2:7123456789012:function:checkExample
", "roleArn": "arn:aws:iam::123456789012:role/ECSLifecycleHookInvoke
", "lifecycleStages": [ "PRE_SCALE_UP" ] } ] }, "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197
", "containerName": "fargate-app
", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199
", "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-blue-green-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911
", "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS
" } } ] } -
執行
create-service
。將
user-input
取代為您的值。aws ecs create-service --cli-input-json file://service-definition.json
或者,您可以使用下列範例來建立具有負載平衡器組態的藍/綠部署服務:
aws ecs create-service \ --cluster "
arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster
" \ --service-name "blue-green-example-service" \ --task-definition "nginxServer:1" \ --launch-type "FARGATE" \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12345
,subnet-67890
,subnet-abcdef
,subnet-fedcba
],securityGroups=[sg-12345
],assignPublicIp=ENABLED}" \ --desired-count 3 \ --deployment-controller "type=ECS" \ --deployment-configuration "strategy=BLUE_GREEN,maximumPercent=200,minimumHealthyPercent=100,bakeTimeInMinutes=0" \ --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg1/abcdef1234567890
,containerName=nginx,containerPort=80,advancedConfiguration={alternateTargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012
:targetgroup/MyBGtg2/0987654321fedcba
,productionListenerRule=arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/MyLB/1234567890abcdef/1234567890abcdef
,roleArn=arn:aws:iam::123456789012:role/ELBManagementRole
}"
-
後續步驟
更新 服務以開始部署。如需詳細資訊,請參閱更新 Amazon ECS 服務。
-
監控部署程序,以確保其遵循藍/綠模式:
-
綠色服務修訂已建立並向上擴展
-
測試流量會路由至綠色修訂版 (如果已設定)
-
生產流量會轉移到綠色修訂版
-
在製作時間之後,藍色修訂會終止
-