View a markdown version of this page

Validierung und Fehlerbehebung bei Containerflotteneinsätzen - GameLift Amazon-Server

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Validierung und Fehlerbehebung bei Containerflotteneinsätzen

Eine Flottenbereitstellung, die in diesem Thema als Bereitstellung bezeichnet wird, ist der Prozess, bei dem die Container auf den Instances einer Containerflotte durch Container ersetzt werden, die die neuen Einstellungen der Flotte verwenden, z. B. eine neue Version der Containergruppen-Definition. Amazon GameLift Servers Anstatt alle laufenden Container auf einmal zu ersetzen, überprüft ein Deployment zunächst, ob die neuen Container Spielsitzungen hosten können, und ersetzt dann nach und nach die restlichen Container, um catch Änderungen zu erkennen, bevor sie für die gesamte Flotte bereitgestellt werden. Eine Containerflotte startet einen Einsatz in drei Situationen:

  • Wenn Sie eine Flotte mit einer Containergruppendefinition erstellen. Wenn Ihre CreateContainerFleetAnfrage eine Definition einer Spielserver-Containergruppe enthält, startet Fleet Creation eine Bereitstellung, bei der Ihre Container auf den neuen Instances der Flotte installiert werden. Wenn Sie eine Flotte ohne Container-Gruppendefinition erstellen, werden keine Instances bereitgestellt und die Flotte wird erst bereitgestellt, wenn Sie eine Gameserver-Containergruppen-Definition hinzufügen.

  • Wenn Sie die Containergruppendefinitionen oder andere Containereinstellungen der Flotte aktualisieren. UpdateContainerFleetstartet ein Deployment, wenn durch das Update die Container geändert werden, die von der Flotte betrieben werden, z. B. wenn Sie eine neue Version der Spielserver-Containergruppen-Definition angeben. Ein Update, das keine dieser Einstellungen ändert, startet keine Bereitstellung. Informationen darüber, mit welchen Einstellungen eine Bereitstellung gestartet wird, finden Sie unterAktualisiere ein GameLift Amazon-Server verwaltete Containerflotte.

  • Wenn Sie Standorte zu einer aktiven Flotte hinzufügen. Amazon GameLift Serversstartet eine Bereitstellung an den neuen Standorten mithilfe der konfigurierten Containergruppendefinitionen der Flotte. Bestehende Standorte werden nicht neu bereitgestellt. Sie können keine Standorte hinzufügen, während eine weitere Bereitstellung läuft.

Um die Details einer Bereitstellung einzusehen, rufen Sie DescribeFleetDeployment, was ein FleetDeploymentObjekt zurückgibt, auf. Es enthält die Bereitstellungs-ID, den Status und die Konfiguration sowie die Versionen der Container-Gruppendefinition, die bereitgestellt werden, und die Rollback-Versionen. Das DeploymentDetails.LatestDeploymentId Eigentum der Flotte gibt den letzten Einsatz an.

Anmerkung

Bereitstellungen gelten nur für verwaltete Containerflotten.

Konfigurieren Sie eine Bereitstellung

Bei einer Bereitstellung DeploymentConfigurationhandelt es sich um ein Regelwerk, das steuert, wie die Bereitstellung in der gesamten Flotte abläuft und was passiert, wenn sie fehlschlägt. Informationen zu den Werten und Standardwerten der einzelnen Einstellungen finden Sie DeploymentConfigurationin der Amazon GameLift ServersAPI-Referenz.

Sie legen die Bereitstellungskonfiguration fest, wenn Sie die Flotte in der Konsole aufrufen UpdateContainerFleet oder bearbeiten. CreateContainerFleetakzeptiert keine Bereitstellungskonfiguration, sodass bei der ersten Bereitstellung einer Flotte immer die Standardwerte verwendet werden.

Wie GameLift Amazon-Server validiert eine Bereitstellung

Wenn ein Einsatz beginnt, validiert er Amazon GameLift Servers zunächst die Spielserver-Containergruppen an jedem Standort der Flotte. Die neuen Container werden mit einem kleinen Teil der vorhandenen Kapazität der Flotte betrieben und überprüft, ob sie wieder funktionsfähig sind. Eine neue Spieleserver-Containergruppe ist fehlerfrei, wenn ein Spieleserver-Container anruft ProcessReady() und meldet, dass er bereit ist, Spielsitzungen zu hosten.

