Roteiro de desenvolvimento para hospedagem com contêineres gerenciados pelo Amazon GameLift Servers
Esse roteiro orienta você sobre como desenvolver uma solução de hospedagem gerenciada pelo Amazon GameLift Servers para seus servidores de jogos conteinerizados. Os contêineres gerenciados são apenas uma solução de hospedagem oferecida pelo Amazon GameLift Servers. Para obter mais informações sobre opções de hospedagem, consulte Opções de hospedagem de jogos do Amazon GameLift Servers.
Uma solução de contêiner gerenciado com o Amazon GameLift Servers tem os seguintes componentes:
-
Uma imagem de contêiner com a compilação do seu servidor do jogo, carregada no repositório privado do Amazon Elastic Container Registry (Amazon ECR). A versão do servidor de jogos é integrada ao SDK do servidor para Amazon GameLift Servers e criada para ser executada no Linux.
-
Um serviço de backend que interage com o serviço Amazon GameLift Servers em nome de seus clientes de jogos. O serviço de backend usa a funcionalidade de serviço de serviço de serviço para o Amazon GameLift Servers, que faz parte do SDK da AWS.
-
Uma fila de sessões de jogo do Amazon GameLift Servers ou outro mecanismo de posicionamento que processa solicitações de novas sessões de jogo, procura servidores de jogos disponíveis em todas as frotas e solicita que um servidor de jogos inicie uma sessão de jogo.
-
(Opcional) Um matchmaker do FlexMatch para criar partidas multijogador e configurar sessões de jogo para elas.
-
Uma ou mais frotas de contêineres, que usam instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e são otimizadas para hospedagem de jogos multijogador.
Esse roteiro apresenta um caminho simplificado para colocar os servidores de jogos em contêineres em funcionamento com com contêineres gerenciados pelo Amazon GameLift Servers. Depois de configurar os componentes necessários, você pode continuar a iterar no desenvolvimento de jogos e personalizar a solução de hospedagem. À medida que você se aproxima do lançamento, consulte Preparar para o início com hospedagem do Amazon GameLift Servers para obter ajuda na preparação da solução de hospedagem para uso em nível de produção.
Acelere a integração com essas ferramentas para contêineres gerenciados:
O kit inicial de contêineres
agiliza a integração e a configuração da frota. Ele adiciona atributos essenciais de gerenciamento de sessões de jogos ao seu servidor de jogos e usa modelos pré-configurados para criar uma frota de contêineres e um pipeline de implantação automatizado para seu servidor de jogos. Após a implantação, use o console do Amazon GameLift Servers e as ferramentas de API para monitorar o desempenho da frota, gerenciar sessões de jogo e analisar métricas. Para desenvolvedores do Unreal Engine e Unity, use os plug-ins do Amazon GameLift Servers
para integrar seu servidor de jogos e criar uma frota de contêineres de dentro do ambiente de desenvolvimento do seu mecanismo de jogo. Os fluxos de trabalho guiados do plug-in ajudam você a criar uma solução rápida e simples com hospedagem baseada em nuvem usando contêineres gerenciados. Você pode desenvolver essa base para criar uma solução de hospedagem personalizada para seu jogo.
Adicione a funcionalidade ao servidor de jogos para que ele possa se comunicar com o serviço do Amazon GameLift Servers quando for implantado para hospedagem.
-
Obtenha o SDK (versão 5.2 ou maior) do servidor para o Amazon GameLift Servers para o projeto de jogo. O SDK do servidor está disponível em C++, C# e Go. Faça download do SDK do servidor para o Amazon GameLift Servers.
O SDK do servidor está disponível em C++, C# e Go. -
Modifique o código do servidor de jogos para adicionar a funcionalidade do SDK do servidor. Para obter orientações, consulte Prepare um jogo para hospedagem com o Amazon GameLift Servers. No mínimo, faça o seguinte:
-
Adicione código para inicializar o SDK do Amazon GameLift Servers e estabelecer uma conexão do WebSocket com o serviço do Amazon GameLift Servers. Use a ação do SDK do servidor
InitSdk(). -
Adicione o código para informar ao serviço do Amazon GameLift Servers quando o processo do servidor estiver pronto para hospedar sessões de jogo. Use a ação do SDK do servidor
ProcessReady(). -
Implemente as funções de retorno de chamada necessárias:
OnStartGameSession()eOnProcessTerminate(). Com essas funções, os processos do servidor de jogos podem manter uma conexão com o serviço do Amazon GameLift Servers, iniciar uma sessão de jogo quando solicitado pelo Amazon GameLift Servers e responder a uma solicitação para encerrar o processo do servidor de jogos. -
Adicione o código para informar ao serviço do Amazon GameLift Servers quando o processo do servidor estiver encerrando uma sessão de jogo. Use a ação do SDK do servidor
ProcessEnding().
-
-
Empacote a versão do servidor de jogos. Crie seu servidor de jogos para rodar no Linux. Prepare a compilação e outros arquivos necessários para executar o servidor do jogo. Se você estiver desenvolvendo no Windows, essa etapa pode envolver a configuração de um espaço de trabalho Linux separado ou o uso de uma ferramenta como o subsistema Windows para Linux (WSL). Você precisará de um ambiente Linux para testar a compilação do seu servidor de jogos e também para criar e testar suas imagens de contêiner.
-
Teste a integração do servidor de jogos. Verifique se o servidor de jogos integrado pode se conectar ao serviço do Amazon GameLift Servers e responder às solicitações. Recomendamos configurar uma frota simples do Amazon GameLift Servers Anywhere com uma estação de trabalho local como host de teste, conforme descrito em Configurar testes locais com o Amazon GameLift Servers Anywhere. Instale a compilação do servidor de jogos no host de teste e inicie um processo no servidor. Use a CLI da AWS para solicitar uma nova sessão de jogo e verificar se o serviço do Amazon GameLift Servers solicita com sucesso que o processo do servidor inicie uma sessão de jogo.
Depois de integrar com sucesso o servidor de jogos, crie uma imagem de contêiner com o executável do seu servidor de jogos. Armazene em um repositório privado do Amazon Elastic Container Registry (Amazon ECR) para uso com o Amazon GameLift Servers. Para ter instruções detalhadas, consulte Criar uma imagem de contêiner para o Amazon GameLift Servers.
-
Obtenha o modelo Dockerfile para um contêiner de servidor de jogos (fornecido pelo Amazon GameLift Servers). Modifique o arquivo para os arquivos de compilação do seu servidor de jogos.
-
Construa uma imagem de contêiner de servidores de jogos. Trabalhando em um ambiente Linux, use a ferramenta Docker para criar sua imagem.
-
Envie sua imagem de contêiner no Amazon ECR. Crie um repositório público ou privado no Amazon ECR, usando as mesmas Conta da AWS e Região da AWS onde você planeja implantar sua frota de contêineres. Envie a imagem do seu contêiner a ele.
-
Teste suas imagens de contêiner usando sua frota Anywhere (opcional). Talvez seja bom testar suas imagens de contêiner localmente antes de implantá-las em uma frota de contêineres hospedada na nuvem. Você pode usar a frota do Amazon GameLift Servers Anywhere existente com uma estação de trabalho local para testes. Instale e execute o contêiner do servidor de jogos e verifique se: (1) o serviço do Amazon GameLift Servers solicita com sucesso que o processo do servidor inicie uma sessão de jogo e (2) um cliente de jogo pode se conectar à sessão de jogo.
Até agora, você trabalhou com uma frota Anywhere autogerenciada para testar e iterar os componentes do jogo. Quando você tem uma versão de servidor de jogos funcional integrada para o Amazon GameLift Servers, você pode começar a configurar a frota de contêineres gerenciada pelo Amazon GameLift Servers baseada em nuvem que hospeda os recursos necessários para um ambiente de produção.
-
Criar definições de grupos de contêineres. As definições de grupos de contêineres descrevem a arquitetura de contêineres de uma frota e identificam quais imagens de contêiner devem ser implantadas. Consulte Crie uma definição de grupo de contêineres para uma frota de contêineres do Amazon GameLift Servers. Crie sua definição de grupo de contêineres na mesma Região da AWS em que as imagens do contêiner são armazenadas. Para saber mais sobre como escolher a localização da frota, consulte Localizações geográficas. No mínimo, faça o seguinte:
-
Selecione uma definição de grupo de contêineres do servidor de jogos.
-
Adicione uma definição de contêiner com uma imagem de contêiner na versão do seu servidor de jogo.
-
Configure um intervalo de portas para os processos do servidor de jogos do contêiner.
-
-
Crie uma frota de contêineres gerenciada. Quando você cria uma frota, o Amazon GameLift Servers começa imediatamente a implantar a compilação de servidor de jogos para hospedagem. Você pode configurar vários aspectos de uma frota gerenciada. Para obter orientações, consulte Crie uma frota de contêineres gerenciada por Amazon GameLift Servers. No mínimo, faça o seguinte:
-
Configure um perfil de serviço (IAM) AWS Identity and Access Management para a frota de contêineres. Consulte Configurar um perfil de serviço do IAM para o Amazon GameLift Servers.
-
Especifique a definição do grupo de contêineres do servidor de jogos para implantar nas instâncias da frota.
-
Use valores padrão quando disponíveis para todos os outros parâmetros. O Amazon GameLift Servers calcula alguns parâmetros para uma configuração ideal.
-
-
Adicione as frotas de contêineres à sua fila. Na fila de sessões de jogo, substitua as frotas de teste Anywhere por suas frotas de contêineres gerenciadas.
-
Teste a hospedagem de jogos com suas frotas de contêineres. Neste ponto você deve poder testar a solução inteira. Inicie um cliente de jogo e solicite uma sessão de jogo por meio do serviço de backend. Obtenha informações de conexão e conecte-se a uma sessão de jogo na frota de contêineres.
-
Itere as implantações de sua frota. Você pode atualizar as definições de grupos de contêineres e as configurações da frota e, em seguida, implantar atualizações nas frotas existentes.
Crie uma forma do cliente de jogo solicitar a participação em uma sessão de jogo, obter informações de conexão e conectar-se diretamente a uma sessão de jogo hospedada. A abordagem mais comum é configurar a funcionalidade do serviço de backend que serve como intermediário entre o cliente do jogo e o serviço do Amazon GameLift Servers. Essa abordagem protege os recursos de hospedagem e oferece maior controle sobre como os jogadores são colocados nas sessões de jogo.
-
Crie uma funcionalidade de serviço de backend para hospedagem. O serviço de backend se comunica com o serviço do Amazon GameLift Servers e fornece as informações de conexão para um cliente de jogo. Essa funcionalidade inclui iniciar sessões de jogo, colocar jogadores em jogos e recuperar informações da sessão de jogo. Para obter orientações, consulte Prepare um jogo para hospedagem com o Amazon GameLift Servers. No mínimo, faça o seguinte:
-
Obtenha o SDK da AWS para o Amazon GameLift Servers e adicione-o ao projeto de serviço de backend. Consulte os recursos do SDK do Amazon GameLift Servers para serviços de cliente.
-
Adicione código para inicializar um cliente Amazon GameLift Servers e armazenar as principais configurações. Consulte Configure a Amazon GameLift Servers API..
-
Adicione a funcionalidade para chamar a ação
CreateGameSession()do SDK da AWS e fornecer informações de conexão da sessão de jogo a um cliente de jogo. Consulte Criar uma sessão de jogo em uma frota específica.Chamar
CreateGameSession()é um ponto de partida conveniente para solicitar novas sessões de jogo. Depois de instalar um sistema de posicionamento de sessões de jogo (consulte a Etapa 3), você substituirá esse código por uma chamada paraStartGameSessionPlacement()(ouStartMatchmaking(), se estiver usando o FlexMatch).Para obter orientação sobre como projetar o serviço de backend, consulte Crie um serviço de backend para Amazon GameLift Servers.
-
-
Adicione a funcionalidade ao cliente de jogo que permite que os jogadores participem de uma sessão de jogo hospedada. O cliente de jogo faz solicitações para o serviço de backend, mas não diretamente para o Amazon GameLift Servers. Depois que o serviço de backend fornece as informações de conexão da sessão do jogo, o cliente de jogo se conecta diretamente à sessão do jogo para jogar.
-
Teste a integração do cliente de jogo. Você pode usar a frota do Amazon GameLift Servers Anywhere existente com uma estação de trabalho local para testes. Utilize o novo serviço de backend para solicitar uma nova sessão de jogo e verifique se: (1) o serviço do Amazon GameLift Servers solicita com sucesso que o processo do servidor inicie uma sessão de jogo e (2) um cliente de jogo pode se conectar à sessão de jogo.
Personalize como você deseja que o Amazon GameLift Servers processe as solicitações de novas sessões de jogo e localize servidores de jogos disponíveis para hospedá-las. O Amazon GameLift Servers rastreia automaticamente a disponibilidade de todos os servidores de jogos em todas as frotas. Quando um cliente de jogo envia uma solicitação para participar de uma sessão de jogo, o Amazon GameLift Servers busca o “melhor posicionamento possível” com base em um conjunto de prioridades definidas, como latência mínima, custo e disponibilidade.
-
Crie uma fila de sessões de jogo para alocar uma nova sessão de jogo em servidores de jogos disponíveis. As filas são o principal mecanismo para posicionamento de sessões de jogo. Para obter orientações, consulte Criar uma fila de sessões de jogo.
-
No mínimo, adicione suas frotas Anywhere como destinos na fila. Todas as outras configurações são personalizações opcionais.
-
-
No código de serviço de backend, converta a chamada
CreateGameSession()emStartGameSessionPlacement(). Consulte Criar uma sessão de jogo em uma fila com vários locais. -
Crie um mecanismo para notificar um cliente de jogo quando uma sessão de jogo estiver pronta para ser iniciada. Durante o desenvolvimento, você pode consultar o status da sessão do jogo usando uma chamada para
DescribeGameSessionPlacement. No entanto, antes de usar uma fila para processar grandes volumes, você precisará ativar as notificações de eventos. Consulte Configurar notificações de eventos para o posicionamento de sessões de jogo. -
Adicionar criação de partidas do FlexMatch (opcional). Crie um conjunto de regras de criação de partidas e crie uma configuração de criação de partidas para trabalhar com sua fila de sessões de jogo. Para obter orientação sobre como configurar um sistema de criação de partidas, consulte o guia do desenvolvedor do Amazon GameLift Servers FlexMatch.
-
Teste o sistema de posicionamento. Você pode usar a frota do Amazon GameLift Servers Anywhere existente com uma estação de trabalho local para testes. Use o serviço de backend para solicitar uma nova sessão de jogo e verificar se o serviço do Amazon GameLift Servers solicita com sucesso que o processo do servidor inicie uma sessão de jogo.
Ao se preparar para o lançamento do jogo, você precisará ajustar seus recursos de hospedagem gerenciada. Algumas das decisões a serem consideradas incluem:
-
Otimize a configuração da sua frota de contêineres. Consulte Personalizar uma frota de contêineres do Amazon GameLift Servers.
Considere adicionar frotas spot para reduzir custos. Consulte Reduza os custos de hospedagem de jogos com frotas Spot .
-
Se o servidor do jogo precisar comunicar outros recursos da AWS, configure os perfis do IAM para gerenciar o acesso. Consulte Conecte seu servidor de jogos hospedado pelo Amazon GameLift Servers a outros recursos da AWS.
Determine onde você deseja posicionar geograficamente os servidores de jogo. Adicione locais remotos às suas frotas gerenciadas. Consulte Personalizações dos recursos de hospedagem.
Experimente as opções de posicionamento de sessões de jogo para frotas gerenciadas, incluindo a personalização das configurações de priorização. Consulte Personalizar uma fila de sessões de jogo.
-
Configure o ajuste de escala automático da capacidade para atender à demanda esperada dos jogadores. Consulte Escalar capacidade de hospedagem de jogos com o Amazon GameLift Servers.
-
Crie frotas em outras Regiões da AWS e modifique as filas e o ajuste de escala automático para lidar com failovers, conforme necessário.
-
Configure ferramentas de observabilidade de hospedagem, incluindo análises e registros em log. Consulte Como monitorar o Amazon GameLift Servers.
-
Automatize as implantações de suas frotas usando infraestrutura como código (IaC). Consulte Gerencie recursos de hospedagem do Amazon GameLift Servers usando CloudFormation.
O Amazon GameLift Servers oferece suporte para o uso de modelos do AWS CloudFormation para qualquer configuração específica da implantação. Também é possível usar o AWS Cloud Development Kit (AWS CDK) para definir os recursos do Amazon GameLift Servers. Para obter mais informações sobre o AWS CDK, consulte o Guia do desenvolvedor do AWS Cloud Development Kit (AWS CDK).
Para gerenciar a implantação de suas pilhas do CloudFormation, é recomendável o uso de ferramentas e serviços de integração e entrega contínuas (CI/CD), como o AWS CodePipeline. Essas ferramentas ajudam você a implantar automaticamente ou com aprovação sempre que você cria o binário do servidor de jogos. Com uma ferramenta ou serviço de CI/CD, a implantação de recursos para uma nova versão do servidor de jogos pode ser assim:
-
Compile e teste o binário do servidor de jogos.
-
Faça o upload do binário para Amazon GameLift Servers.
-
Implante novas frotas com a nova compilação.
-
Adicione as novas frotas à fila de sessões de jogo e remova as frotas com a versão de compilação anterior.
-
Quando as frotas com a compilação anterior não estiverem mais hospedando sessões de jogo ativas, exclua as pilhas do CloudFormation dessas frotas.
-