Amazon GameLift
开发人员指南 (版本 )
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将自定义游戏服务器生成包上传到 Amazon GameLift

如果您有已与 Amazon GameLift 集成的游戏服务器生成包,您需要先将生成包上传到 Amazon GameLift 服务,然后才能对其进行游戏托管部署。

上传文件之前,请首先打包游戏的生成包文件。或者,加入生成包安装脚本。文件准备就绪后,使用 AWS CLI 或 AWS 开发工具包创建 Amazon GameLift 生成包并上传生成包文件。完成此操作有两种可能的方法:

  • 使用存储在目录中的文件创建生成包。这是最简单且最常用的方法。

  • 使用您的 AWS 账户下的 Amazon S3 存储桶中存储的文件创建生成包。

当您创建生成包时,将创建新游戏生成包记录。此记录包含唯一的生成包 ID (例如:build-1111aaaa-22bb-33cc-44dd-5555eeee66ff)、创建时间戳、上传的文件大小、状态和其他元数据。生成包将被置于已初始化状态。Amazon GameLift 成功获取游戏服务器文件之后,生成包将移至准备就绪状态。此时,您可以通过创建新 Amazon GameLift 队组来对其进行部署(请参阅 为自定义游戏生成包部署 GameLift 队组)。

当您为生成包创建队组时,Amazon GameLift 设置新的队组实例并在每个实例上安装游戏服务器生成包。生成包文件安装在以下位置:

  • 对于 Windows 队组:C:\game

  • 对于 Linux 队组:/local/game

要排查可能与生成包安装相关的队组激活问题,请参阅 调试队组问题

创建生成包安装脚本

创建适用于您的游戏生成包的操作系统的安装脚本:

  • Windows:创建名为“install.bat”的批处理文件。

  • Linux:创建名为“install.sh”的 Shell 脚本文件。

