Prepare uma imagem de contêiner com seu software de servidor de jogos - Amazon GameLift

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Prepare uma imagem de contêiner com seu software de servidor de jogos

Esta documentação é para um recurso que está em versão prévia pública. Está sujeita a alteração.

O contêiner é o elemento mais básico de uma frota de GameLift contêineres da Amazon. Seu contêiner inclui o servidor do jogo, junto com suas dependências, como SDKs, software, diretórios e arquivos.

Para funcionar em uma frota de contêineres, seu servidor de jogos deve ser executado em Linux e estar integrado ao SDK 5.x do servidor.

Configure seu diretório de trabalho

Seu diretório de trabalho é onde você coloca todos os arquivos necessários para criar sua imagem de contêiner e definir como a Amazon a GameLift executa.

Para configurar seu diretório de trabalho do contêiner
  1. Crie o diretório em que você deseja trabalhar com suas imagens de GameLift contêiner da Amazon.

    Por exemplo: .

    [~/]$ mkdir -p work/glc/gamebuild && cd work && find . . ./glc ./glc/gamebuild
  2. Clone o Amazon GameLift Agent.

    Por exemplo: .

    [~/work]$ git clone https://github.com/aws/amazon-gamelift-agent.git Cloning into 'amazon-gamelift-agent'...
  3. Crie o GameLiftAgent usando o Maven.

    Por exemplo: .

    [~/work]$ cd amazon-gamelift-agent

    [~/work/amazon-gamelift-agent]$ mvn clean compile assembly:single && \ mv target ../glc && cd .. && find glc
  4. Adicione um servidor de jogos que tenha sido integrado ao SDK 5.x do servidor, criado e empacotado em um arquivo. .ZIP

  5. Copie seu .ZIP arquivo para ~/work/glc/gamebuild/ o.

Se você não tem um servidor de jogos SDK 5.x, pode baixar e usar nosso SimpleServerjogo de amostra para tentar usar uma frota de contêineres.

[~/work]$ curl -o glc/gamebuild/SimpleServer.zip \ 'https://ws-assets-prod-iad-r-iad-ed304a55c2ca1aee.s3.us-east-1.amazonaws.com/086bb355-4fdc-4e63-8ca7-af7cfc45d4f2/AmazonGameLiftSampleServerBinary.zip' && % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5140k 100 5140k 0 0 12.3M 0 --:--:-- --:--:-- --:--:-- 12.3M glc glc/target glc/target/GameLiftAgent-1.0.jar glc/gamebuild glc/gamebuild/SimpleServer.zip

Crie sua imagem de contêiner

Seu Dockerfile especifica o ambiente, o software e as instruções para criar seu contêiner.

Para criar seu Dockerfile
  1. Vá para o glc subdiretório.

    [~/work]$ cd glc && find . ./target ./target/GameLiftAgent-1.0.jar ./gamebuild
  2. Crie e abra um novo Dockerfile.

    Por exemplo: .

    [~/work/glc]$ nano Dockerfile
  3. Copie de um dos modelos a seguir e cole o conteúdo em seu Dockerfile.

Esse modelo contém as instruções mínimas que um contêiner precisa para ser usado em uma GameLift frota da Amazon. Modifique o conteúdo conforme necessário para seu servidor de jogos.

