我要如何針對 Amazon ECS 中藍/綠部署相關問題,進行疑難排解?

2 分的閱讀內容
0

我想針對 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 角色,請執行以下操作:

  1. 開啟 IAM console (IAM 主控台)。
  2. 在導覽窗格中,選擇 Roles (角色)。
  3. 選擇 Create role (建立角色)。
  4. Select type of trusted entity (選擇可信任企業類型) 區段中,選擇 AWS service (AWS 服務),然後選擇 CodeDeploy
  5. Select your use case (選擇您的使用案例) 區段,選擇 CodeDeploy - ECS,然後選擇 Next:Permissions (下一步:許可)。
    **注意:**維持預設的 AWSCodeDeployforECS 策略。此政策包含 CodeDeploy 和 Amazon ECS 與其他服務正確互動所需的許可。
  6. 選擇 Next: Tags (下一步:標籤)。
  7. (可選) 輸入標籤名稱,然後選擇 Next: Review (下一步:檢閱)。
  8. Role name (角色名稱) 中,輸入 ecsCodeDeployRole
  9. 選擇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。


相關資訊

如何為託管在 Amazon ECS 上的服務執行藍/綠部署?

使用 AWS CloudFormation,並透過 CodeDeploy 執行 ECS 藍/綠部署

AWS 官方
AWS 官方已更新 2 年前