疑難排解 Amazon EC2 Auto Scaling 問題 - AWS CodeDeploy

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

疑難排解 Amazon EC2 Auto Scaling 問題

一般的 Amazon EC2 Auto Scaling 故障排除

部署至 Amazon EC2 Auto Scaling 群組中 EC2 執行個體的部署可能會失敗,原因如下:

  • Amazon EC2 Auto Scaling 會持續啟動和終止 EC2 執行個體。如果 CodeDeploy 無法自動部署應用程式修訂版,Amazon EC2 Auto Scaling 會持續啟動和終止 EC2 執行個體。

    取消 Amazon EC2 Auto Scaling 群組與 CodeDeploy 部署群組的關聯,或變更 Amazon EC2 Auto Scaling 群組的組態,使所需的執行個體數目符合目前執行個體的數量 (因此防止 Amazon EC2 Auto Scaling 啟動任何更多 EC2 執行個體)。如需詳細資訊,請參閱 Amazon EC2 自動擴展的變更部署群組設定 CodeDeploy或手動擴展。

  • CodeDeploy 代理程式沒有回應。如果在 EC2 執行個體啟動或啟動後立即執行的初始化指令碼 (例如 cloud init 指令碼) 需要一個多小時才能執行,則可能不會安裝 CodeDeploy 代理程式。 CodeDeploy 有一個小時的逾時, CodeDeploy 代理程式回應擱置的部署。若要解決此問題,請將您的初始化指令碼移至 CodeDeploy應用程式修訂版本。

  • Amazon EC2 Auto Scaling 群組中的 EC2 執行個體會在部署期間重新啟動。如果 EC2 執行個體在部署期間重新開機,或在處理部署命令時關閉 CodeDeploy 代理程式,則部署可能會失敗。如需詳細資訊,請參閱 終止或重新啟動 Amazon EC2 Auto Scaling 執行個體可能會導致部署失敗

  • 多個應用程式修訂會同時部署到 Amazon EC2 Auto Scaling 群組中的相同 EC2 執行個體。如果其中一個部署的指令碼執行時間超過幾分鐘,則同時將多個應用程式修訂部署到 Amazon EC2 Auto Scaling 群組中的相同 EC2 執行個體可能會失敗。請勿將多個應用程式修訂部署到 Amazon EC2 Auto Scaling 群組中的相同 EC2 執行個體。

  • 作為 Amazon EC2 自動擴展群組一部分啟動的新 EC2 執行個體,部署失敗。在這個案例中,在部署中執行指令碼可能會阻止在 Amazon EC2 自動擴展群組中啟動 EC2 執行個體。(Amazon EC2 Auto Scaling 群組中的其他 EC2 執行個體可能看似正常執行。) 若要解決這個問題,請確保先完成所有其他指令碼:

    • CodeDeploy AMI 中未包含代理程式:如果您在啟動新執行個體時使用cfn-init指令來安裝 CodeDeploy 代理程式,請將代理程式安裝指令碼放在 AWS CloudFormation 範本cfn-init區段的末尾。

    • CodeDeploy 代理程式包含在 AMI 中:設定 AMI,讓代理程式在建立執行個體時處於Stopped狀態,然後在指令碼程式庫中包含用於啟動代理程式的cfn-init指令碼。

「CodeDeployRole 不授予您在以下 AWS 服務中執行操作的權限: AmazonAutoScaling」錯誤

使用以啟動範本建立的 Auto Scaling 群組的部署需要下列權限。這些是受AWSCodeDeployRole AWS 管理策略所授與的權限之外的補充。

  • EC2:RunInstances

  • EC2:CreateTags

  • iam:PassRole

如何缺少這些許可,您可能會收到此錯誤。如需詳細資訊教學課程:用 CodeDeploy 於將應用程式部署到 Auto Scaling 群組,請參閱為 Auto Scaling 群組建立啟動範本和 Amazon EC2 Au to Scaling 使用者指南中的可。

Amazon EC2 Auto Scaling 群組中的執行個體會持續佈建和終止,然後才能部署修訂

在某些情況下,錯誤可能會導致無法成功部署到 Amazon EC2 Auto Scaling 群組中新佈建的執行個體。因此沒有執行正常的執行個體,也沒有成功的部署。由於部署無法成功執行或成功完成,因此執行個體在建立後很快就會終止。然後,Amazon EC2 Auto Scaling 群組組態會佈建另一批執行個體嘗試滿足運作狀態最低的主機需求。這個批次也會終止,此循環會繼續下去。