# Base image # ---------- # Add the base image that you want to use over here, # Make sure to use an image with the same architecture as the # Instance type you are planning to use on your fleets. # We require JDK to be installed in the base image, so that # it can be used to run the &AGS; Agent FROM public.ecr.aws/amazoncorretto/amazoncorretto:17-amd64 # # Game build directory # -------------------- # Add your game build to gamebuild directory and add the zip file name in the 'GAME_BUILD_ZIP' env variable below. # The game build provided over here needs to be integrated with gamelift server sdk. # This template assumes that the game build is in a zip format. ENV GAME_BUILD_ZIP="<ADD_GAME_BUILD_ZIP_FILE_NAME>" \ # # Default directory # ----------------- # Default directory, the value provided here should be where the game executable exists. # Provide this same value as your launch path in RuntimeConfiguration when creating a fleet. # Ref: https://docs.aws.amazon.com/gamelift/latest/apireference/API_ServerProcess.html GAME_EXECUTABLE="<ADD NAME OF EXECUTABLE WITHIN THE GAME BUILD>" \ HOME_DIR="/local/game" \ # # Registered compute in anywhere fleet (not used in container fleets) # ------------------------------------------------------------------- # Add the name for the registered compute in an anywhere fleet. # This environment variable is required only for anywhere fleets, but not for container fleets. # If it is set for container fleets, it will be overridden by Gamelift. GAMELIFT_COMPUTE_NAME="<ADD_COMPUTE_NAME>" \ # # Default Gamelift Agent jar # -------------------------- GAMELIFT_AGENT_EXEC="GameLiftAgent-1.0.jar" \ # # This env variable defines the name of the S3 bucket that stores the GameLift Agent logs. # This S3 bucket should exist in the customer AWS account. # In order to allow GameLift agent to upload logs to this s3 bucket, customers would need to # include s3:PutObject permission in the IAM role provided as instanceRoleArn during CreateFleet operation. GAMELIFT_AGENT_LOGS_BUCKET_NAME="<ADD NAME OF GAMELIFT AGENT LOGS S3 BUCKET>" \ # # ----------- # This env variable defines the name of the S3 bucket that stores the game session logs. # This S3 bucket should exist in the customer AWS account. # In order to allow GameLift agent to upload logs to this s3 bucket, customers would need to # include s3:PutObject permission in the IAM role provided as instanceRoleArn during CreateFleet operation. # ----------- GAME_SESSION_LOGS_BUCKET_NAME="<ADD NAME OF GAME SESSION LOGS S3 BUCKET>" \ # # ----------- GAMELIFT_AGENT_LOGS_PATH="/local/game/agentlogs/" \ # # NOT USED in container fleets - USED in Anywhere fleets # ---------------------------------------------------------- # Specifiy the type of compute resource used to host the game servers. # This env variable is required only for anywhere fleets, but not for container fleets. # If it is set for container fleets, it will be overridden by Gamelift. # # ----------- COMPUTE_TYPE="ANYWHERE" \ # # Specify the credential to be used for creating the client. # This env variable is required only for anywhere fleets, but not for container fleets. # If it is set for container fleets, it will be overridden by Gamelift. # # ----------- CREDENTIAL_PROVIDER="environment-variable" USER root # intall dependencies as necessary RUN yum install -y sudo \ unzip \ git \ shadow-utils \ iputils \ tar \ gcc \ make \ openssl-devel \ zlib-devel \ vim \ net-tools \ nc \ procps # Set up the ground for 'gamescale' user RUN groupadd -r gamescale -g 500 && \ useradd -u 500 -r -g gamescale -m -s /sbin/nologin -c "Gamescale user" gamescale && \ echo "gamescale ALL=(ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo) && \ mkdir -p $HOME_DIR && \ mkdir $HOME_DIR/mono && \ chown -R gamescale:gamescale $HOME_DIR WORKDIR $HOME_DIR # extract game build as necessary COPY ./gamebuild/$GAME_BUILD_ZIP . RUN unzip ./$GAME_BUILD_ZIP -d ./ # copy Gamelift Agent jar COPY ./gameliftAgent/$GAMELIFT_AGENT_EXEC ./ # Add permissions to game build and gamelift agent jar RUN chmod +x ./$GAME_EXECUTABLE RUN chmod +x ./$GAMELIFT_AGENT_EXEC # Check if java is installed on the image, if not then the Agent will not be able to run RUN java --version USER gamescale ENV PATH="$PATH:$HOME_DIR/bin:$JAVA_HOME" # Change directory to bin WORKDIR $HOME_DIR # check path before starting the container RUN echo $PATH # Create logs directory for GameLift Agent & server processes RUN mkdir logs RUN mkdir agentlogs # Start the GameLift Agent ENTRYPOINT sleep 90 && java -jar $GAMELIFT_AGENT_EXEC -ip "192.168.1.1" -gslb "$GAME_SESSION_LOGS_BUCKET_NAME" -galb "$GAMELIFT_AGENT_LOGS_BUCKET_NAME" -galp "$GAMELIFT_AGENT_LOGS_PATH" -glc environment-variable
# Base image # ---------- # Add the base image that you want to use over here, # Make sure to use an image with the same architecture as the # Instance type you are planning to use on your fleets. # We require JDK to be installed in the base image, so that # it can be used to run the &AGS; Agent FROM public.ecr.aws/amazoncorretto/amazoncorretto:17-amd64 # # Game build directory # -------------------- # Add your game build to gamebuild directory and add the zip file name in the 'GAME_BUILD_ZIP' env variable below. # The game build provided over here needs to be integrated with gamelift server sdk. # This template assumes that the game build is in a zip format. ENV GAME_BUILD_ZIP="SimpleServer.zip" \ # # Default directory # ----------------- # Default directory, the value provided here should be where the game executable exists. # Provide this same value as your launch path in RuntimeConfiguration when creating a fleet. # Ref: https://docs.aws.amazon.com/gamelift/latest/apireference/API_ServerProcess.html GAME_EXECUTABLE="GameLiftSampleServer" \ HOME_DIR="/local/game" \ # # Registered compute in anywhere fleet (not used in container fleets) # ------------------------------------------------------------------- # Add the name for the registered compute in an anywhere fleet. # This environment variable is required only for anywhere fleets, but not for container fleets. # If it is set for container fleets, it will be overridden by Gamelift. GAMELIFT_COMPUTE_NAME="<ADD_COMPUTE_NAME>" \ # # Default Gamelift Agent jar # -------------------------- GAMELIFT_AGENT_EXEC="GameLiftAgent-1.0.jar" \ # # This env variable defines the name of the S3 bucket that stores the GameLift Agent logs. # This S3 bucket should exist in the customer AWS account. # In order to allow GameLift agent to upload logs to this s3 bucket, customers would need to # include s3:PutObject permission in the IAM role provided as instanceRoleArn during CreateFleet operation. GAMELIFT_AGENT_LOGS_BUCKET_NAME="<ADD NAME OF GAMELIFT AGENT LOGS S3 BUCKET>" \ # # ----------- # This env variable defines the name of the S3 bucket that stores the game session logs. # This S3 bucket should exist in the customer AWS account. # In order to allow GameLift agent to upload logs to this s3 bucket, customers would need to # include s3:PutObject permission in the IAM role provided as instanceRoleArn during CreateFleet operation. # ----------- GAME_SESSION_LOGS_BUCKET_NAME="<ADD NAME OF GAME SESSION LOGS S3 BUCKET>" \ # # ----------- GAMELIFT_AGENT_LOGS_PATH="/local/game/agentlogs/" \ # # NOT USED in container fleets - USED in Anywhere fleets # ---------------------------------------------------------- # Specifiy the type of compute resource used to host the game servers. # This env variable is required only for anywhere fleets, but not for container fleets. # If it is set for container fleets, it will be overridden by Gamelift. # # ----------- COMPUTE_TYPE="ANYWHERE" \ # # Specify the credential to be used for creating the client. # This env variable is required only for anywhere fleets, but not for container fleets. # If it is set for container fleets, it will be overridden by Gamelift. # # ----------- CREDENTIAL_PROVIDER="environment-variable" USER root # intall dependencies as necessary RUN yum install -y sudo \ unzip \ git \ shadow-utils \ iputils \ tar \ gcc \ make \ openssl-devel \ zlib-devel \ vim \ net-tools \ nc \ procps # Set up the ground for 'gamescale' user RUN groupadd -r gamescale -g 500 && \ useradd -u 500 -r -g gamescale -m -s /sbin/nologin -c "Gamescale user" gamescale && \ echo "gamescale ALL=(ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo) && \ mkdir -p $HOME_DIR && \ mkdir $HOME_DIR/mono && \ chown -R gamescale:gamescale $HOME_DIR WORKDIR $HOME_DIR # extract game build as necessary COPY ./gamebuild/$GAME_BUILD_ZIP . RUN unzip ./$GAME_BUILD_ZIP -d ./ # copy Gamelift Agent jar COPY ./target/$GAMELIFT_AGENT_EXEC ./ # Add permissions to game build and gamelift agent jar RUN chmod +x ./$GAME_EXECUTABLE RUN chmod +x ./$GAMELIFT_AGENT_EXEC # Check if java is installed on the image, if not then the Agent will not be able to run RUN java --version USER gamescale ENV PATH "$PATH:$HOME_DIR/bin:$JAVA_HOME" # Change directory to bin WORKDIR $HOME_DIR # check path before starting the container RUN echo $PATH # Create logs directory for GameLift Agent & server processes RUN mkdir logs RUN mkdir agentlogs # Start the GameLift Agent ENTRYPOINT sleep 90 && java -jar $GAMELIFT_AGENT_EXEC -ip "192.168.1.1" -gslb "$GAME_SESSION_LOGS_BUCKET_NAME" -galb "$GAMELIFT_AGENT_LOGS_BUCKET_NAME" -galp "$GAMELIFT_AGENT_LOGS_PATH" -glc environment-variable
nota

