View a markdown version of this page

Valide y solucione los problemas de los despliegues de flotas de contenedores - GameLift Servidores Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Valide y solucione los problemas de los despliegues de flotas de contenedores

El despliegue de una flota, denominado despliegue en este tema, es el proceso que se Amazon GameLift Servers utiliza para reemplazar los contenedores de las instancias de una flota de contenedores por contenedores que utilizan la nueva configuración de la flota, como una nueva versión de definición de grupos de contenedores. En lugar de reemplazar todos los contenedores en funcionamiento a la vez, un despliegue primero verifica que los nuevos contenedores pueden albergar sesiones de juego y, a continuación, reemplaza el resto gradualmente para atrapar los cambios incorrectos antes de que se desplieguen en toda la flota. Una flota de contenedores inicia su despliegue en tres situaciones:

  • Al crear una flota con una definición de grupo de contenedores. Si su CreateContainerFleetsolicitud incluye una definición de grupo de contenedores de servidores de juegos, la creación de la flota inicia una implementación que instala los contenedores en las nuevas instancias de la flota. Si creas una flota sin una definición de grupo de contenedores, no se despliega ninguna instancia y la flota no se despliega hasta que añadas una definición de grupo de contenedores de servidores de juegos.

  • Al actualizar las definiciones de grupos de contenedores de la flota u otros ajustes de contenedores. UpdateContainerFleetinicia un despliegue cuando la actualización cambia los contenedores que gestiona la flota, por ejemplo, cuando se especifica una nueva versión de definición de grupo de contenedores para servidores de juegos. Una actualización que no modifique ninguno de estos ajustes no iniciará un despliegue. Para obtener información sobre los ajustes que inician una implementación, consulteActualizar un GameLift Servidores Amazon flota de contenedores gestionada.

  • Al añadir ubicaciones a una flota activa. Amazon GameLift Serversinicia un despliegue en las nuevas ubicaciones utilizando las definiciones de grupos de contenedores configuradas en la flota. Las ubicaciones existentes no se redistribuyen. No puedes añadir ubicaciones mientras hay otra implementación en curso.

Para ver los detalles de una implementación, llama a DescribeFleetDeployment, que devuelve un FleetDeploymentobjeto. Incluye el identificador de despliegue, el estado y la configuración, junto con las versiones de definición de grupos de contenedores que se están implementando y las versiones de reversión. La DeploymentDetails.LatestDeploymentId propiedad de la flota identifica su despliegue más reciente.

nota

Los despliegues se aplican únicamente a las flotas de contenedores gestionadas.

Configure un despliegue

El de una implementación DeploymentConfigurationes el conjunto de reglas que controlan cómo se desarrolla la implementación en toda la flota y qué sucede si falla. Para obtener información sobre los valores y los valores predeterminados de cada configuración, consulta la referencia DeploymentConfigurationde la Amazon GameLift Servers API.

La configuración de despliegue se establece al llamar UpdateContainerFleet o editar la flota en la consola. CreateContainerFleetno acepta una configuración de despliegue, por lo que el primer despliegue de una flota siempre utiliza los valores predeterminados.

Cómo GameLift Servidores Amazon valida una implementación

Cuando se inicia un despliegue, Amazon GameLift Servers primero valida los grupos de contenedores de servidores del juego en cada una de las ubicaciones de la flota. Utiliza los nuevos contenedores en una pequeña parte de la capacidad actual de la flota y comprueba que estén en buen estado. Un nuevo grupo de contenedores de servidores de juegos está en buen estado cuando un contenedor de servidores de juegos llama ProcessReady() para informar que está listo para albergar sesiones de juego.

Esta validación inicial comprueba los grupos de contenedores de servidores de juegos. Si tu flota también usa una definición de grupo de contenedores por instancia, Amazon GameLift Servers actualiza esos grupos después de actualizar los grupos de servidores de juegos. Amazon GameLift Serverscomprueba los grupos de instancias por separado antes de que finalice la implementación; no utilizan la verificación del servidor del ProcessReady() juego.

La validación falla si un nuevo grupo de contenedores de servidores de juegos no funciona correctamente antes de que Amazon GameLift Servers deje de esperar. Para obtener información sobre los motivos más comunes y cómo investigarlos, consulteDepure una implementación defectuosa.

Si la validación falla, Amazon GameLift Servers aplica la implementación ImpairmentStrategy y establece el estado de la implementación en IMPAIRED (paraMAINTAIN) o ROLLBACK_IN_PROGRESS (paraROLLBACK). Solo después de que la validación se realice correctamente en una ubicación, se Amazon GameLift Servers reemplazarán los contenedores restantes en los que se ejecutan los servidores de juegos en esa ubicación.