可能的原因包括:

  • Amazon EC2 Auto Scaling 群組運作狀態檢查失敗。

  • 應用程式修訂中的錯誤。

若要解決此問題,請遵循這些步驟:

  1. 手動建立不屬於 Amazon EC2 Auto Scaling 群組的 EC2 執行個體。使用唯一的 EC2 執行個體標籤,為執行個體加入標籤。

  2. 將新執行個體新增至受影響的部署群組。

  3. 將沒有錯誤的新應用程式修訂部署至部署群組。

這會提示 Amazon EC2 Auto Scaling 群組將應用程式修訂部署到 Amazon EC2 Auto Scaling 群組中的 future 執行個體。

注意

確認部署成功後,請刪除您建立的執行個體,以避免 AWS 帳戶的持續費用。

終止或重新啟動 Amazon EC2 Auto Scaling 執行個體可能會導致部署失敗

如果 EC2 執行個體透過 Amazon EC2 Auto Scaling 啟動,然後該執行個體終止或重新啟動,則對該執行個體的部署可能會因下列原因而失敗:

  • 在進行中的部署期間,擴展事件或任何其他終止事件會導致執行個體從 Amazon EC2 Auto Scaling 群組中分離,然後終止。由於部署無法完成,因此將會失敗。

  • 執行個體會重新啟動,但啟動執行個體需要五分鐘以上的時間。 CodeDeploy 將此視為逾時。該服務會使所有目前和未來對該執行個體的部署失敗。

解決此問題:

  • 一般而言,請確保在終止或重新啟動執行個體之前完成所有部署。請確保在執行個體啟動或重新啟動後,啟動所有部署。

  • 如果您為 Amazon Amazon EC2 Auto Scaling 組態指定 Windows 伺服器基礎的亞馬遜機器映像 (AMI),並使用 EC2Config 服務來設定執行個體的電腦名稱,則部署可能會失敗。若要修正此問題,請在 Windows 伺服器基礎 AMI 的 EC2 服務屬性的 [一般] 索引標籤上,清除 [設定電腦名稱]。清除此核取方塊後,使用該 Windows 伺服器基礎 AMI 啟動的所有新 Windows 伺服器 Amazon EC2 Auto Scaling 執行個體都會停用此行為。對於啟用此行為的 Windows 伺服器 Amazon EC2 Auto Scaling 執行個體,您不需要清除此核取方塊。只需在重新啟動後,將失敗的部署重新部署至這些執行個體。

避免將多個部署群組與單一 Amazon EC2 Auto Scaling 群組建立關聯

最佳實務是,您應該只將一個部署群組與每個 Amazon EC2 Auto Scaling 群組建立關聯。

這是因為如果 Amazon EC2 Auto Scaling 擴展具有與多個部署群組相關聯掛接的執行個體,它會一次傳送所有勾點的通知。這會導致每個執行個體的多個部署同時啟動。當多個部署同時傳送命令至 CodeDeploy 代理程式時,可能會達到生命週期事件與部署開始或前一個生命週期事件結束之間的五分鐘逾時。如果發生這種情況,部署即會失敗,即使部署程序如預期執行。

注意

生命週期事件中指令碼的預設逾時時間為 30 分鐘。您可以將逾時變更為 AppSpec 檔案中的其他值。如需詳細資訊,請參閱 新增EC2/ AppSpec 內部部署的檔案

如果同時出現一個以上的部署嘗試,當部署發生時,會無法控制順序。

最後,如果部署到任何執行個體失敗,Amazon EC2 Auto Scaling 會立即終止執行個體。當第一個執行個體關閉時,其他執行中的部署開始失敗。由於 CodeDeploy 代理程式會 CodeDeploy 有一小時的逾時時間回應擱置中的部署,因此每個執行個體最多可能需要 60 分鐘的時間逾時。

如需 Amazon EC2 Auto Scaling 的詳細資訊,請參閱引擎蓋之下: CodeDeploy 和 Auto Scaling 整合

Amazon EC2 Auto Scaling 群組中的 EC2 執行個體無法啟動並收到錯誤「活動訊號逾時」