在创建安装脚本时,请注意以下事项:

  • 该脚本不接受任何用户输入。

  • 生成包安装在托管服务器上的以下位置中。将重新创建您的生成包中的文件目录。

    • 对于 Windows 队组:C:\game

    • 对于 Linux 队组:/local/game

  • 在安装过程中,run-as 用户具有对实例文件结构的有限访问权限。该用户对安装您的生成包文件的目录拥有全部权限。如果您的安装脚本执行需要管理员权限的操作,您将需要指定管理员访问权限 (对于 Linux 为 sudo,对于 Windows 为 runas)。与安装脚本相关的权限失败会生成一条事件消息,指示脚本出现问题。

  • 在 Linux 上,支持常用的 Shell 解释器语言,例如 bash。在安装脚本的顶部添加 shebang (例如 #!/bin/bash)。如果您需要验证对您的首选 shell 命令的支持,可以远程访问活动的 Linux 实例并打开 shell 提示符。有关更多信息,请参阅远程访问队组实例

脚本示例

这些示例说明了 Windows 和 Linux 中的常见脚本使用情况。

Windows

此示例 install.bat 文件安装游戏服务器所需的 Visual C++ 运行时组件,然后将结果写入日志文件。组件文件包含在根目录下的生成包中。

vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log

Linux

此示例 install.sh 文件说明如何在安装脚本中使用 bash 以及如何将结果写入日志文件。

#!/bin/bash echo 'Hello World' > install.log

打包游戏生成包文件

在将支持 Amazon GameLift 的游戏服务器上传到 Amazon GameLift 服务进行托管之前,您需要将所有游戏生成包文件打包成一个生成包目录。此目录必须包含运行您的游戏服务器和托管游戏会话所需的所有组件,如下所示:

  • 游戏服务器二进制文件 – 运行游戏服务器所需的二进制文件。生成包可以包括多个游戏服务器的二进制文件,只要它们是为相同平台构建的 (请参阅支持的平台)。

  • 依赖项 – 运行游戏服务器可执行文件所需的任何相关文件。示例包括资产、配置文件和相关库。

  • 安装脚本 – 用于处理在 Amazon GameLift 托管服务器上完全安装您的游戏生成包所需执行的任务。此文件必须放置到生成包目录的根目录中。安装脚本在创建队组过程中运行一次。

您可以在生成包中设置任何应用程序,包括您的安装脚本,以确保安全访问您在其他 AWS 服务上的资源。有关完成此操作的可能方法的更多信息,请参阅

在您对生成包文件打包后,请确保您的游戏服务器运行在目标操作系统 (不是用于开发的操作系统) 的干净安装上。此步骤帮助确保您在程序包内包含了所有必需的依赖项,并且您的安装脚本准确。

注意

如果您要在 Amazon S3 存储桶中存储游戏生成包文件以便上传,则需要将生成包文件打包成一个 .zip 文件。有关使用此方法上传的说明,请参阅使用 Amazon S3 中的文件创建生成包

创建文件包含在目录中的生成包

要创建游戏生成包,其中包含存储在任意位置(包括本地目录)的打包游戏服务器文件,请使用 AWS Command Line Interface (AWS CLI) 命令 upload-build。此命令在 Amazon GameLift 中创建一个新的生成包记录并从您指定的位置上传文件。

  1. 发送上传请求。 在命令行窗口中,键入以下命令和参数。

    aws gamelift upload-build --operating-system [supported OS] --build-root [build path] --name [user-defined name of build] --build-version [user-defined build number] --region [region name]
    --build-root

    您的生成包文件的路径。

    --operating-system

    生成包中所有服务器可执行文件可在其上运行的操作系统。使用该生成包创建的所有队组自动使用此操作系统。有效值为 WINDOWS_2012AMAZON_LINUX。此参数为可选项。如果未指定操作系统,Amazon GameLift 将使用默认值 (WINDOWS_2012)。该值以后不能更改。

    --region

    您要在其中创建生成包的区域的名称。您必须在要部署队组的区域中创建生成包。要在多个区域中部署,您必须为每个区域创建生成包并上传文件。如果您使用默认区域配置了 AWS CLI,则可以省略此参数。

    注意

    如果您在多个区域中运行,检查您当前的默认区域始终是一种很好的方法。使用 AWS CLI 命令 configure get (aws configure get region) 可查看您当前的默认区域。使用命令 configure set (aws configure set region [region name]) 设置默认区域。

    --name--build-version

    使用这些参数来描述您的生成包。这些元数据值可以在以后使用 update-build (或 AWS 开发工具包操作 UpdateBuild) 更改。

    在响应您的上传请求后,Amazon GameLift 服务提供上传进度,并在成功上传后返回新生成包记录 ID。上传时间取决于游戏文件的大小和连接速度。

    示例:

    aws gamelift upload-build --operating-system AMAZON_LINUX --build-root ~/mygame --name "My Game Nightly Build" --build-version "build 255" --region us-west-2
    aws gamelift upload-build --operating-system WINDOWS_2012 --build-root "C:\mygame" --name "My Game Nightly Build" --build-version "build 255" --region us-west-2
  2. 检查生成包状态。 使用 describe-build(或 DescribeBuild)查看新的生成包记录(包括当前状态)。您也可以在 Amazon GameLift 控制台中查看状态。

    在命令行窗口中,键入以下命令和参数。

    aws gamelift describe-build --build-id [build ID returned with the upload request] --region [region name]

    示例:

    aws gamelift describe-build --build-id "build-3333cccc-44dd-55ee-66ff-7777aaaa88bb" --region us-west-2

    在响应您的请求时,Amazon GameLift 服务会返回请求的生成包记录。此记录包含一组生成包元数据,包括状态、上传的文件大小和创建时间戳。

使用 Amazon S3 中的文件创建生成包

要使用存储在您 AWS 账户的 Amazon S3 存储桶中的打包游戏服务器文件创建游戏生成包,请使用 AWS CLI 命令 create-build。此操作会在 Amazon GameLift 中创建一个新的生成包并从您指定的 Amazon S3 存储桶中获取生成包文件。

  1. 将您的生成包文件存储在 Amazon S3 中。 创建一个 .zip 文件,其中包含打包的生成包文件,并将其上传到您 AWS 账户中的 Amazon S3 存储桶。记下存储桶标签和文件名;您在创建 Amazon GameLift 生成包时需要这些内容。

  2. 向 Amazon GameLift 提供对您的生成包文件的访问权限。 按照 设置 Amazon GameLift 访问的角色 上的说明创建一个 IAM 角色。角色包含一组对您的 AWS 资源进行有限访问的权限,并指定哪些实体(如 Amazon GameLift 服务)可以代入该角色。创建角色后,记录新角色的 Amazon 资源名称 (ARN),您在创建生成包时需要该名称。

  3. 发送请求以创建新生成包。 使用 AWS CLI 命令 create-build(或 AWS 开发工具包操作 CreateBuild)创建新的生成包记录并告知 Amazon GameLift 您的生成包文件的存储位置。在此请求中,您必须指定 Amazon S3 位置,包括以下信息 (在您设置存储桶和访问角色时收集):

    • Bucket:包含您的生成包的存储桶名称。示例:“my_build_files”。

       

    • Key:包含您的生成包文件的 .zip 文件的名称。示例:“mygame_build_7.0.1, 7.0.2”。

       

    • Role ARN:分配给您创建的访问角色的 ARN。示例:“arn:aws-cn:iam::111122223333:role/GameLiftAccess”。

    在命令行窗口中,键入以下命令和参数。

    aws gamelift create-build --operating-system [supported OS] --storage-location "Bucket=[S3 bucket label],Key=[Build zip file name],RoleArn=[Access role ARN]" --name [user-defined name of build] --build-version [user-defined build number] --region [region name]

    示例:

    aws gamelift create-build --operating-system WINDOWS_2012 --storage-location "Bucket=my_game_build_files,Key=mygame_build_101.zip,RoleArn=arn:aws-cn:iam::111122223333:role/gamelift" --name "My Game Nightly Build" --build-version "build 101" --region us-west-2

    在响应您的请求时,Amazon GameLift 服务会返回新创建的生成包记录。

更新您的生成包文件

一旦创建 Amazon GameLift 生成包,与之关联的生成包文件就无法更改。相反,您必须为每一组新文件创建新的 Amazon GameLift 生成包。如果您使用 upload-build 命令提供生成包文件,您无需执行任何特殊操作,因为 Amazon GameLift 自动为每个请求创建新的生成包记录。如果您使用 create-build 命令提供生成包文件,则使用其他名称将新生成包 .zip 文件上传到 Amazon S3 并通过引用新文件名创建生成包。

对于部署更新的生成包,请尝试这些提示:

  • 根据需要使用队列和换出队组。 在通过 Amazon GameLift 设置游戏客户端时,请指定队列而不是队组。借助队列,您可以创建新队组来运行新生成包,然后将新队组添加到队列并删除旧队组。有关详细信息,请参阅 使用多区域队列

  • 使用别名无提示地将玩家传输到新游戏生成包。 当您将游戏客户端集成到 Amazon GameLift 时,请指定队组别名而不是队组 ID。使用别名,只需三步即可将玩家移动到新生成包:(1) 创建新生成包。(2) 创建队组来部署新生成包。(3) 将别名目标从旧队组更改到新队组。有关更多信息,请参阅 将别名添加到 Amazon GameLift 队列

  • 设置自动生成包更新。按照包含示例脚本的 GameTech 博客文章自动部署到 Amazon GameLift,将 Amazon GameLift 部署集成到您的生成系统。