¿Cuánto tarda la validación

La validación tarda más tiempo cuando la capacidad que se Amazon GameLift Servers utiliza para la validación aloja sesiones de juego protegidas. La flota NewGameSessionProtectionPolicy determina la protección predeterminada para las nuevas sesiones de juego. Los valores válidos son NoProtection y FullProtection. El despliegue ProtectionStrategy determina si el despliegue respeta esa protección. Los valores válidos son WITH_PROTECTION y IGNORE_PROTECTION.

Cuando la flota se ha NewGameSessionProtectionPolicy configurado FullProtection y el despliegue se ha ProtectionStrategy establecido enWITH_PROTECTION, Amazon GameLift Servers se prolonga el tiempo de espera de validación para que finalicen las sesiones de juego protegidas. Con cualquier otra combinación, utiliza un tiempo de espera más corto.

importante

Si tus nuevos contenedores nunca se ponen en buen estado y la flota los utiliza FullProtection con un WITH_PROTECTION despliegue, el despliegue puede permanecer en su IN_PROGRESS estado hasta que finalicen las sesiones de juego protegidas antes de que se produzca un error. Para obtener una señal más rápida, despliega nuevas imágenes de contenedores IGNORE_PROTECTION mientras las pruebas o cancela el despliegue tú mismo. Para obtener instrucciones sobre cómo cancelar un despliegue, consulteCancele un despliegue iniciando uno nuevo.

Si proteges sesiones de juego individuales con UpdateGameSessionuna flota NewGameSessionProtectionPolicy cuya NoProtection flota Amazon GameLift Servers no prolonga su espera. Si esas sesiones de juego no terminan a tiempo, la validación puede fallar aunque la nueva configuración funcione.

Realiza un seguimiento del estado de despliegue

Para realizar un seguimiento de un despliegue en la Amazon GameLift Serversconsola, abre la flota y selecciona la pestaña Despliegues. Para rastrearlo con la tecla AWS Command Line Interface (AWS CLI), utilice esta opción list-fleet-deploymentspara buscar un ID de despliegue y, a continuación, describe-fleet-deploymentpara ver los detalles de un único despliegue.

Para obtener información sobre los valores del estado de la implementación y lo que significa cada uno de ellos, consulta DeploymentStatusla referencia de la Amazon GameLift Servers API.

Depure una implementación defectuosa

Un despliegue deficiente significa que los nuevos contenedores no se han mantenido en buen estado durante la validación: ningún contenedor del servidor del juego al que se haya llamado ProcessReady() antes Amazon GameLift Servers dejó de esperar, a menudo porque un contenedor salió o no se pudo iniciar. La causa suele estar en la imagen del contenedor o en el servidor del juego. Descubre por qué salió el contenedor o por qué el servidor del juego nunca informó que estaba listo.

Revisa el registro de eventos de la flota

El registro de eventos de la flota registra lo Amazon GameLift Servers observado durante el despliegue. Véalo en la pestaña Eventos de la flota en la consola o llame por teléfono describe-fleet-events. Los siguientes códigos de evento son relevantes para un despliegue fallido:

  • GAME_SERVER_CONTAINER_GROUP_CRASHEDyPER_INSTANCE_CONTAINER_GROUP_CRASHED: un grupo de contenedores salió o no se pudo iniciar. Cuando Amazon GameLift Servers tiene el código de salida del contenedor, lo incluye en el mensaje del evento.

  • GAME_SERVER_CONTAINER_GROUP_REPLACED_UNHEALTHYyINSTANCE_REPLACED_UNHEALTHY: Amazon GameLift Servers reemplazó un grupo de contenedores o una instancia que no estaba en buen estado. Estos problemas pueden repetirse en todas las ubicaciones de la flota mientras se produce un error en el despliegue.

  • SERVER_PROCESS_MISCONFIGURED_CONTAINER_PORT— el contenedor de un servidor de juegos utilizaba un puerto que no coincidía con los puertos declarados en la definición del grupo de contenedores.

  • LOCATION_STATE_UPDATINGyLOCATION_STATE_ACTIVE: agrupan el despliegue en cada ubicación, lo que te ayuda a alinear otros eventos con el despliegue que los produjo.

  • COMPUTE_LOG_UPLOAD_FAILED— la recopilación de registros de un contenedor dejó de funcionar, por lo que es posible que los registros de ese contenedor estén incompletos o falten.

Lea los registros del contenedor