Nota: Algumas das variáveis de ambiente no Dockerfile podem ser substituídas pelo. ContainerDefinition

Para criar sua imagem de contêiner
  1. Crie sua imagem de contêiner.

    Se você estiver usando seu próprio servidor SDK 5.x

    Você pode especificar o nome do repositório local que desejar.

    [~/work/glc]$ docker build -t <local repository name>:<optional tag> .
    Se você estiver usando nossa SimpleServer amostra
    [~/work/glc]$ docker build -t simple-server:version-1 . Successfully built 0123456789012 Successfully tagged simple-server:version-1
    nota

    Nos exemplos a seguir, usamos simpler-server como REPOSITORY valor inicial e version-1 como valor. TAG

  2. Veja a lista de imagens e anote IMAGE ID os valores e. REPOSITORY Você precisará deles em um procedimento abaixo.

    [~/work/glc]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE simple-server version-1 0123456789012 14 minutes ago 1.24GB

Envie sua imagem de contêiner para o Amazon ECR

Faça upload da imagem do seu contêiner em um repositório privado no Amazon ECR. Ao criar uma definição de grupo de contêineres, você faz referência a esse local do repositório para que a Amazon GameLift possa tirar um instantâneo da imagem do seu contêiner e usá-la ao implantar uma frota de contêineres.

nota

Se você ainda não tem um repositório privado do Amazon ECR, crie um.

Para obter suas credenciais do Amazon ECR
  • Antes de enviar sua imagem de contêiner para o Amazon ECR, você deve adquirir suas AWS credenciais de forma temporária e fornecê-las ao Docker. Obtenha suas credenciais do Amazon ECR para que o Docker possa fazer login.

    [~/work/glc]$ aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-west-2.amazonaws.com WARNING! Your password will be stored unencrypted in /home/user-name/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
Para enviar sua imagem de contêiner para o Amazon ECR
  1. Copie o URI do repositório privado do Amazon ECR que você deseja usar.

  2. Aplique uma tag Amazon ECR à imagem do seu contêiner.

    [~/work/glc]$ docker tag <IMAGE ID from above> <Amazon ECR private repository URI>:<optional tag>
  3. Envie sua imagem de contêiner para o Amazon ECR

    [~/work/glc]$ docker image push <Amazon ECR private repository URI>