Amazon EC2 Auto Scaling 群組可能無法啟動新的 EC2 執行個體,產生類似下列內容的訊息:

Launching a new EC2 instance <instance-Id>. Status Reason: Instance failed to complete user's Lifecycle Action: Lifecycle Action with token<token-Id> was abandoned: Heartbeat Timeout.

此訊息通常會指出下列項目之一:

  • 已達到與 AWS 帳戶相關聯的同時部署數目上限。如需部署限制的詳細資訊,請參閱 CodeDeploy 配額

  • Auto Scaling 組嘗試過快地啟動太多 EC2 執行個體。每個新執行個體的 API 呼叫RecordLifecycleActionHeartbeatCompleteLifecycleAction針對每個新執行個體進行了限制。

  • 中的應用程式 CodeDeploy 在更新或刪除其關聯的部署群組之前已刪除。

    刪除應用程式或部署群組時,會 CodeDeploy 嘗試清除與該應用程式或部署群組相關聯的任何 Amazon EC2 Auto Scaling 掛鉤,但可能會保留一些掛鉤。如果您執行命令來刪除部署群組,輸出中會傳回剩餘關聯。不過,如果您執行命令來刪除應用程式,剩餘關聯不會在輸出中出現。

    因此,做為最佳實務,您應該先刪除所有與應用程式建立關聯的部署群組,再刪除應用程式。您可以使用命令輸出,來識別必須手動刪除的生命週期關聯。

如果您收到「Heartbeat Timeout」錯誤訊息,則可以透過執行下列操作來判斷剩餘的生命週期關聯是否為原因,並解決問題:

  1. 執行以下任意一項:

    • 呼叫命delete-deployment-group令以刪除與導致活動訊號逾時之 Auto Scaling 群組相關聯的部署群組。

    • 使用非空白的 Auto Scaling 群組名稱清單呼叫update-deployment-group指令,以卸離所有 CodeDeploy受管理的 Auto Scaling 生命週期掛接。

      例如,輸入下列 AWS CLI 命令:

      aws deploy update-deployment-group --application-name my-example-app --current-deployment-group-name my-deployment-group --auto-scaling-groups

      作為另一個例子,如果您將 CodeDeploy API 與 Java 一起使用,請調用UpdateDeploymentGroup並設置autoScalingGroupsnew ArrayList<String>()。這autoScalingGroups將設置為一個空列表並刪除現有列表。不要使用null,這是默認的,因為這會保留autoScalingGroups原樣,這不是你想要的。

    檢查呼叫的輸出。如果輸出包含具有 Amazon EC2 Auto Scaling 生命週期勾點清單的hooksNotCleanedUp結構,則有剩餘的生命週期掛鉤。

  2. 呼叫命describe-lifecycle-hooks令,指定與無法啟動的 EC2 執行個體相關聯的 Amazon EC2 自動擴展群組名稱。在輸出中,尋找下列任一項目:

    • Amazon EC2 Auto Scaling 生命週期勾點名稱與您在步驟 1 中識別的hooksNotCleanedUp結構相對應。

    • Amazon EC2 Auto Scaling 生命週期勾點名稱,其中包含與失敗的 Auto Scaling 群組相關聯的部署群組名稱。

    • Amazon EC2 Auto Scaling 生命週期勾點名稱可能導致部 CodeDeploy 署的活動訊號逾時。

  3. 如果勾點屬於步驟 2 中列出的其中一個類別,請呼叫delete-lifecycle-hook指令將其刪除。在呼叫中指定 Amazon EC2 Auto Scaling 群組和生命週期勾點。

    重要

    只刪除導致問題的掛接,如步驟 2 所述。如果刪除可行的掛鉤,則部署可能會失敗,或者可 CodeDeploy 能無法部署應用程式修訂版以向外擴充 EC2 執行個體。

  4. 使用所需的「Auto Scaling」群組名稱呼叫update-deployment-groupcreate-deployment-group指令。 CodeDeploy使用新的 UUID 重新安裝「Auto Scaling」掛接。

注意

如果您從 CodeDeploy 部署群組中分離 Auto Scaling 群組,則任何進行中的 Auto Scaling 群組部署可能會失敗,而由 Auto Scaling 群組向外擴充的新 EC2 執行個體將不會從中 CodeDeploy收到應用程式修訂版本。若要讓 Auto Scaling 再次運作 CodeDeploy,您需要將 Auto Scaling 群組重新連接至部署群組,然後呼叫新的CreateDeployment來啟動叢集範圍的部署。

