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.
Tópicos
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
-
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
-
Clone o Amazon GameLift Agent
. Por exemplo: .
[~/work]$
git clone https://github.com/aws/amazon-gamelift-agent.gitCloning into 'amazon-gamelift-agent'...
-
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 Adicione um servidor de jogos que tenha sido integrado ao SDK 5.x do servidor, criado e empacotado em um arquivo.
.ZIP
-
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 SimpleServer
[~/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
Vá para o
glc
subdiretório.[~/work]$
cd glc && find. ./target ./target/GameLiftAgent-1.0.jar ./gamebuild
Crie e abra um novo Dockerfile.
Por exemplo: .
[~/work/glc]$
nano DockerfileCopie 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
-
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 -tsimple-server
:version-1
.Successfully built
0123456789012
Successfully tagged simple-server:version-1
nota
Nos exemplos a seguir, usamos
simpler-server
comoREPOSITORY
valor inicial eversion-1
como valor.TAG
-
Veja a lista de imagens e anote
IMAGE ID
os valores e.REPOSITORY
Você precisará deles em um procedimento abaixo.[~/work/glc]$
docker imagesREPOSITORY 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 --regionus-west-2
| docker login --username AWS --password-stdinaws_account_id
.dkr.ecr.us-west-2
.amazonaws.comWARNING! 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
Copie o URI do repositório privado do Amazon ECR
que você deseja usar. 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>
Envie sua imagem de contêiner para o Amazon ECR
[~/work/glc]$
docker image push<Amazon ECR private repository URI>