我要如何針對 Amazon ECS 中藍/綠部署相關問題,進行疑難排解?
我想針對 Amazon Elastic Container Service (Amazon ECS) 上,其託管服務的藍/綠部署相關問題,進行疑難排解。
簡短描述
與 Amazon ECS 上託管服務的藍/綠部署相關,最常見的問題如下:
AWS Identity and Access Management (IAM) 相關資源:
- 由於出現此錯誤,因此您無法建立 ECS 服務:請為 CodeDeploy 建立您的服務角色
- 出現此錯誤:**服務
無法啟動任務 (錯誤的 ECS 無法擔任為此任務而提供的
角色。請驗證傳遞的角色具有正確的信任關係和許可,並且您的 IAM 使用者具有傳遞此角色的許可)**
負載平衡器/ ECS 相關問題:
- 由於運作狀態檢查故障,因此您的 ECS 服務無法穩定。
- 您正在收到此錯誤:由於以下錯誤,無法更新 ELB:主任務集目標群組必須位於接聽程式之後
- 在成功部署後,流量仍然會經由路由至藍色目標群組。
- ECS 服務中執行的 ECS 任務,僅會在新的綠色部署期間,無法通過 Application Load Balancer 運作狀態檢查。
- 您的 ECS 任務正在不一致地無法通過 Application Load Balancer 運作狀態檢查。
- 由於沒有容器執行個體滿足所有要求,因此您的 ECS 服務無法執行任務。最接近比對的容器執行個體,沒有足夠的可用 CPU 單位。
AWS CloudFormation 相關問題 (如果您正在藉由 CloudFormation 執行藍/綠部署):
- 當建立可觸發藍/綠部署的變更集時,CloudFormation 堆疊失敗,並顯示 Internal Failure (內部故障) 錯誤。
- 當您建立可觸發藍/綠部署的變更集時,收到錯誤:**類型為 AWS::CodeDeploy::BlueGreen 的 'CodeDeployBlueGreenHook' 失敗,且會顯示訊息:初始與最終範本之間的 TaskDefinition 邏輯 ID [
] 是相同的,CodeDeploy 無法正確執行 BlueGreen 的風格更新**
解決方案
IAM 相關的問題
由於出現此錯誤,因此您無法建立 ECS 服務:請為 CodeDeploy 建立您的服務角色:
由於 AWS CodeDeploy 沒有執行藍/綠部署策略所需的 IAM 許可,因此會出現此錯誤。您必須授予 CodeDeploy 服務許可,才能代表您更新您的 Amazon ECS 服務。
如要解決此錯誤,請驗證您的 CodeDeploy IAM 角色是否已正確建立,且具有所需的許可。
如要為 CodeDeploy 建立 IAM 角色,請執行以下操作:
- 開啟 IAM console (IAM 主控台)。
- 在導覽窗格中,選擇 Roles (角色)。
- 選擇 Create role (建立角色)。
- 在 Select type of trusted entity (選擇可信任企業類型) 區段中,選擇 AWS service (AWS 服務),然後選擇 CodeDeploy。
- 在 Select your use case (選擇您的使用案例) 區段,選擇 CodeDeploy - ECS,然後選擇 Next:Permissions (下一步:許可)。
**注意:**維持預設的 AWSCodeDeployforECS 策略。此政策包含 CodeDeploy 和 Amazon ECS 與其他服務正確互動所需的許可。 - 選擇 Next: Tags (下一步:標籤)。
- (可選) 輸入標籤名稱,然後選擇 Next: Review (下一步:檢閱)。
- 在 Role name (角色名稱) 中,輸入 ecsCodeDeployRole。
- 選擇Create role (建立角色)。
您收到錯誤:服務無法啟動任務 (錯誤 ECS 無法擔任為此任務提供的角色:驗證傳遞的 IAM 角色是否具有適當的信任關係與許可,以及您的 IAM 使用者是否有傳遞此角色之許可):
檢查錯誤訊息所傳回的 IAM 角色,確保 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體 具有 ECS 任務服務的可信任關係 ecs-tasks.amazonaws.com。適用於角色的信任關係,必須與以下內容類似:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com", "ecs-tasks.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
負載平衡器/ECS 相關問題
- **由於運作狀態檢查失敗,因此無法穩定您的 ECS:**請確保任務所定義的連接映射與目標群組的連接是可比對的。如需更多詳細資訊,請參閱如何讓 Amazon ECS 任務使用 Amazon EC2 啟動類型執行,以通過 Amazon ECS 中的 Application Load Balancer 運作狀態檢查?
- **您收到錯誤訊息:錯誤訊息:由於發生以下錯誤,因此無法更新 ELB:主要任務集目標群組必須在接聽程式之後:**當 Elastic Load Balancing 接聽程式或目標群組配置不當時,即會出現此錯誤。請確保 ELB 主要接聽程式和測試接聽程式,均指向目前為您的工作負載提供服務的主要目標群組。
- **在成功部署後,流量仍然會經由路由至藍色目標群組:**CodeDeploy 會在部署完成後,自動更新負載平衡器的主要接聽程式,以指向綠色目標群組。但是,CodeDeploy 僅會更新您所指定的生產接聽程式。如果 CodeDeploy 在部署後無法切換流量,則 ELB 接聽程式可能配置了錯誤的流量類型。請確保您已為主要的 ELB 接聽程式指定正確的協定和連接。
- **ECS 服務中執行的 ECS 任務,僅會在新綠色部署期間,無法通過 Application Load Balancer 運作狀態檢查:**檢查是否有其他的 ECS 服務正嘗試將其任務註冊到同一綠色目標群組,並因此造成差異。更新負載平衡器配置,確保只有一個 ECS 服務或連接埠註冊到一個目標群組。
- **ECS 任務正不一致地無法通過 Application Load Balancer 運作狀態檢查:**當您的容器啟動時間超過預期時,即可能會出現此問題。檢查您的容器應用程式代碼,找出延遲的原因。若要解決此問題,請最佳化應用程式代碼。如果您仍然無法解決問題,請將運作狀態檢查寬限期間包含入 ECS 服務中,好讓容器有足夠的時間啟動。
- **由於沒有任何容器執行個體能滿足所有要求,因此您的 ECS 服務無法執行任務。最接近匹配的容器執行個體沒有足夠的可用 CPU 單位:**在執行藍/綠部署之前,請確保您擁有足夠的容器執行個體資源。
CloudFormation 相關問題
**注意:**這些疑難排解步驟僅適用於藍/綠部署的 CloudFormation
- **當建立可觸發藍/綠部署的變更集時,CloudFormation 堆疊失敗,並會顯示內部故障錯誤:**為緩解此問題,請使用 CloudFormation 服務角色,並將此角色連接至您的 CloudFormation 堆疊中。請確保服務角色具有所需許可,以執行所有堆疊操作。請注意,當您建立堆疊後,您無法從堆疊中移除服務角色。
- 當您建立可觸發藍/綠部署的變更集時,收到錯誤:**類型為 AWS::CodeDeploy::BlueGreen 的 'CodeDeployBlueGreenHook' 失敗,且會顯示訊息:初始與最終範本之間的 TaskDefinition 邏輯 ID [
] 是相同的,CodeDeploy 無法正確執行 BlueGreen 的風格更新:** 當您指定已指向綠色目標群組的測試接聽程式時,屆時 CodeDeploy 掛鉤會失敗,並出現此錯誤。請確保在執行藍/綠部署之前,測試接聽程式尚未指向綠色目標群組。
**重要提示:**如果要取消和復原藍/綠部署,不要使用 UpdateService API。反之,使用 CreateDeployment API。要復原部署,請使用部署 StopDeployment API。
相關資訊
相關內容
- 已提問 2 年前lg...
- 已提問 5 個月前lg...
- 已提問 3 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 個月前