不匹配的 Amazon EC2 自 Auto Scaling 生命週期掛鉤可能會導致對 Amazon EC2 自動 Auto Scaling 群組的自動部署停止或失敗

Amazon EC2 Auto Scaling 並 CodeDeploy 使用生命週期勾點來判斷哪些應用程式修訂版在 Amazon EC2 自動擴展群組中啟動後,應將哪些應用程式修訂部署到哪些 EC2 執行個體。如果生命週期掛鉤和有關這些掛鉤的資訊在 Amazon EC2 Auto Scaling 和中不完全相符,則自動部署可能會停止或失敗 CodeDeploy。

如果部署到 Amazon EC2 Auto Scaling 群組失敗,請查看 Amazon EC2 自 Auto Scaling 中的生命週期勾點名稱是否 CodeDeploy 相符。如果沒有,請使用這些 AWS CLI 命令呼叫。

首先,取得 Amazon EC2 Auto Scaling 群組和部署群組的生命週期勾點名稱清單:

  1. 呼叫命describe-lifecycle-hooks令,指定與中部署群組相關聯的 Amazon EC2 Auto Scaling 群組的名稱 CodeDeploy。在輸出的 LifecycleHooks 清單中,記錄每個 LifecycleHookName 值。

  2. 呼叫命get-deployment-group令,指定與 Amazon EC2 Auto Scaling 群組關聯的部署群組名稱。在輸出的autoScalingGroups清單中,找出名稱值與 Amazon EC2 Auto Scaling 群組名稱相符的每個項目,然後記下對應的hook值。

現在比較兩組生命週期關聯的名稱。如果完全相符 (字元對字元),那麼這就不是問題所在。您可能想要嘗試本節其他部分描述的其他 Amazon EC2 Auto Scaling 疑難排解步驟。

不過,如果兩組生命週期關聯名稱不完全相符 (字元對字元),請執行下列作業:

  1. 如果在 describe-lifecycle-hooks 命令輸出中包含在 get-deployment-group 命令輸出中未包含的生命週期關聯名稱,則執行以下作業:

    1. 針對describe-lifecycle-hooks命令輸出中的每個生命週期掛接名稱,呼叫delete-lifecycle-hook命令。

    2. 呼叫命update-deployment-group令,指定原始 Amazon EC2 Auto Scaling 群組的名稱。 CodeDeploy 在 Amazon EC2 Auto Scaling 群組中建立新的替代生命週期掛鉤,並將生命週期勾點與部署群組建立關聯。現在應該會在新執行個體新增至 Amazon EC2 自動 Auto Scaling 群組時恢復自動部署。

  2. 如果在 get-deployment-group 命令輸出中包含在 describe-lifecycle-hooks 命令輸出中未包含的生命週期關聯名稱,則執行以下作業:

    1. 呼叫命update-deployment-group令,但不要指定原始 Amazon EC2 Auto Scaling 群組的名稱。

    2. 再次呼叫update-deployment-group命令,但這次要指定原始 Amazon EC2 Auto Scaling 群組的名稱。 CodeDeploy 在 Amazon EC2 Auto Scaling 群組中重新建立遺失的生命週期掛鉤。現在應該會在新執行個體新增至 Amazon EC2 自動 Auto Scaling 群組時恢復自動部署。

在您取得兩組生命週期勾點名稱完全符合之後,字元的字元應該再次部署應用程式修訂,但只能部署到新執行個體,因為這些執行個體新增至 Amazon EC2 Auto Scaling 群組。已經在 Amazon EC2 自動擴展群組中的執行個體不會自動進行部署。

「部署失敗,因為找不到您的部署群組的執行個體」錯誤

如果您看到下列 CodeDeploy 錯誤,請閱讀本節:

The deployment failed because no instances were found for your deployment group. Check your deployment group settings to make sure the tags for your EC2 instances or Auto Scaling groups correctly identify the instances you want to deploy to, and then try again.