LogConfigurationLos conjuntos de una flota de contenedores Amazon GameLift Servers a dónde se envía la salida estándar de cada contenedor: CLOUDWATCH (predeterminado)S3, oNONE. Manténgalo configurado para CLOUDWATCH S3 que la salida de contenedores esté disponible cuando falle un despliegue. Si un contenedor falla antes de que el servidor de juegos comience a funcionar, por ejemplo, porque el punto de entrada del contenedor hace referencia a un archivo que no aparece en la imagen, este resultado es el único registro del error. Para obtener información sobre el registro de contenedores, consulteDiferencias de registro: flotas gestionadas EC2 y flotas de contenedores.

Conectarse a un contenedor averiado

Si utilizaste la estrategia de MAINTAIN deterioro, puedes conectarte a un contenedor que Amazon GameLift Servers guardara e inspeccionarlo directamente. Utilízalo para comprobar los permisos de los archivos, confirmar qué archivos contiene realmente la imagen y ejecutar manualmente el ejecutable del servidor del juego para ver de qué informa. Para obtener instrucciones sobre cómo conectarse a un contenedor, consulteConéctese a contenedores.

Problemas comunes de implementación

Los siguientes síntomas son comunes en las implementaciones lentas o fallidas, junto con sus causas habituales.

El contenedor arranca y sale inmediatamente, una y otra vez.

Si el punto de entrada del contenedor no puede funcionar, compruebe lo siguiente:

  • Comprueba que el script de inicio y el ejecutable del servidor del juego estén marcados como ejecutables en la imagen.

  • Confirma que la arquitectura de la CPU del ejecutable coincide con el tipo de instancia de la flota.

  • Comprueba que la imagen contenga el intérprete y las bibliotecas compartidas que necesita el ejecutable.

Para obtener información sobre cómo crear una imagen que Amazon GameLift Servers se pueda ejecutar, consulteCree una imagen de contenedor para GameLift Servidores Amazon.

La implementación es lenta, pero no falla nada.

Un WITH_PROTECTION despliegue espera a que finalicen las sesiones de juego protegidas, tanto durante la validación como cuando reemplaza los contenedores de la flota. Comprueba las sesiones de juego activas de la flota antes de considerar un despliegue prolongado como un error. Para obtener información sobre los tiempos de espera para la validación, consulte¿Cuánto tarda la validación.

Cancele un despliegue iniciando uno nuevo

Para cancelar un despliegue y devolver la flota a su configuración anterior, llama UpdateContainerFleet o edita la flota en la consola para iniciar un nuevo despliegue que anule los cambios. El caso más común es una nueva versión de definición de grupo de contenedores, que se revierte con el siguiente procedimiento. Amazon GameLift Serversregistra las versiones que utilizó la flota la última vez que estuvo activa en el despliegue en curso RollbackGameServerBinaryArn yRollbackPerInstanceBinaryArn, de esta forma, no tendrá que decidir a qué versión volver. Si la implementación también modificó otros ajustes, como la configuración del registro o el rango de puertos de conexión, vuelve a configurarlos en la misma UpdateContainerFleet solicitud.

Antes de empezar, configúrela AWS CLI para su cuenta e identifique el lugar de origen de la flota Región de AWS. Este procedimiento requiere una implementación en curso y una versión anterior de la definición del grupo de contenedores para restaurarlo. list-fleet-deploymentsUtilícelo para buscar el ID de despliegue. Para obtener instrucciones, consulte Realiza un seguimiento del estado de despliegue.

En los comandos, fleet-id sustitúyalo por el identificador de tu flota, deployment-id por el identificador de despliegue en curso y fleet-home-region por el de origen Región de AWS de la flota.

Para reemplazar un despliegue en curso por una versión de contenedor anterior (AWS CLI)
  1. Use el siguiente AWS CLI comando para obtener la versión a la que desea volver:

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

    En la respuesta, RollbackGameServerBinaryArn contiene la versión de definición del grupo de contenedores del servidor del juego que usó la flota la última vez que estuvo activa. Si la flota tiene un grupo de contenedores por instancia, RollbackPerInstanceBinaryArn conserva esa versión.

  2. Use el siguiente AWS CLI comando para iniciar una nueva implementación con esa versión. rollback-game-server-cgd-arnSustitúyalo por el RollbackGameServerBinaryArn valor del paso 1. Si la flota tiene un grupo de contenedores por instancia, --per-instance-container-group-definition-name añada también el RollbackPerInstanceBinaryArn valor.

    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. Confirme que la implementación anterior informe sobre el CANCELLED estado y que la nueva implementación informe COMPLETE cuando finalice.

nota

Cancelar una implementación de esta manera no es una interrupción inmediata. El nuevo despliegue sigue los mismos pasos que cualquier otro, incluida la validación, por lo que la flota tarda algún tiempo en liquidarse. Por lo general, una versión que la flota utilizaba correctamente se valida rápidamente.

Para obtener más información, consulte los siguientes temas.