Hoja de ruta de desarrollo para el alojamiento con contenedores administrados por Amazon GameLift Servers
Esta hoja de ruta describe cómo desarrollar una solución de alojamiento administrada por Amazon GameLift Servers para servidores de juegos en contenedor. Los contenedores administrados son solo una de las soluciones de alojamiento que ofrece Amazon GameLift Servers. Para obtener más información acerca de las opciones de alojamiento, consulte opciones de alojamiento de juegos de Amazon GameLift Servers.
Una solución de contenedores administrados por Amazon GameLift Servers tiene los siguientes componentes:
-
Una imagen de contenedor con la compilación del servidor de juegos, cargada en el repositorio privado de Amazon Elastic Container Registry (Amazon ECR). La compilación del servidor de juegos está integrada con el SDK del servidor de Amazon GameLift Servers y diseñada para ejecutarse en Linux.
-
Un servicio de backend que interactúa con el servicio Amazon GameLift Servers en nombre de los clientes de juegos. El servicio de backend utiliza la funcionalidad de la API de servicio de Amazon GameLift Servers, que forma parte del SDK de AWS.
-
Una cola de sesiones de juego de Amazon GameLift Servers u otro mecanismo de ubicación que procese las solicitudes de nuevas sesiones de juego, busque los servidores de juegos disponibles en todas las flotas y solicite al servidor de juegos que inicie una sesión de juego.
-
(Opcional) Un emparejador de FlexMatch para crear partidas multijugador y configurar sesiones de juego para ellas.
-
Una o más flotas de contenedores, que utilizan instancias de Amazon Elastic Compute Cloud (Amazon EC2) y están optimizadas para el alojamiento de juegos multijugador.
Esta hoja de ruta presenta una ruta simplificada para que el juego multijugador funcione correctamente con contenedores administrados por Amazon GameLift Servers. Cuando tenga los componentes necesarios, podrá continuar con la iteración del desarrollo del juego y personalizar la solución de alojamiento. A medida que se acerque el lanzamiento, consulte Preparativos para el lanzamiento con alojamiento en Amazon GameLift Servers: le resultará de ayuda a fin de preparar la solución de alojamiento para el uso en producción.
Acelere la incorporación con estas herramientas para contenedores administrados:
El kit básico para contenedores
agiliza la integración y la configuración de flotas. Añade características esenciales de administración de sesiones de juego al servidor de juegos y utiliza plantillas preconfiguradas para crear una flota de contenedores y una canalización de implementación automatizada para el servidor de juegos. Tras la implementación, utilice la consola de Amazon GameLift Servers y las herramientas de la API para supervisar el rendimiento de la flota, administrar las sesiones de juego y analizar las métricas. Los desarrolladores de Unreal Engine y Unity pueden utilizar los complementos de Amazon GameLift Servers
para integrar el servidor de juegos y crear una flota de contenedores desde el entorno de desarrollo del motor de juegos. Los flujos de trabajo guiados del complemento ayudan a crear una solución rápida y sencilla con alojamiento en la nube mediante contenedores administrados. Puede basarse en ellos para crear una solución de alojamiento personalizada para su juego.
Añada funciones al servidor de juegos para que pueda comunicarse con el servicio Amazon GameLift Servers cuando se implemente para el alojamiento.
-
Obtenga el SDK del servidor de Amazon GameLift Servers (versión 5.2 o superior) para su proyecto de juego. El SDK del servidor está disponible en C++, C# y Go. Descargue el SDK del servidor de Amazon GameLift Servers
. El SDK del servidor está disponible en C++, C# y Go. -
Modifique el código del servidor de juegos para añadir la funcionalidad del SDK del servidor. Para obtener instrucciones, consulte Preparación de un juego para su alojamiento con Amazon GameLift Servers. Como mínimo, haga lo siguiente:
-
Añada código para inicializar el SDK de Amazon GameLift Servers y establecer una conexión de WebSocket con el servicio Amazon GameLift Servers. Use la acción del SDK del servidor
InitSdk(). -
Añada código para indicar al servicio Amazon GameLift Servers que el proceso del servidor está listo para alojar sesiones de juego. Use la acción del SDK del servidor
ProcessReady(). -
Implemente las funciones de devolución de llamada
OnProcessTerminate()yOnStartGameSession()necesarias. Con estas funciones, los procesos del servidor de juegos pueden mantener una conexión con el servicio Amazon GameLift Servers, iniciar una sesión de juego cuando Amazon GameLift Servers lo solicite y responder a una petición para finalizar el proceso del servidor de juegos. -
Añada código para informar al servicio Amazon GameLift Servers cuando el proceso del servidor esté finalizando una sesión de juego. Use la acción del SDK del servidor
ProcessEnding().
-
-
Empaquete la compilación del servidor de juegos. Compile el servidor de juegos para que se ejecute en Linux. Prepare la compilación y otros archivos necesarios para ejecutar el servidor de juegos. Si está desarrollando en Windows, este paso puede implicar la configuración de un espacio de trabajo de Linux independiente o el uso de una herramienta como el subsistema de Windows para Linux (WSL). Necesitará un entorno Linux para probar la compilación del servidor de juegos, así como para crear y probar las imágenes de contenedor.
-
Pruebe la integración del servidor de juegos. Verifique que el servidor de juegos integrado pueda conectarse al servicio Amazon GameLift Servers y responder a las peticiones. Recomendamos configurar una flota sencilla de Amazon GameLift Servers Anywhere con una estación de trabajo local como host de pruebas, tal y como se describe en Configuración de pruebas locales con Amazon GameLift Servers Anywhere. Instale manualmente la compilación del servidor de juegos en el host de prueba e inicie un proceso del servidor. Utilice la CLI de AWS para solicitar una nueva sesión de juego y compruebe que el servicio Amazon GameLift Servers le pida correctamente al proceso del servidor que inicie una sesión de juego.
Una vez que haya integrado correctamente el servidor de juegos, cree una imagen de contenedor con el ejecutable del servidor de juegos. Almacénela en un repositorio de Amazon Elastic Container Registry (Amazon ECR) para usarla con Amazon GameLift Servers. Para obtener instrucciones detalladas, consulte Creación de una imagen de contenedor para Amazon GameLift Servers.
-
Obtenga la plantilla de Dockerfile para un contenedor de servidor de juegos (proporcionada por Amazon GameLift Servers). Modifique el archivo general de los archivos de compilación del servidor de juegos.
-
Creación de una imagen de contenedor del servidor de juegos. Si trabaja en un entorno Linux, utilice la herramienta Docker para crear la imagen.
-
Inserción de la imagen de contenedor en Amazon ECR. Cree un repositorio público o privado en Amazon ECR, utilizando la misma Cuenta de AWS y Región de AWS donde tiene previsto implementar la flota de contenedores. Inserte en él la imagen de contenedor.
-
Pruebe sus imágenes de contenedor con su flota de Anywhere (opcional). Es posible que desee probar sus imágenes de contenedor de forma local antes de implementarlas en una flota de contenedores alojada en la nube. Puede utilizar su flota de Amazon GameLift Servers Anywhere existente con una estación de trabajo local para hacer pruebas. Instale y ejecute el contenedor del servidor de juegos y compruebe que: (1) el servicio Amazon GameLift Servers solicita correctamente al proceso del servidor que inicie una sesión de juego; y que (2) un cliente de juego pueda conectarse a la sesión de juego.
Hasta ahora, ha trabajado con una flota de Anywhere autoadministrada para probar los componentes del juego y hacer iteraciones sobre ellos. Cuando disponga de una compilación operativa del servidor de juegos integrada con Amazon GameLift Servers, podrá empezar a configurar los recursos de alojamiento de flotas de contenedores administradas por Amazon GameLift Servers en la nube que necesitará para un entorno de producción.
-
Creación de definiciones de grupos de contenedores. Las definiciones de grupo de contenedores describen la arquitectura de contenedores de una flota e identifican qué imágenes de contenedor se deben implementar. Consulte Creación de una definición de grupo de contenedores para una flota de contenedores de Amazon GameLift Servers. Cree su definición de grupo de contenedores en la misma Región de AWS donde se almacenan las imágenes de contenedor. Para obtener más información sobre cómo elegir la ubicación de una flota, consulte Ubicaciones geográficas. Como mínimo, haga lo siguiente:
-
Cree una definición de grupo de contenedores de servidor de juegos.
-
Añada una definición de contenedor con una imagen de contenedor a su compilación del servidor de juegos.
-
Configure un rango de puertos para los procesos del servidor de juegos del contenedor.
-
-
Cree una flota de contenedores administrada. Cuando crea una flota, Amazon GameLift Servers comienza inmediatamente a implementar la compilación del servidor de juegos para el alojamiento. Puede configurar muchos elementos de una flota administrada. Para obtener instrucciones, consulte Creación de una flota de contenedores administrada por Amazon GameLift Servers. Como mínimo, haga lo siguiente:
-
Configure un rol de servicio de AWS Identity and Access Management (IAM) para la flota de contenedores. Consulte Configuración de un rol de servicio de IAM para Amazon GameLift Servers.
-
Especifique la definición de grupo de contenedores de servidor de juegos que desea implementar en las instancias de la flota.
-
Utilice los valores predeterminados cuando estén disponibles para todos los demás parámetros. Amazon GameLift Servers calcula algunos parámetros para una configuración óptima.
-
-
Añada las flotas de contenedores a la cola. En la cola de sesiones de juego, sustituya la flota de prueba de Anywhere por su flota de contenedores administrada.
-
Pruebe el alojamiento de juegos con las flotas de contenedores. En este punto, debería poder probar toda la solución. Inicie un cliente de juego y solicite una sesión de juego a través del servicio de backend. Obtenga información de conexión y conéctese a una sesión de juego en la flota de contenedores.
-
Itere las implementaciones de flota. Puede actualizar las definiciones de grupos de contenedores y las configuraciones de flota y, a continuación, implementar las actualizaciones en las flotas existentes.
Cree un método para que el cliente de juego solicite unirse a una sesión de juego, obtenga la información de conexión y, a continuación, se conecte directamente a una sesión de juego alojada. El método más común consiste en configurar una funcionalidad de servicio de backend que sirva de intermediario entre el cliente de juego y el servicio Amazon GameLift Servers. Esto protege los recursos de alojamiento y le aporta un mayor control sobre la ubicación de los jugadores en las sesiones de juego.
-
Desarrolle una funcionalidad de servicio de backend para el alojamiento. El servicio de backend se comunica con el servicio Amazon GameLift Servers y le envía datos de conexión a un cliente de juego. Esta funcionalidad incluye iniciar sesiones de juego, colocar a los jugadores en juegos y recuperar la información de las sesiones de juego. Para obtener instrucciones, consulte Preparación de un juego para su alojamiento con Amazon GameLift Servers. Como mínimo, haga lo siguiente:
-
Obtenga el SDK de AWS para Amazon GameLift Servers y añádalo al proyecto del servicio de backend. Consulte Recursos del SDK de Amazon GameLift Servers para servicios de cliente.
-
Añada código para inicializar un cliente de Amazon GameLift Servers y almacenar la configuración clave. Consulte Configuración de la API de Amazon GameLift Servers.
-
Añada funciones para llamar a la acción
CreateGameSession()de AWS SDK y enviar datos de conexión de la sesión de juego a un cliente de juego. Consulte Create a game session on a specific fleet.Llamar a
CreateGameSession()es un punto de partida muy práctico para solicitar nuevas sesiones de juego. Cuando disponga de un sistema de ubicación de sesiones de juego (consulte el paso 3), sustituirá ese código por una llamada aStartGameSessionPlacement()(o aStartMatchmaking()si utiliza FlexMatch).Para obtener orientación sobre el diseño de un servicio de backend, consulte Creación de un servicio de backend para Amazon GameLift Servers.
-
-
Añada una función en el cliente de juego que permita a los jugadores unirse a una sesión de juego alojada. El cliente de juego hace solicitudes al servicio de backend, no directamente a Amazon GameLift Servers. Cuando el servicio de backend proporciona la información de conexión de la sesión de juego, el cliente de juego se conecta directamente con la sesión de juego para empezar a jugar.
-
Pruebe la integración del cliente de juego. Puede utilizar su flota de Amazon GameLift Servers Anywhere existente con una estación de trabajo local para hacer pruebas. Utilice el nuevo servicio de backend para solicitar una nueva sesión de juego y compruebe que: (1) el servicio Amazon GameLift Servers le pide correctamente al proceso del servidor que inicie una sesión de juego y (2) que un cliente de juego pueda conectarse a la sesión de juego.
Personalice cómo desea que Amazon GameLift Servers procese las solicitudes de nuevas sesiones de juego y ubique los servidores de juego disponibles para alojarlos. Amazon GameLift Servers monitoriza automáticamente la disponibilidad de todos los servidores de juego en todas las flotas. Cuando un cliente de juego envía una solicitud para unirse a una sesión de juego, Amazon GameLift Servers busca la mejor ubicación posible en función de un conjunto de prioridades definidas, como el costo, la disponibilidad y un nivel mínimo de latencia.
-
Cree una cola de sesiones de juego para colocar una nueva sesión de juego con los servidores de juego disponibles. Las colas son el mecanismo principal para la ubicación de las sesiones de juego. Para obtener instrucciones, consulte Creación de una cola de sesión de juego.
-
Como mínimo, añada las flotas de Anywhere como destinos en la cola. Todos los demás ajustes son personalizaciones opcionales.
-
-
En el código del servicio de backend, convierta la llamada a
CreateGameSession()enStartGameSessionPlacement(). Consulte Create a game session in a multi-location queue. -
Cree un mecanismo para notificar a un cliente del juego cuando una sesión de juego ya se pueda unir. Durante el desarrollo, puede sondear el estado de las sesiones de juego con una llamada a
DescribeGameSessionPlacement. Sin embargo, antes de utilizar una cola para procesar grandes volúmenes, deberá activar las notificaciones de eventos. Consulte Configuración de la notificación de eventos para la ubicación de sesiones de juego.. -
Añada el emparejamiento de FlexMatch (opcional). Cree un conjunto de reglas de emparejamiento y una configuración de emparejamiento que se adapte a la cola de sesiones de juego. Para obtener información sobre cómo configurar un sistema de emparejamiento, consulte la Guía para desarrolladores de Amazon GameLift Servers FlexMatch.
-
Pruebe el sistema de ubicación. Puede utilizar su flota de Amazon GameLift Servers Anywhere existente con una estación de trabajo local para hacer pruebas. Utilice el servicio de backend para solicitar una nueva sesión de juego y compruebe que el servicio Amazon GameLift Servers solicite correctamente al proceso del servidor que inicie una sesión de juego.
Durante la preparación para el lanzamiento del juego, tendrá que afinar los recursos de alojamiento administrado. Estos son algunos de los factores en los que deberá pensar:
-
Optimice la configuración de su flota de contenedores. Consulte Personalización de una flota de contenedores de Amazon GameLift Servers.
Valore la posibilidad de añadir flotas de spot para ahorrar costos. Consulte Reducción de los costos de alojamiento de juegos con flotas de spot .
-
Si el servidor de juegos necesita comunicarse con otros recursos de AWS, configure los roles de IAM para administrar el acceso. Consulte Conexión de un servidor de juegos alojado en Amazon GameLift Servers a otros recursos de AWS.
Decida dónde desea ubicar geográficamente los servidores de juegos. Añada ubicaciones remotas a las flotas administradas. Consulte Personalizaciones de recursos de alojamiento.
Experimente con las opciones de ubicación de sesiones de juego para las flotas administradas, lo que incluye personalizar los ajustes de priorización. Consulte Personalización de colas de sesiones de juego.
-
Configure el escalado automático de la capacidad para satisfacer la demanda prevista de jugadores. Consulte Escalado de la capacidad de alojamiento de juegos con Amazon GameLift Servers.
-
Configure flotas en otras Regiones de AWS y modifique las colas y el escalado automático para manejar las conmutaciones por error en caso de que sea necesario.
-
Configure las herramientas de observabilidad del alojamiento, como los análisis y el registro. Consulte Supervisión de Amazon GameLift Servers.
-
Automatice las implementaciones de flota mediante la infraestructura como código (IaC). Consulte Administración de los recursos de alojamiento de Amazon GameLift Servers con CloudFormation.
Amazon GameLift Servers admite el uso de plantillas de AWS CloudFormation para cualquier configuración específica de la implementación. También puede utilizar AWS Cloud Development Kit (AWS CDK) para definir sus recursos de Amazon GameLift Servers. Para obtener más información acerca de AWS CDK, consulte la Guía para desarrolladores de AWS Cloud Development Kit (AWS CDK).
Para administrar la implementación de sus pilas de CloudFormation, le recomendamos utilizar herramientas y servicios de integración y entrega continuas (CI/CD), como AWS CodePipeline. Estas herramientas le ayudarán con la implementación automática y la aprobación cada vez que cree un archivo binario para el servidor de juegos. Con una herramienta o un servicio de CI/CD, la implementación de recursos para una nueva versión del servidor de juegos puede tener este aspecto:
-
Compilar y probar el archivo binario del servidor de juegos.
-
Cargar el archivo binario en Amazon GameLift Servers.
-
Implementar nuevas flotas con la nueva compilación.
-
Añadir las nuevas flotas a la lista de sesiones de juego y eliminar las flotas de la versión de compilación anterior.
-
Cuando las flotas de la versión anterior ya no alojen sesiones de juego activas, eliminar las pilas de CloudFormation de esas flotas.
-