此錯誤的可能原因包括:

  1. 您的部署群組設定包含 EC2 執行個體、現場部署執行個體或 Auto Scaling 群組不正確的標記。若要修正此問題,請檢查您的標籤是否正確,然後重新部署應用程式。

  2. 您的叢集會在部署開始後向外擴充。在這個案例中,您會看到叢集中InService狀態良好的執行個體,但您也會看到上述錯誤。若要修正此問題,請重新部署您的應用程式。

  3. 您的「Auto Scaling」群組不包含任何處於該InService狀態的執行個體。在這個案例中,當您嘗試執行叢集範圍部署時,部署會失敗並顯示上述錯誤訊息,因為至少 CodeDeploy 需要一個執行個體處於狀態InServiceInService狀態中可能沒有執行個體的原因有很多。其中一些包括:

    • 您已排程 (或手動設定)「Auto Scaling」群組大小為0

    • Auto Scaling 檢測到錯誤的 EC2 實例(例如,EC2 實例出現硬件故障),因此將它們全部取消,不留在InService狀態中。

    • 在從0到向外延展事件期間1,部 CodeDeploy 署了先前成功的修訂版 (稱為上次成功的修訂版),該修訂版本自上次部署後變得不健康。這會造成向外延展執行個體上的部署失敗,進而導致 Auto Scaling 取消執行個體,而不會在狀態中留下執行個體。InService

      如果您發現InService狀態中沒有執行個體,請依照下列程序所述疑難排解問題To troubleshoot the error if there are no instances in the InService state

若要疑難排解 InService 狀態中沒有執行個體時的錯誤
  1. 在 Amazon EC2 主控台中,確認所需容量設定。如果為零,請將其設定為正數。等待執行個體為InService,這表示部署成功。您已修正此問題,並且可以略過此疑難排解程序的剩餘步驟。如需有關設定所需容量設定的資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的設定 Auto Scaling 群組的容量限制

  2. 如果 Auto Scaling 持續嘗試啟動新的 EC2 執行個體以符合所需容量,但永遠無法滿足向外擴充,通常是因為 Auto Scaling 生命週期掛鉤失敗。疑難排解此問題,如下所示:

    1. 若要檢查哪個 Auto Scaling 生命週期勾點事件失敗,請參閱 Amazon EC2 Auto Scaling 使用者指南中的「驗證自動擴展」群組的擴展活動。

    2. 如果失敗掛接的名稱是CodeDeploy-managed-automatic-launch-deployment-hook-DEPLOYMENT_GROUP_NAME,請移至 CodeDeploy,尋找部署群組,然後尋找 Auto Scaling 啟動的失敗部署。然後調查部署失敗的原因。

    3. 如果您瞭解部署失敗的原因 (例如,發生 CloudWatch 警示),並且您可以在不變更修訂版本的情況下修正問題,請立即進行。

    4. 如果經過調查後,您判斷上次成功的 CodeDeploy修訂已不再健康狀態,且 Auto Scaling 群組中沒有健康狀態良好的執行個體,則表示您處於部署死結案例中。若要解決此問題,您必須暫時從 Auto Scaling 群組中移除 CodeDeploy生命週期勾點,然後重新安裝勾點並重新部署新的 (良好) 修訂,藉此修正錯誤 CodeDeploy 的修訂。如需說明,請參閱:

若要修正部署鎖死問題 (CLI)
  1. (選擇性) 封鎖造成 CodeDeploy 錯誤的 CI/CD 管線,以便在修正此問題時不會發生非預期的部署。

  2. 記下您目前的「Auto Scaling」DesiredCapacity設定:

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name ASG_NAME

    您可能需要在此程序結束時縮放回此數字。

  3. 將「Auto Scaling」DesiredCapacity設定設定為1。如果您想要的容量大於1開始,則這是可選的。藉由將其減少為1,執行個體稍後佈建和部署的時間將較少,進而加快疑難排解的速度。如果您的 Auto Scaling 所需容量原本設定為0,則必須將其增加為1。這是強制性的。

    AWS 自動擴展 set-desired-capacity --auto-scaling-group-name ASG 名稱-所需容量 1

    注意

    此程序的其餘步驟假設您已將設定DesiredCapacity1

    此時,「Auto Scaling」會嘗試縮放至一個執行個體。然後,由於新 CodeDeploy 增的勾點仍然存在,所以 CodeDeploy 嘗試部署;部署失敗;Auto Scaling 會取消執行個體;Auto Scaling 會嘗試重新啟動執行個體以達到所需容量的其中一個執行個體,而且會再次失敗。您正處於取消重新啟動迴圈中。

  4. 從部署群組中取消註冊 Auto Scaling 群組:

    警告

    以下命令將啟動一個沒有軟件的新 EC2 實例。執行指令之前,請確定未執行任何軟體的 Auto Scaling InService 執行個體是可接受的。例如,確定與執行個體相關聯的負載平衡器不會在沒有軟體的情況下將流量傳送到此主機。

    重要

    使用如下所示的 CodeDeploy 指令移除掛鉤。請勿透過 Auto Scaling 服務移除勾點,因為移除作業將無法被辨識 CodeDeploy。

    aws deploy update-deployment-group --application-name APPLICATION_NAME --current-deployment-group-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups

    執行此命令後,會發生下列情況:

    1. CodeDeploy 從部署群組取消註冊「Auto Scaling」群組。

    2. CodeDeploy 從「Auto Scaling」群組中移除「Auto Scaling」生命週期勾

    3. 由於導致部署失敗的掛鉤不再存在,Auto Scaling 會取消現有 EC2 執行個體,並立即啟動新的執行個體以擴展到所需的容量。新執行個體應該很快就會進入InService狀態。新執行個體不包含軟體。

  5. 等待 EC2 實例進入狀InService態。若要驗證其狀態,請使用下列命令:

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names ASG_NAME --query AutoScalingGroups[0].Instances[*].LifecycleState

  6. 將鉤子添加回 EC2 實例:

    重要

    使用如下所示的 CodeDeploy 指令加入掛鉤。請勿使用 Auto Scaling 服務來新增勾點,因為新增功能將無法被辨識 CodeDeploy。

    aws deploy update-deployment-group --application-name APPLICATION_NAME --current-deployment-group-name DEPLOYMENT_GROUP_NAME --auto-scaling-groups ASG_NAME

    執行此命令後,會發生下列情況:

    1. CodeDeploy 將 Auto Scaling 生命週期掛鉤重新安裝到 EC2 執行個體

    2. CodeDeploy 將「Auto Scaling」群組與部署群組重新註冊。

  7. 使用 Amazon S3 建立叢集部署,或您知道健康狀況良好且想要使用的 GitHub 修訂版。

    例如,如果修訂版是 Amazon S3 儲存貯體中使用物件金鑰呼叫my-revision-bucket的 .zip 檔案httpd_app.zip,請輸入下列命令:

    aws deploy create-deployment --application-name APPLICATION_NAME --deployment-group-name DEPLOYMENT_GROUP_NAME --revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"

    由於 Auto Scaling 群組中現在有一個InService執行個體,因此此部署應該可以運作,而且您應該不會再看到錯誤部署失敗,因為找不到您的部署群組的執行個體。

  8. 部署成功後,如果您先前將 Auto Scaling 群組擴展至原始容量:

    aws autoscaling set-desired-capacity --auto-scaling-group-name ASG_NAME --desired-capacity ORIGINAL_CAPACITY

