本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 Amazon EC2 Auto Scaling 問題進行故障診斷
主題
- 一般 Amazon EC2 Auto Scaling 疑難排解
- "CodeDeployRole 未授予您在下列 AWS 服務中執行操作的許可: AmazonAutoScaling" 錯誤
- Amazon EC2 Auto Scaling 群組中的執行個體會持續佈建和終止,然後才能部署修訂
- 終止或重新啟動 Amazon EC2 Auto Scaling 執行個體可能會導致部署失敗
- 避免將多個部署群組與單一 Amazon EC2 Auto Scaling 群組建立關聯
- EC2 Amazon EC2 Auto Scaling 群組中的 執行個體無法啟動和接收錯誤「Heartbeat Timeout」
- 不相符的 Amazon EC2 Auto Scaling 生命週期掛鉤可能會導致 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執行個體)。如需詳細資訊,請參閱 變更部署群組設定 CodeDeploy或 Manual Scaling for Amazon EC2 Auto Scaling 。
-
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 Auto Scaling 群組一部分啟動的新EC2執行個體的部署失敗。在此案例中,在部署中執行指令碼可防止 Amazon EC2 Auto Scaling 群組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
如何缺少這些許可,您可能會收到此錯誤。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南 中的 、為 Auto Scaling 群組 教學課程:用 CodeDeploy 於將應用程式部署到 Auto Scaling 群組建立啟動範本,以及許可。 Auto Scaling
Amazon EC2 Auto Scaling 群組中的執行個體會持續佈建和終止,然後才能部署修訂
在某些情況下,錯誤可防止成功部署到 Amazon EC2 Auto Scaling 群組中新佈建的執行個體。因此沒有執行正常的執行個體,也沒有成功的部署。由於部署無法成功執行或成功完成,因此執行個體在建立後很快就會終止。然後,Amazon EC2 Auto Scaling 群組組態會導致佈建另一批次執行個體,嘗試滿足最低運作狀態良好的主機需求。這個批次也會終止,此循環會繼續下去。
可能的原因包括:
-
失敗的 Amazon EC2 Auto Scaling 群組運作狀態檢查。
-
應用程式修訂中的錯誤。
若要解決此問題,請遵循這些步驟:
-
手動建立不屬於 Amazon EC2 Auto Scaling 群組的EC2執行個體。使用唯一的執行個體標籤來標記EC2執行個體。
-
將新執行個體新增至受影響的部署群組。
-
將沒有錯誤的新應用程式修訂部署至部署群組。
這會提示 Amazon EC2 Auto Scaling 群組將應用程式修訂部署到 Amazon EC2 Auto Scaling 群組中的未來執行個體。
注意
確認部署成功後,請刪除您建立的執行個體,以避免持續向 AWS 您的帳戶收取費用。
終止或重新啟動 Amazon EC2 Auto Scaling 執行個體可能會導致部署失敗
如果EC2透過 Amazon EC2 Auto Scaling 啟動執行個體,且執行個體隨後終止或重新啟動,則該執行個體的部署可能會失敗,原因如下:
-
在進行中的部署期間,縮減事件或任何其他終止事件會導致執行個體與 Amazon EC2 Auto Scaling 群組分離,然後終止。由於部署無法完成,因此將會失敗。
-
執行個體會重新啟動,但執行個體需要超過五分鐘才能啟動。將此 CodeDeploy 視為逾時。該服務會使所有目前和未來對該執行個體的部署失敗。
解決此問題:
-
一般而言,請確保在終止或重新啟動執行個體之前完成所有部署。請確保在執行個體啟動或重新啟動後,啟動所有部署。
-
如果您為 Amazon EC2 Auto Scaling 組態指定 Windows Server 基礎 Amazon Machine Image (AMI),並使用 EC2Config服務設定執行個體的電腦名稱,則部署可能會失敗。若要修正此問題,請在 Windows Server 基礎 AMI中,清除 EC2 Service Properties 的一般索引標籤上的設定電腦名稱 。清除此核取方塊後,系統會針對使用該 Windows Server 基礎 啟動的所有新 Windows Server Amazon EC2 Auto Scaling 執行個體停用此行為AMI。對於啟用此行為的 Windows Server 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 整合
EC2 Amazon EC2 Auto Scaling 群組中的 執行個體無法啟動和接收錯誤「Heartbeat Timeout」
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執行個體。每個新執行個體對 RecordLifecycleActionHeartbeat或 CompleteLifecycleAction的API呼叫已限流。
-
在更新或刪除其相關聯的部署群組之前, CodeDeploy 已刪除 中的應用程式。
當您刪除應用程式或部署群組時, CodeDeploy 會嘗試清除與其相關聯的任何 Amazon EC2 Auto Scaling 掛鉤,但有些掛鉤可能會保留。如果您執行命令來刪除部署群組,輸出中會傳回剩餘關聯。不過,如果您執行命令來刪除應用程式,剩餘關聯不會在輸出中出現。
因此,做為最佳實務,您應該先刪除所有與應用程式建立關聯的部署群組,再刪除應用程式。您可以使用命令輸出,來識別必須手動刪除的生命週期關聯。
如果您收到「Heartbeat Timeout」錯誤訊息,則可以透過執行下列操作來判斷剩餘的生命週期關聯是否為原因,並解決問題:
-
執行以下任意一項:
-
呼叫 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
另一個範例是,如果您搭配 Java 使用 CodeDeploy API,請呼叫
UpdateDeploymentGroup
並autoScalingGroups
設為new ArrayList<String>()
。這將autoScalingGroups
設定為空清單,並移除現有清單。請勿使用null
,這是預設值,因為這會autoScalingGroups
保持原狀,但不是您想要的。
檢查呼叫的輸出。如果輸出包含具有 Amazon EC2 Auto Scaling 生命週期掛鉤清單的
hooksNotCleanedUp
結構,則會有剩餘的生命週期掛鉤。 -
-
呼叫 describe-lifecycle-hooks命令,指定與無法啟動的EC2執行個體相關聯的 Amazon EC2 Auto Scaling 群組名稱。在輸出中,尋找下列任何項目:
-
與您在步驟 1 中識別的
hooksNotCleanedUp
結構對應的 Amazon EC2 Auto Scaling 生命週期掛鉤名稱。 -
Amazon EC2 Auto Scaling 生命週期掛鉤名稱,其中包含與失敗的 Auto Scaling 群組相關聯的部署群組名稱。
-
Amazon EC2 Auto Scaling 生命週期掛鉤名稱可能導致 CodeDeploy 部署的心跳逾時。
-
-
如果掛鉤屬於步驟 2 中列出的其中一個類別,請呼叫 delete-lifecycle-hook命令以將其刪除。在通話中指定 Amazon EC2 Auto Scaling 群組和生命週期掛鉤。
重要
僅刪除造成問題的掛鉤,如步驟 2 所述。如果您刪除可行的掛鉤,您的部署可能會失敗,或者 CodeDeploy 可能無法部署應用程式修訂版以擴展EC2執行個體。
-
使用所需的 Auto Scaling 群組名稱呼叫 update-deployment-group或 create-deployment-group命令。 CodeDeploy 會使用新的 重新安裝 Auto Scaling 掛鉤UUIDs。
注意
如果您從 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 Auto Scaling 群組中啟動哪些EC2執行個體之後,將哪些應用程式修訂版部署到這些執行個體。如果生命週期掛鉤和這些掛鉤的相關資訊在 Amazon EC2 Auto Scaling 和 中不相符,則自動部署可能會停止或失敗 CodeDeploy。
如果部署至 Amazon EC2 Auto Scaling 群組失敗,請參閱 Amazon EC2 Auto Scaling 中的生命週期掛鉤名稱是否 CodeDeploy 相符。如果沒有,請使用這些 AWS CLI 命令呼叫。
首先,取得 Amazon EC2 Auto Scaling 群組和部署群組的生命週期掛鉤名稱清單:
-
呼叫 describe-lifecycle-hooks命令,指定與 中的部署群組相關聯的 Amazon EC2 Auto Scaling 群組名稱 CodeDeploy。在輸出的
LifecycleHooks
清單中,記錄每個LifecycleHookName
值。 -
呼叫 get-deployment-group命令,指定與 Amazon EC2 Auto Scaling 群組相關聯的部署群組名稱。在輸出的
autoScalingGroups
清單中,尋找名稱值符合 Amazon EC2 Auto Scaling 群組名稱的每個項目,然後記下對應的hook
值。
現在比較兩組生命週期關聯的名稱。如果完全相符 (字元對字元),那麼這就不是問題所在。您可能想要嘗試本節其他部分所述的其他 Amazon EC2 Auto Scaling 疑難排解步驟。
不過,如果兩組生命週期關聯名稱不完全相符 (字元對字元),請執行下列作業:
-
如果在 describe-lifecycle-hooks 命令輸出中包含在 get-deployment-group 命令輸出中未包含的生命週期關聯名稱,則執行以下作業:
-
針對describe-lifecycle-hooks命令輸出中的每個生命週期掛鉤名稱,呼叫 delete-lifecycle-hook命令。
-
呼叫 update-deployment-group命令,指定原始 Amazon EC2 Auto Scaling 群組的名稱。在 Amazon EC2 Auto Scaling 群組中 CodeDeploy 建立新的替換生命週期掛鉤,並將生命週期掛鉤與部署群組建立關聯。當新的執行個體新增至 Amazon EC2 Auto Scaling 群組時,現在應繼續自動部署。
-
-
如果在 get-deployment-group 命令輸出中包含在 describe-lifecycle-hooks 命令輸出中未包含的生命週期關聯名稱,則執行以下作業:
-
呼叫 update-deployment-group命令,但不指定原始 Amazon EC2 Auto Scaling 群組的名稱。
-
再次呼叫 update-deployment-group命令,但這次會指定原始 Amazon EC2 Auto Scaling 群組的名稱。 CodeDeploy 在 Amazon EC2 Auto Scaling 群組中重新建立缺少的生命週期掛鉤。當新的執行個體新增至 Amazon EC2 Auto Scaling 群組時,現在應繼續自動部署。
-
在您取得兩組完全相符的生命週期掛鉤名稱後,應再次部署字元、應用程式修訂的字元,但只在將它們新增至 Amazon EC2 Auto Scaling 群組時,才會部署到新的執行個體。部署不會自動部署至已在 Amazon EC2 Auto Scaling 群組中的執行個體。
"部署失敗,因為找不到部署群組的執行個體" 錯誤
如果您看到下列 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.
此錯誤的可能原因包括:
-
部署群組設定包括EC2執行個體、內部部署執行個體或不正確的 Auto Scaling 群組的標籤。若要修正此問題,請檢查您的標籤是否正確,然後重新部署您的應用程式。
-
您的機群會在部署開始後橫向擴展。在此案例中,您會在機群中看到
InService
狀態中的運作狀態良好執行個體,但也會看到上述錯誤。若要修正此問題,請重新部署您的應用程式。 -
Auto Scaling 群組不包含處於
InService
狀態的任何執行個體。在此案例中,當您嘗試進行整個機群部署時,部署會失敗,並出現上述錯誤訊息,因為至少 CodeDeploy 需要一個執行個體處於InService
狀態。您可能會在InService
狀態中沒有執行個體的原因有很多。其中一些包括:-
您已將 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 狀態中沒有執行個體,則對錯誤進行故障診斷
-
在 Amazon EC2主控台中,驗證所需容量設定。如果為零,請將其設定為正數。等待執行個體成為
InService
,這表示部署成功。您已修正問題,可以略過本疑難排解程序的其餘步驟。如需設定所需容量設定的資訊,請參閱 Amazon Auto Scaling 使用者指南 中的在 Auto Scaling 群組上設定容量限制。 EC2 Auto Scaling -
如果 Auto Scaling 持續嘗試啟動新的EC2執行個體以滿足所需的容量,但無法完成橫向擴展,通常是由於 Auto Scaling 生命週期掛鉤失敗所致。對此問題進行故障診斷,如下所示:
-
若要檢查哪些 Auto Scaling 生命週期掛鉤事件失敗,請參閱 Amazon EC2 Auto Scaling 使用者指南中的驗證 Auto Scaling 群組的擴展活動。 Auto Scaling
-
如果失敗的掛鉤名稱為
CodeDeploy-managed-automatic-launch-deployment-hook-
,請前往 CodeDeploy,尋找部署群組,並尋找 Auto Scaling 啟動的失敗部署。然後調查部署失敗的原因。DEPLOYMENT_GROUP_NAME
-
如果您了解部署失敗的原因 (例如 CloudWatch ,警示發生),而且可以在不變更修訂的情況下修正問題,請立即執行此操作。
-
如果在調查後,您判斷 CodeDeploy的上次成功修訂不再運作良好,且 Auto Scaling 群組中沒有運作良好的執行個體,則表示您處於部署死區案例。若要解決此問題,您必須暫時從 Auto Scaling 群組移除 CodeDeploy的生命週期掛鉤,然後重新安裝掛鉤並重新部署新的 (良好) CodeDeploy 修訂,以修正錯誤修訂。如需說明,請參閱:
-
修正部署死鎖問題 (CLI)
-
(選用) 封鎖造成 CodeDeploy 錯誤的 CI/CD 管道,以免在您修正此問題時發生非預期的部署。
-
記下您目前的 Auto Scaling DesiredCapacity設定:
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name
ASG_NAME
您可能需要在此程序結束時縮減至此數字。
-
將 Auto Scaling DesiredCapacity設定設為
1
。如果所需的容量大於 開頭1
,這是選用的。透過將執行個體縮減為1
,執行個體在稍後佈建和部署的時間會縮短,進而加快疑難排解速度。如果您的 Auto Scaling 所需容量最初設定為0
,您必須將其增加至1
。這是必要項目。aws 自動擴展 set-desired-capacity --auto-scaling-group-name
ASG_NAME
--所需容量 1注意
此程序的其餘步驟假設您已DesiredCapacity將 設定為
1
。此時,Auto Scaling 會嘗試擴展至一個執行個體。然後,由於 CodeDeploy 新增的掛鉤仍然存在,因此 CodeDeploy 會嘗試部署;部署失敗;Auto Scaling 會取消執行個體;而 Auto Scaling 會嘗試重新啟動執行個體,以達到所需容量的 ,再次失敗。您處於取消重新啟動迴圈。
-
從部署群組取消註冊 Auto Scaling 群組:
警告
下列命令將啟動沒有軟體的新EC2執行個體。在執行 命令之前,請確定不接受執行任何軟體的 Auto Scaling
InService
執行個體。例如,請確定與執行個體相關聯的負載平衡器不會在沒有軟體的情況下將流量傳送至此主機。重要
使用如下所示的 CodeDeploy 命令來移除掛鉤。請勿透過 Auto Scaling 服務移除掛鉤,因為 無法辨識移除 CodeDeploy。
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groups執行此命令後,會發生以下情況:
-
CodeDeploy 從部署群組取消註冊 Auto Scaling 群組。
-
CodeDeploy 從 Auto Scaling 群組中移除 Auto Scaling 生命週期掛鉤。
-
由於造成失敗部署的掛鉤不再存在,Auto Scaling 會取消現有的EC2執行個體,並立即啟動新的執行個體,以擴展至所需的容量。新執行個體應該很快就會進入
InService
狀態。新執行個體不包含軟體。
-
-
等待EC2執行個體進入
InService
狀態。若要驗證其狀態,請使用下列命令:aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names
ASG_NAME
--query AutoScalingGroups[0].Instances[*].LifecycleState -
將掛鉤新增至EC2執行個體:
重要
使用如下所示的 CodeDeploy 命令來新增掛鉤。請勿使用 Auto Scaling 服務新增掛鉤,因為 無法辨識新增 CodeDeploy。
aws deploy update-deployment-group --application-name
APPLICATION_NAME
--current-deployment-group-nameDEPLOYMENT_GROUP_NAME
--auto-scaling-groupsASG_NAME
執行此命令後,會發生以下情況:
-
CodeDeploy 重新安裝 Auto Scaling 生命週期掛鉤至EC2執行個體
-
CodeDeploy 會使用部署群組重新註冊 Auto Scaling 群組。
-
-
使用 Amazon S3 或您知道運作狀態良好且想要使用的 GitHub 修訂版建立機群範圍部署。
例如,如果修訂版是 Amazon S3 儲存貯體中的 .zip 檔案,
my-revision-bucket
名為 物件索引鍵httpd_app.zip
,請輸入下列命令:aws deploy create-deployment --application-name
APPLICATION_NAME
--deployment-group-nameDEPLOYMENT_GROUP_NAME
--revision "revisionType=S3,s3Location={bucket=my-revision-bucket,bundleType=zip,key=httpd_app.zip}"由於 Auto Scaling 群組中現在有一個
InService
執行個體,因此此部署應該可以運作,而且您不應再看到錯誤部署失敗,因為找不到部署群組 的執行個體。 -
在部署成功後,如果您先前已將 Auto Scaling 群組擴展到下列位置,請將該群組擴展回原始容量:
aws autoscaling set-desired-capacity --auto-scaling-group-name
ASG_NAME
--desired-capacityORIGINAL_CAPACITY
修正部署鎖死問題 (主控台)
-
(選用) 封鎖造成 CodeDeploy 錯誤的 CI/CD 管道,以免在您修正此問題時發生非預期的部署。
-
前往 Amazon EC2主控台,並記下您的 Auto Scaling 所需容量設定。您可能需要在此程序結束時縮減至此數字。如需尋找此設定的資訊,請參閱在 Auto Scaling 群組 上設定容量限制。
-
將所需的EC2執行個體數目設定為
1
:如果所需的容量大於 以開頭
1
,這是選用的。透過將其縮減為1
,執行個體稍後佈建和部署的時間將減少,這可加快故障診斷速度。如果您的 Auto Scaling 所需容量最初設定為0
,您必須將其增加至1
。這是必要項目。注意
此程序的其餘步驟假設您已將所需容量設定為
1
。在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/
,然後從導覽窗格中選擇 Auto Scaling 群組。 -
選擇適當的區域。
-
前往有問題的 Auto Scaling 群組。
-
在群組詳細資訊 中,選擇編輯 。
-
將所需的容量設定為
1
。 -
選擇更新。
-
從部署群組取消註冊 Auto Scaling 群組:
警告
下列子步驟將啟動沒有軟體的新EC2執行個體。在執行 命令之前,請確定不接受執行任何軟體的 Auto Scaling
InService
執行個體。例如,請確定與執行個體相關聯的負載平衡器不會在沒有軟體的情況下將流量傳送至此主機。在 開啟 CodeDeploy 主控台https://console.aws.amazon.com/codedeploy/
。 -
選擇適當的區域。
-
在導覽窗格中,選擇 Applications (應用程式)。
-
選擇 CodeDeploy 應用程式的名稱。
-
選擇 CodeDeploy 部署群組的名稱。
-
選擇編輯。
-
在環境組態 中,取消選取 Amazon EC2 Auto Scaling 群組 。
注意
如果未定義環境組態,則主控台不允許您儲存組態。若要略過檢查,請暫時新增 的標籤
On-premises
,EC2
否則您知道不會解析到任何主機。若要新增標籤,請選取 Amazon EC2執行個體或內部部署執行個體 ,然後新增EC2
或 的標籤索引鍵On-premises
。您可以讓標籤值保持空白。 -
選擇 Save changes (儲存變更)。
完成這些子步驟後,會發生以下情況:
-
CodeDeploy 從部署群組取消註冊 Auto Scaling 群組。
-
CodeDeploy 從 Auto Scaling 群組中移除 Auto Scaling 生命週期掛鉤。
-
由於造成失敗部署的掛鉤不再存在,Auto Scaling 會取消現有的EC2執行個體,並立即啟動新的執行個體,以擴展至所需的容量。新的執行個體應該很快就會進入
InService
狀態。新執行個體不包含軟體。
-
-
等待EC2執行個體進入
InService
狀態。若要驗證其狀態:-
在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/
。 -
在導覽窗格中,選擇 Auto Scaling Groups (AS 安全群組)。
-
選擇 Auto Scaling 群組。
-
在內容窗格中,選擇執行個體管理索引標籤。
-
在執行個體 下,請確定生命週期欄在執行個體InService旁指示 。
-
-
使用您用來移除 Auto Scaling 群組的相同方法,向 CodeDeploy 部署群組重新註冊 Auto Scaling 群組:
在 開啟 CodeDeploy 主控台https://console.aws.amazon.com/codedeploy/
。 -
選擇適當的區域。
-
在導覽窗格中,選擇 Applications (應用程式)。
-
選擇 CodeDeploy 應用程式的名稱。
-
選擇 CodeDeploy 部署群組的名稱。
-
選擇編輯。
-
在環境組態 中,選取 Amazon EC2 Auto Scaling 群組,然後從清單中選擇 Auto Scaling 群組。
-
在 Amazon EC2執行個體或內部部署執行個體 下,尋找您新增的標籤,並將其移除。
-
取消選取 Amazon EC2執行個體或內部部署執行個體 旁的核取方塊。
-
選擇 Save changes (儲存變更)。
此組態會將生命週期掛鉤重新安裝至 Auto Scaling 群組。
-
使用 Amazon S3 或您知道運作狀態良好且想要使用的 GitHub 修訂版建立機群範圍部署。
例如,如果修訂版本是 Amazon S3 儲存貯體中的 .zip 檔案,
my-revision-bucket
名為 物件索引鍵httpd_app.zip
,請執行下列動作:-
在 CodeDeploy 主控台的部署群組頁面中,選擇建立部署 。
-
針對 Revision type (修訂版類型),選擇 My application is stored in Amazon S3 (我的應用程式存放在 Amazon S3)。
-
針對修訂位置 ,選擇
s3://my-revision-bucket/httpd_app.zip
。 -
針對修訂版檔案類型 ,選擇
.zip
。 -
選擇 Create deployment (建立部署)。
由於 Auto Scaling 群組中現在有一個
InService
執行個體,因此此部署應該可以運作,而且您不應再看到錯誤。部署失敗是因為找不到部署群組 的執行個體。 -
-
在部署成功後,如果您先前已將 Auto Scaling 群組擴展到下列位置,請將該群組擴展回原始容量:
-
在 開啟 Amazon EC2主控台https://console.aws.amazon.com/ec2/
,然後從導覽窗格中選擇 Auto Scaling 群組。 -
選擇適當的區域。
-
前往 Auto Scaling 群組。
-
在群組詳細資訊 中,選擇編輯 。
-
將所需的容量設回其原始值。
-
選擇更新。
-