Bei dieser ersten Validierung werden Spieleserver-Containergruppen überprüft. Wenn Ihre Flotte auch eine Containergruppendefinition pro Instanz verwendet, Amazon GameLift Servers werden diese Gruppen nach der Aktualisierung der Spieleservergruppen aktualisiert. Amazon GameLift Serversüberprüft die Gruppen pro Instanz separat, bevor die Bereitstellung abgeschlossen ist. Sie verwenden nicht den Check des SpieleserversProcessReady().

Die Überprüfung schlägt fehl, wenn eine neue Gameserver-Containergruppe nicht wieder funktionsfähig ist, bevor sie Amazon GameLift Servers aufhört zu warten. Informationen zu häufigen Gründen und zu deren Untersuchung finden Sie unterDebuggen Sie eine beeinträchtigte Bereitstellung.

Schlägt die Überprüfung fehl, wird der Bereitstellungsstatus Amazon GameLift Servers angewendet ImpairmentStrategy und der Bereitstellungsstatus auf IMPAIRED (fürMAINTAIN) oder ROLLBACK_IN_PROGRESS (fürROLLBACK) gesetzt. Erst wenn die Validierung an einem Standort erfolgreich war, werden die verbleibenden Container, auf denen deine Spieleserver dort laufen, Amazon GameLift Servers ersetzt.

Wie lange dauert die Validierung

Die Validierung dauert länger, wenn die Kapazität, die für die Validierung Amazon GameLift Servers verwendet wird, das Hosten geschützter Spielsitzungen ist. Die Flotte NewGameSessionProtectionPolicy bestimmt den Standardschutz für neue Spielsitzungen. Gültige Werte sind NoProtection und FullProtection. Der Einsatz ProtectionStrategy bestimmt, ob der Einsatz diesem Schutz gerecht wird. Gültige Werte sind WITH_PROTECTION und IGNORE_PROTECTION.

Wenn die Flotte auf NewGameSessionProtectionPolicy eingestellt ist FullProtection und der Einsatz auf ProtectionStrategy eingestellt istWITH_PROTECTION, Amazon GameLift Servers kann ein längeres Validierungs-Timeout für geschützte Spielsitzungen beendet werden. Bei jeder anderen Kombination wird ein kürzeres Timeout verwendet.

Wichtig

Wenn Ihre neuen Container nie wieder funktionsfähig sind und die Flotte FullProtection bei einem WITH_PROTECTION Einsatz ausgelastet ist, kann der IN_PROGRESS Status des Einsatzes bis zum Ende der geschützten Spielsitzungen beibehalten werden, bevor ein Fehler gemeldet wird. Um ein schnelleres Signal zu erhalten, stellen Sie neue Container-Images bereit, IGNORE_PROTECTION während Sie sie testen, oder brechen Sie den Einsatz selbst ab. Anweisungen zum Stornieren einer Bereitstellung finden Sie unterBrechen Sie eine Bereitstellung ab, indem Sie eine neue starten.

Wenn du einzelne Spielsitzungen mit UpdateGameSessioneiner Flotte schütztNoProtection, deren NewGameSessionProtectionPolicy eigene Flotte ihre Wartezeit Amazon GameLift Servers nicht verlängert. Wenn diese Spielsitzungen nicht rechtzeitig enden, kann die Validierung fehlschlagen, obwohl die neue Konfiguration funktioniert.

Verfolgen Sie den Bereitstellungsstatus

Um einen Einsatz in der Amazon GameLift ServersKonsole zu verfolgen, öffnen Sie die Flotte und wählen Sie den Tab Bereitstellungen. Um sie mit dem AWS Command Line Interface (AWS CLI) zu verfolgen, suchen Sie list-fleet-deploymentsnach einer Bereitstellungs-ID und dann describe-fleet-deploymentnach den Details einer einzelnen Bereitstellung.

Informationen zu den Werten für den Bereitstellungsstatus und deren Bedeutung finden Sie DeploymentStatusin der Amazon GameLift ServersAPI-Referenz.

Debuggen Sie eine beeinträchtigte Bereitstellung

Ein beeinträchtigtes Deployment bedeutet, dass die neuen Container während der Validierung nicht wieder funktionsfähig waren: Kein ProcessReady() zuvor aufgerufener Spielserver-Container Amazon GameLift Servers hat aufgehört zu warten, oft weil ein Container beendet wurde oder nicht gestartet werden konnte. Die Ursache liegt normalerweise im Container-Image oder im Spieleserver. Finde heraus, warum der Container beendet wurde oder warum der Spieleserver nie als bereit gemeldet wurde.