若要修正部署鎖死問題 (主控台)
  1. (選擇性) 封鎖造成 CodeDeploy 錯誤的 CI/CD 管線,以便在修正此問題時不會發生非預期的部署。

  2. 前往 Amazon EC2 主控台,記下您的 Auto Scaling 所需容量設定。您可能需要在此程序結束時縮放回此數字。如需尋找此設定的相關資訊,請參閱在 Auto Scaling 群組上設定容量限制

  3. 將所需的 EC2 執行個體數量設定為1

    如果您想要的容量大於1開始,則這是可選的。藉由將其減少為1,執行個體稍後佈建和部署的時間將較少,進而加快疑難排解的速度。如果您的 Auto Scaling 所需容量原本設定為0,您必須將其增加為1。這是強制性的。

    注意

    此程序的其餘步驟假設您已將 [想要的容量] 設定為1

    1. 前往網址 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台,然後從導覽窗格中選擇 Auto Scaling 群組

    2. 選擇適當的「區域」。

    3. 轉到有問題的「Auto Scaling」組。

    4. 群組詳細資料中,選擇編輯

    5. 將 [所需容量] 設定為1

    6. 選擇更新

  4. 從部署群組中取消註冊 Auto Scaling 群組:

    警告

    以下子步驟將啟動不含軟體的新 EC2 執行個體。執行指令之前,請確定未執行任何軟體的 Auto Scaling InService 執行個體是可接受的。例如,確定與執行個體相關聯的負載平衡器不會在沒有軟體的情況下將流量傳送到此主機。

    1. 開啟主 CodeDeploy 控台,網址為 https://console.aws.amazon.com/codedeploy/

    2. 選擇適當的「區域」。

    3. 在導覽窗格中,選擇 Applications (應用程式)

    4. 選擇您的 CodeDeploy 應用程序的名稱。

    5. 選擇部 CodeDeploy 署群組的名稱。

    6. 選擇編輯

    7. 環境組態中,取消選取 Amazon EC2 Auto Scaling 群組

      注意

      如果沒有定義環境配置,則控制台不允許您保存配置。若要略過檢查,請暫時新增EC2或您On-premises知道不會解析為任何主機的標籤。若要新增標籤,請選取 Amazon EC2 執行個體現場部署執行個體,然後新增EC2或的標籤金鑰On-premises。您可以將標籤保留為空。

    8. 選擇儲存變更

      完成這些子步驟後,會發生下列情況:

      1. CodeDeploy 從部署群組取消註冊「Auto Scaling」群組。

      2. CodeDeploy 從「Auto Scaling」群組中移除「Auto Scaling」生命週期勾

      3. 由於導致部署失敗的掛鉤不再存在,Auto Scaling 會取消現有 EC2 執行個體,並立即啟動新的執行個體以擴展到所需的容量。新執行個體應該很快就會進入InService狀態。新執行個體不包含軟體。

  5. 等待 EC2 實例進入狀InService態。若要驗證其狀態:

    1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    2. 在導覽窗格中,選擇 Auto Scaling Groups (AS 安全群組)

    3. 選擇您的「Auto Scaling」群組。

    4. 在內容窗格中,選擇「執行處理管理」索引標籤。

    5. 在「執行個體」下,確定「生命週期」欄指示在執行個體InService旁邊。

  6. 使用您用來移除該群組的相同方法,將 Auto Scaling 群組重新註冊至 CodeDeploy 部署群組:

    1. 開啟主 CodeDeploy 控台,網址為 https://console.aws.amazon.com/codedeploy/

    2. 選擇適當的「區域」。

    3. 在導覽窗格中,選擇 Applications (應用程式)

    4. 選擇您的 CodeDeploy 應用程序的名稱。

    5. 選擇部 CodeDeploy 署群組的名稱。

    6. 選擇編輯

    7. 環境組態中,選取 Amazon EC2 Auto Scaling 群組,然後從清單中選取您的 Auto Scaling 群組。

    8. Amazon EC2 執行個體或現場部署執行個體下,找到您新增的標籤並將其移除。

    9. 取消選取 Amazon EC2 執行個體或現場部署執行個體旁邊的核取方塊。

    10. 選擇儲存變更

    此設定會將生命週期勾點重新安裝到 Auto Scaling 群組中。

  7. 使用 Amazon S3 建立叢集部署,或您知道健康狀況良好且想要使用的 GitHub 修訂版。

    例如,如果修訂版是my-revision-bucket使用物件金鑰呼叫的 Amazon S3 儲存貯體中的 .zip 檔案httpd_app.zip,請執行下列動作:

    1. 在 CodeDeploy 主控台的 [部署群組] 頁面中,選擇 [建立部署]。

    2. 針對 Revision type (修訂版類型),選擇 My application is stored in Amazon S3 (我的應用程式存放在 Amazon S3)

    3. 對於「修訂」位置,請選擇s3://my-revision-bucket/httpd_app.zip

    4. 對於「修訂」檔案類型,請選擇.zip

    5. 選擇 Create deployment (建立部署)

    由於 Auto Scaling 群組中現在有一個InService執行個體,因此此部署應該可以運作,而且您應該不會再看到錯誤部署失敗,因為找不到您的部署群組的執行個體。

  8. 部署成功後,如果您先前將 Auto Scaling 群組擴展至原始容量:

    1. 前往網址 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台,然後從導覽窗格中選擇 Auto Scaling 群組

    2. 選擇適當的「區域」。

    3. 轉到您的「Auto Scaling」組。

    4. 群組詳細資料中,選擇編輯

    5. 將 [所需容量] 設定回其原始值。

    6. 選擇更新