本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
驗證容器機群部署並進行疑難排解
機群部署稱為本主題中的部署,是Amazon GameLift Servers使用 將容器機群執行個體上的容器取代為使用機群新設定的容器的程序,例如新的容器群組定義版本。部署不會一次取代每個執行中的容器,而是先驗證新容器是否可以託管遊戲工作階段,然後逐漸取代其餘容器,以便在部署到整個機群之前捕捉錯誤的變更。容器機群會在三種情況下開始部署:
-
當您使用容器群組定義建立機群時。如果您的CreateContainerFleet請求包含遊戲伺服器容器群組定義,機群建立會開始部署,在機群的新執行個體上安裝您的容器。如果您建立沒有容器群組定義的機群,則不會部署任何執行個體,而且在您新增遊戲伺服器容器群組定義之前,機群不會部署。
-
當您更新機群的容器群組定義或其他容器設定時。 會在更新變更機群執行的容器時UpdateContainerFleet啟動部署,例如當您指定新的遊戲伺服器容器群組定義版本時。不會變更任何這些設定的更新不會啟動部署。如需有關哪些設定開始部署的資訊,請參閱 更新Amazon GameLift Servers受管容器機群。
-
當您將位置新增至作用中機群時。 會使用機群設定的容器群組定義,在新位置Amazon GameLift Servers中啟動部署。現有的位置不會重新部署。當另一個部署正在進行時,您無法新增位置。
若要查看部署的詳細資訊,請呼叫 DescribeFleetDeployment,這會傳回FleetDeployment物件。它包含部署 ID、狀態和組態,以及要部署的容器群組定義版本和轉返版本。機群的 DeploymentDetails.LatestDeploymentId 屬性可識別其最近的部署。
注意
部署僅適用於受管容器機群。
設定部署
部署的 DeploymentConfiguration是一組規則,可控制部署在機群中的進行方式,以及失敗時會發生的情況。如需有關每個設定的值和預設值的資訊,請參閱《 Amazon GameLift Servers API 參考DeploymentConfiguration》中的 。
您可以在 主控台中呼叫UpdateContainerFleet或編輯機群時設定部署組態。 CreateContainerFleet 不接受部署組態,因此機群的第一個部署一律使用預設值。
如何Amazon GameLift Servers驗證部署
部署開始時, 會Amazon GameLift Servers先驗證每個機群位置中的遊戲伺服器容器群組。它會在機群現有容量的一小部分上執行新容器,並檢查它們是否正常運作。當遊戲伺服器容器呼叫 ProcessReady() 以回報已準備好託管遊戲工作階段時,新的遊戲伺服器容器群組運作狀態良好。
此初始驗證會檢查遊戲伺服器容器群組。如果您的機群也使用每個執行個體容器群組定義, 會在Amazon GameLift Servers更新遊戲伺服器群組後更新這些群組。 會在部署完成之前分別Amazon GameLift Servers檢查每個執行個體群組;它們不會使用遊戲伺服器的ProcessReady()檢查。
如果新的遊戲伺服器容器群組在Amazon GameLift Servers停止等待之前未正常運作,驗證會失敗。如需常見原因以及如何調查這些原因的資訊,請參閱 偵錯受損的部署。
如果驗證失敗, 會Amazon GameLift Servers套用部署的 ,ImpairmentStrategy並將部署狀態設定為 IMPAIRED(適用於 MAINTAIN) 或 ROLLBACK_IN_PROGRESS(適用於 ROLLBACK)。只有在某個位置成功驗證後,才會Amazon GameLift Servers取代在該位置執行遊戲伺服器的其餘容器。
驗證需要多長時間
當Amazon GameLift Servers用於驗證的容量託管受保護的遊戲工作階段時,驗證需要更長的時間。機群的 會NewGameSessionProtectionPolicy決定新遊戲工作階段的預設保護。有效值為 NoProtection 和 FullProtection。部署的 會ProtectionStrategy判斷部署是否符合該保護。有效值為 WITH_PROTECTION 和 IGNORE_PROTECTION。
當機群NewGameSessionProtectionPolicy設為 FullProtection 且部署ProtectionStrategy設為 時WITH_PROTECTION, Amazon GameLift Servers會允許較長的驗證逾時,讓受保護的遊戲工作階段結束。搭配任何其他組合,它使用較短的逾時。
重要
如果您的新容器永遠不會正常運作,且機群FullProtection搭配WITH_PROTECTION部署使用 ,則部署可以保持 IN_PROGRESS 狀態,直到受保護的遊戲工作階段在報告失敗之前結束為止。若要取得更快的訊號,請在測試新容器映像IGNORE_PROTECTION時使用 部署,或自行取消部署。如需取消部署的指示,請參閱 透過啟動新的部署來取消部署。
如果您在NewGameSessionProtectionPolicy屬於 的機群UpdateGameSession上使用 保護個別遊戲工作階段NoProtection, Amazon GameLift Servers不會延長其等待時間。如果這些遊戲工作階段未及時結束,即使新組態正在運作,驗證也可能會失敗。
追蹤部署狀態
若要在Amazon GameLift Servers主控台
如需部署狀態值和每個值含義的資訊,請參閱《 Amazon GameLift Servers API 參考DeploymentStatus》中的 。
偵錯受損的部署
部署受損表示新容器在驗證期間無法正常運作:沒有遊戲伺服器容器在Amazon GameLift Servers停止等待ProcessReady()之前呼叫 ,通常是因為容器已結束或無法啟動。原因通常是在容器映像或遊戲伺服器中。了解容器結束的原因,或遊戲伺服器從未準備好回報的原因。
檢閱機群事件日誌
機群事件日誌會記錄部署期間Amazon GameLift Servers觀察到的內容。在 主控台的機群事件索引標籤上檢視,或呼叫 describe-fleet-events。下列事件代碼與失敗的部署相關:
-
GAME_SERVER_CONTAINER_GROUP_CRASHED和PER_INSTANCE_CONTAINER_GROUP_CRASHED– 容器群組已結束或無法啟動。當 Amazon GameLift Servers具有容器的結束代碼時,它會在事件訊息中包含代碼。 -
GAME_SERVER_CONTAINER_GROUP_REPLACED_UNHEALTHY和INSTANCE_REPLACED_UNHEALTHY– Amazon GameLift Servers取代了未正常運作的容器群組或執行個體。這些可以在部署失敗時跨機群的位置重複。 -
SERVER_PROCESS_MISCONFIGURED_CONTAINER_PORT– 遊戲伺服器容器使用的連接埠與容器群組定義中宣告的連接埠不相符。 -
LOCATION_STATE_UPDATING和LOCATION_STATE_ACTIVE– 這些將每個位置的部署歸納在一起,這可協助您將其他事件與產生它們的部署保持一致。 -
COMPUTE_LOG_UPLOAD_FAILED– 容器的日誌集合停止運作,因此來自該容器的日誌可能不完整或遺失。
讀取容器日誌
容器機群的LogConfiguration集合,其中 Amazon GameLift Servers會傳送每個容器的標準輸出: CLOUDWATCH(預設值)S3、 或 NONE。將其設定為 CLOUDWATCH或 ,S3以便在部署失敗時可使用容器輸出。當容器在遊戲伺服器開始執行之前失敗時,例如,因為容器的進入點是指不在映像中的檔案,所以此輸出是唯一失敗的記錄。如需容器記錄的資訊,請參閱 記錄差異:受管 EC2 與容器機群。
連接至受損的容器
如果您使用MAINTAIN損害策略部署,您可以連接到Amazon GameLift Servers保留並直接檢查的容器。使用此項目來檢查檔案許可、確認映像實際包含哪些檔案,以及手動執行遊戲伺服器可執行檔,以查看其報告的內容。如需連接至容器的指示,請參閱 連線至容器。
常見的部署問題
下列症狀常見於失敗或緩慢的部署,以及其一般原因。
- 容器會逐一啟動和結束。
-
如果容器的進入點無法執行,請檢查下列項目:
-
確認啟動指令碼和遊戲伺服器可執行檔在映像中標記為可執行檔。
-
確認可執行檔的 CPU 架構符合機群的執行個體類型。
-
檢查映像是否包含可執行檔所需的解譯器和共用程式庫。
如需建置Amazon GameLift Servers可執行之映像的相關資訊,請參閱 建置 的容器映像 Amazon GameLift Servers。
-
- 部署緩慢,但沒有失敗。
-
WITH_PROTECTION部署會在驗證期間和取代機群的容器時,等待受保護的遊戲工作階段結束。在將長時間部署視為失敗之前,請檢查機群的作用中遊戲工作階段。如需驗證等待時間的相關資訊,請參閱 驗證需要多長時間。
透過啟動新的部署來取消部署
若要取消部署並將機群返回其先前的組態,請在主控台中呼叫UpdateContainerFleet或編輯機群,以啟動可反轉變更的新部署。最常見的情況是新的容器群組定義版本,下列程序會還原。 會將機群在進行中的部署上上次作用中時使用的版本Amazon GameLift Servers記錄為 RollbackGameServerBinaryArn和 RollbackPerInstanceBinaryArn,因此您不需要找出要返回的版本。如果部署也變更了其他設定,例如日誌組態或連線連接埠範圍,請將這些設定設回相同的UpdateContainerFleet請求。
開始之前, AWS CLI 請為您的帳戶設定 ,並識別機群的主 AWS 區域。此程序需要進行中的部署和先前的容器群組定義版本才能還原。使用 list-fleet-deployments 尋找部署 ID。如需說明,請參閱追蹤部署狀態。
在命令中,將 fleet-id 取代為您的機群 ID、將 deployment-id 取代為進行中部署 ID,並將 fleet-home-region 取代為機群的主目錄 AWS 區域。
將進行中部署取代為先前的容器版本 (AWS CLI)
-
使用下列 AWS CLI 命令來取得要返回的版本:
aws gamelift describe-fleet-deployment \ --fleet-idfleet-id\ --deployment-iddeployment-id\ --regionfleet-home-region在回應中,
RollbackGameServerBinaryArn會保留機群上次作用中時使用的遊戲伺服器容器群組定義版本。如果機群具有每個執行個體的容器群組, 會RollbackPerInstanceBinaryArn保留該版本。 -
使用下列 AWS CLI 命令來啟動該版本的新部署。將
rollback-game-server-cgd-arn取代為步驟 1RollbackGameServerBinaryArn的值。如果機群具有每個執行個體的容器群組, 也會--per-instance-container-group-definition-name傳遞RollbackPerInstanceBinaryArn值。aws gamelift update-container-fleet \ --fleet-idfleet-id\ --game-server-container-group-definition-namerollback-game-server-cgd-arn\ --regionfleet-home-region -
確認先前的部署報告
CANCELLED狀態,且新的部署會在完成COMPLETE時報告。
注意
以這種方式取消部署不是立即停止。新的部署會執行與任何其他相同的步驟,包括驗證,因此機群需要一些時間來解決。機群在 之前成功執行的版本,通常會快速驗證。
相關主題
如需詳細資訊,請參閱下列主題。