Überprüfe das Flottenereignisprotokoll

Das Flottenereignisprotokoll zeichnet auf, was während des Einsatzes Amazon GameLift Servers beobachtet wurde. Sehen Sie es sich in der Konsole auf der Registerkarte Ereignisse der Flotte an oder rufen Sie an describe-fleet-events. Die folgenden Ereigniscodes sind für eine fehlgeschlagene Bereitstellung relevant:

  • GAME_SERVER_CONTAINER_GROUP_CRASHEDund PER_INSTANCE_CONTAINER_GROUP_CRASHED — eine Container-Gruppe wurde beendet oder konnte nicht gestartet werden. Wenn Amazon GameLift Servers der Exit-Code des Containers vorhanden ist, nimmt er den Code in die Ereignisnachricht auf.

  • GAME_SERVER_CONTAINER_GROUP_REPLACED_UNHEALTHYund INSTANCE_REPLACED_UNHEALTHY — hat eine Containergruppe oder eine Instance Amazon GameLift Servers ersetzt, die nicht mehr funktionsfähig ist. Diese können sich an allen Standorten der Flotte wiederholen, während eine Bereitstellung fehlschlägt.

  • SERVER_PROCESS_MISCONFIGURED_CONTAINER_PORT— Ein Spieleserver-Container hat einen Port verwendet, der nicht mit den in der Container-Gruppendefinition deklarierten Ports übereinstimmt.

  • LOCATION_STATE_UPDATINGund LOCATION_STATE_ACTIVE — diese gruppieren den Einsatz an jedem Standort, was dir hilft, andere Ereignisse mit dem Einsatz, der sie hervorgebracht hat, in Einklang zu bringen.

  • COMPUTE_LOG_UPLOAD_FAILED— Die Protokollerfassung für einen Container funktioniert nicht mehr, sodass die Protokolle aus diesem Container möglicherweise unvollständig sind oder fehlen.

Lesen Sie die Container-Logs

Eine Containerflotte LogConfiguration legt fest, wohin die Standardausgabe jedes Containers Amazon GameLift Servers gesendet wird: CLOUDWATCH (Standard),S3, oderNONE. Behalten Sie die Einstellung auf CLOUDWATCH oder bei, S3 sodass die Container-Ausgabe verfügbar ist, wenn eine Bereitstellung fehlschlägt. Wenn ein Container ausfällt, bevor dein Spieleserver gestartet wird, beispielsweise weil der Einstiegspunkt des Containers auf eine Datei verweist, die nicht im Bild enthalten ist, ist diese Ausgabe die einzige Aufzeichnung des Fehlers. Hinweise zur Container-Protokollierung finden Sie unterUnterschiede protokollieren: Verwaltete Flotten EC2 und Containerflotten.

Stellen Sie eine Connect zu einem defekten Container her

Wenn Sie die MAINTAIN Impairment-Strategie verwendet haben, können Sie eine Verbindung zu einem Container herstellen, in dem der Container Amazon GameLift Servers aufbewahrt wurde, und ihn direkt überprüfen. Verwende diese Option, um die Dateiberechtigungen zu überprüfen, zu überprüfen, welche Dateien das Bild tatsächlich enthält, und die ausführbare Datei des Spielservers manuell auszuführen, um zu sehen, was sie meldet. Anweisungen zum Herstellen einer Verbindung zu einem Container finden Sie unterConnect zu Containern herstellen.

Häufige Probleme bei der Bereitstellung

Die folgenden Symptome treten zusammen mit ihren üblichen Ursachen häufig bei fehlgeschlagenen oder langsamen Bereitstellungen auf.

Der Container wird sofort gestartet und wieder beendet.

Wenn der Einstiegspunkt des Containers nicht ausgeführt werden kann, überprüfen Sie Folgendes:

  • Vergewissere dich, dass das Startskript und die ausführbare Datei des Spielservers im Image als ausführbar markiert sind.

  • Vergewissern Sie sich, dass die CPU-Architektur der ausführbaren Datei dem Instance-Typ der Flotte entspricht.

  • Vergewissern Sie sich, dass das Image den Interpreter und die gemeinsam genutzten Bibliotheken enthält, die die ausführbare Datei benötigt.

Hinweise zum Erstellen eines Images, das ausgeführt Amazon GameLift Servers werden kann, finden Sie unterErstellen Sie ein Container-Image für GameLift Amazon-Server.

Die Bereitstellung ist langsam, aber nichts schlägt fehl.

Ein WITH_PROTECTION Einsatz wartet auf das Ende der geschützten Spielsitzungen, sowohl während der Validierung als auch beim Austausch der Container der Flotte. Überprüfe die aktiven Spielsitzungen der Flotte, bevor du einen längeren Einsatz als Fehlschlag einstufst. Informationen zu den Wartezeiten bei der Validierung finden Sie unterWie lange dauert die Validierung.

Brechen Sie eine Bereitstellung ab, indem Sie eine neue starten

Um eine Bereitstellung abzubrechen und die Flotte auf die vorherige Konfiguration zurückzusetzen, rufen Sie die Flotte in der Konsole auf UpdateContainerFleet oder bearbeiten Sie sie, um eine neue Bereitstellung zu starten, bei der die Änderungen rückgängig gemacht werden. Der häufigste Fall ist eine neue Version der Containergruppen-Definition, die mit dem folgenden Verfahren rückgängig gemacht wird. Amazon GameLift Serverszeichnet die Versionen auf, die die Flotte verwendet hat, als sie das letzte Mal bei der Bereitstellung aktiv warRollbackPerInstanceBinaryArn, als RollbackGameServerBinaryArn und, sodass Sie nicht herausfinden müssen, zu welcher Version Sie zurückkehren müssen. Wenn bei der Bereitstellung auch andere Einstellungen geändert wurden, z. B. die Protokollkonfiguration oder der Verbindungsportbereich, setzen Sie diese in derselben UpdateContainerFleet Anfrage wieder zurück.

Bevor Sie beginnen, konfigurieren Sie das AWS CLI für Ihr Konto und identifizieren Sie den Standort der Flotte AWS-Region. Für dieses Verfahren ist eine Bereitstellung in Bearbeitung und für die Wiederherstellung eine frühere Version der Container-Gruppendefinition erforderlich. Wird verwendetlist-fleet-deployments, um die Bereitstellungs-ID zu finden. Detaillierte Anweisungen finden Sie unter Verfolgen Sie den Bereitstellungsstatus.

Ersetzen Sie die Befehle fleet-id durch Ihre Flotten-ID, deployment-id durch die ID für den Einsatz in Bearbeitung und fleet-home-region durch die AWS-Region Heimatadresse der Flotte.

Um eine in Bearbeitung befindliche Bereitstellung durch eine frühere Containerversion zu ersetzen (AWS CLI)
  1. Verwenden Sie den folgenden AWS CLI Befehl, um die Version abzurufen, zu der Sie zurückkehren möchten:

    aws gamelift describe-fleet-deployment \ --fleet-id fleet-id \ --deployment-id deployment-id \ --region fleet-home-region

    RollbackGameServerBinaryArnEnthält in der Antwort die Version der Spielserver-Containergruppen-Definition, die die Flotte verwendet hat, als sie zuletzt aktiv war. Wenn die Flotte über eine Containergruppe pro Instanz verfügt, RollbackPerInstanceBinaryArn enthält sie diese Version.

  2. Verwenden Sie den folgenden AWS CLI Befehl, um eine neue Bereitstellung mit dieser Version zu starten. rollback-game-server-cgd-arnErsetzen Sie ihn durch den RollbackGameServerBinaryArn Wert aus Schritt 1. Wenn die Flotte über eine Containergruppe pro Instanz verfügt, geben Sie auch --per-instance-container-group-definition-name den RollbackPerInstanceBinaryArn Wert an.

    aws gamelift update-container-fleet \ --fleet-id fleet-id \ --game-server-container-group-definition-name rollback-game-server-cgd-arn \ --region fleet-home-region
  3. Vergewissern Sie sich, dass die frühere Bereitstellung CANCELLED den Status meldet und dass die neue Bereitstellung meldet, COMPLETE wenn sie abgeschlossen ist.

Anmerkung

Das Stornieren einer Bereitstellung auf diese Weise ist kein sofortiger Stopp. Der neue Einsatz durchläuft dieselben Schritte wie jeder andere Einsatz, einschließlich der Validierung, sodass es einige Zeit dauert, bis die Flotte fertig ist. Eine Version, die die Flotte zuvor erfolgreich ausgeführt hat, lässt sich in der Regel schnell validieren.

Weitere Informationen finden Sie unter den folgenden Themen.