将自定义服务器生成包上传到 GameLift - 亚马逊 GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

在您将游戏服务器集成到之后 GameLift,上传编译文件以便 GameLift 可以将其部署到游戏托管。本主题介绍如何打包游戏生成包文件,创建可选的生成包文件,创建可选的生成包安装脚本,然后使用Amazon Command Line Interface(Amazon CLI)或者一个AmazonSDK。

添加生成包安装脚本

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

  • Windows: 创建一个名为的批文件install.bat.

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

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

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

  • GameLift 安装生成包,并在托管服务器上的以下位置重新创建生成包中的文件目录:

    • Windows 队列:C:\game

    • Linux 队组:/local/game

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

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

  • 安装脚本不能依赖于 VPC 对等连接。VPC 对等连接直到之后才可用 GameLift 在队列实例上安装构建。

例 Windows 安装 bash 文件

此示例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

此示例install.sh文件显示如何使用Amazon CloudWatch 代理收集系统级和自定义指标,并处理日志轮换。由于 GameLift 在服务 VPC 中运行,您必须授权 GameLift 假设的权限Amazon Identity and Access Management(IAM) 角色代表您。允许 GameLift 要担任一个角色,请创建一个包含以下内容的角色Amazon管理的策略CloudWatchAgentAdminPolicy,并在创建队组时使用该角色。

sudo yum install -y amazon-cloudwatch-agent sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum install -y collectd cat <<'EOF' > /tmp/config.json { "agent": { "metrics_collection_interval": 60, "run_as_user": "root", "credentials": { "role_arn": "arn:aws:iam::account#:role/rolename" } }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/tmp/log", "log_group_name": "gllog", "log_stream_name": "{instance_id}" } ] } } }, "metrics": { "namespace": "GL_Metric", "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { // Configure metrics you want to collect. // For more information, see Manually create or edit the CloudWatch agent configuration file. } } } EOF sudo mv /tmp/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json sudo systemctl enable amazon-cloudwatch-agent.service

打包游戏生成包文件

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

  • 游戏服务器二进制文件— 运行游戏服务器所需的二进制文件。一个生成包可以包括多个游戏服务器的二进制文件,其中包含在同一平台上运行的多个游戏服务器的二进制文件。有关受支持的平台的列表,请参阅下载亚马逊 GameLift SDK.

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

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

您可以在生成包中设置任何应用程序,包括您的安装脚本,以便安全访问其他应用程序Amazon服务。有关执行此操作的方法的信息,请参阅与其他人沟通Amazon队组, 资源.

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

创建 GameLift 构建

创建生成包和上传文件时,有几个选项可供选择:

使用这两种方法, GameLift 使用唯一的生成包 ID 和其他元数据创建新的生成包资源。构建开始于已初始化statatus。晚于 GameLift获取游戏服务器文件,生成包移至Readystatatus。此时,您可以通过创建一个新的 GameLift 机群。有关更多信息,请参阅 部署队列

何时 GameLift 设置新队组,它会将生成包文件下载到各个队组实例,并根据生成包文件安装生成包文件。 GameLift 在实例上的以下位置安装生成包文件:

  • Windows 队列:C:\game

  • Linux 队组:/local/game

从文件目录创建构建

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

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

    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
    • operating-system— 游戏服务器生成包的操作系统。如果您没有指定操作系统, GameLift 使用默认值 (WINDOWS_2012)。您以后无法更新。

    • build-root— 您的生成包文件的路径。

    • name— 新生成包的描述性名称。您可以随时更新生成包资源,更新此值。

    • build-version— 生成包文件的版本详细信息。

    • region— 这个Amazon要在其中创建生成包的区域。在要部署队组的区域中创建生成包。如果您在多个区域中部署游戏,请在每个区域中创建一个生成包。

      注意

      使用以下命令检查您当前的默认区域configure get命令 (aws configure get region)。要更改您的默认区域,请使用configure set命令 (aws configure set region region name)。

    示例

    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

    为了回应您的上传请求, GameLift 提供上传进度。成功上传后, GameLift 返回新的版本记录 ID。上传时间取决于游戏文件的大小和连接速度。

  2. 检查生成包状态。使用查看新的生成包记录(包括当前状态)describe-build命令(或DescribeBuildAPI 操作)。您还可以在中查看状态 GameLift 控制台。

    在命令行窗口中,输入以下命令describe-build命令和参数。

    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

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

使用 Amazon S3 中的文件创建内部版本

您可以将您的生成包文件存储在 Amazon S3 中,并将它们上传到。 GameLift 从那里。在创建生成包时,您指定 S3 存储桶的位置,以及 GameLift 直接从 Amazon S3 中检索生成包文件。

创建编译资源

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

  2. 给 GameLift 访问您的生成包文件。按照中的说明创建 IAM 角色在 Amazon S3 中访问游戏编译文件. 您的 IAM 角色指定了哪些实体(例如 GameLift) 可以代入该角色。它还定义了一组允许对您的进行有限访问的权限Amazon资源的费用。创建角色后,记录新角色的 Amazon 资源名称 (ARN),您在创建生成包时需要该名称。

  3. 创建生成包。使用 GameLift 控制台或Amazon CLI创建新的生成记录。您必须具有PassRole权限,如中所述适用于 IAM policy GameLift.

GameLift console
  1. GameLift控制台,在导航窗格中,选择托管构建.

  2. 在存储库的构建页面,选择创建生成包.

  3. 在存储库的创建生成包页面,下方Build中,执行以下操作:

    1. 适用于名称,输入脚本名称。

    2. 适用于版本,输入版本。因为你可以更新版本的内容,所以版本数据可以帮助你跟踪更新。

    3. (可选)对于操作系统 (OS),选择游戏服务器的操作系统。默认情况下, GameLift 使用 Windows 2012。您以后无法更新操作系统。

    4. 适用于游戏服务器版本,输入S3 URI您上传到 Amazon S3 的生成包对象,然后选择对象版本. 如果您忘记了 Amazon S3 URI 和对象版本,请选择浏览 S3然后搜索构建对象。

    5. 适用于IAM 角色,选择您创建的角色 GameLift 访问您的 S3 存储桶和生成包对象。

  4. (可选)下方标签,输入以下命令将标签添加到版本中密钥对。

  5. 选择Create(创建)。

    GameLift 为新版本分配 ID 并上传指定的 .zip 文件。您可以在上查看新生成包(包括状态)构建页.

Amazon CLI

要定义新版本并上传服务器编译文件,请使用create-build命令。

  1. 打开命令行窗口,然后切换到您可以使用Amazon CLI.

  2. 输入以下信息create-build命令:

    aws gamelift create-build \ --name user-defined name of build \ --operating-system supported OS \ --build-version user-defined build number \ --storage-location "Bucket"=S3 bucket label,"Key"=Build .zip file name,"RoleArn"=Access role ARN} \ --region region name
    • name— 新生成包的描述性名称。

    • operating-system— 游戏服务器生成包的操作系统。如果您没有指定操作系统, GameLift使用默认值 (WINDOWS_2012)。您以后无法更新。

    • build-version— 生成包文件的版本详细信息。此信息可能很有用,因为游戏服务器的每个新版本都需要一个新的生成包资源。

    • storage-location

      • Bucket— 包含您的生成包的 S3 桶的名称。例如,“my_build_files”。

      • Key— 包含您的生成包文件的 .zip 文件的名称。例如,“my_game_build_7.0.1, 7.0.0.1, 7.0.0.2”。

      • RoleARN— 分配给您创建的 IAM 角色的 ARN。例如,“arn:: 11112222323232323232333311role/GameLiftAccess“。有关策略示例,请参阅 在 Amazon S3 中访问游戏编译文件

    • region— 在中创建生成包Amazon您计划部署队组的区域。如果您在多个区域中部署游戏,请在每个区域中创建一个生成包。

      注意

      我们建议使用以下命令检查您当前的默认区域configure get命令. 要更改您的默认区域,请使用configure set命令。

    示例

    aws gamelift create-build \ --operating-system WINDOWS_2012 \ --storage-location "Bucket"="my_game_build_files","Key"="mygame_build_101.zip","RoleArn"="arn:aws:iam::111122223333:role/gamelift" \ --name "My Game Nightly Build" \ --build-version "build 101" \ --region us-west-2
  3. 要查看新版本,请使用describe-build命令。

更新您的生成包文件

您可以使用以下命令更新编译资源的元数据 GameLift 控制台或update-build Amazon CLI命令。在你创建了一个 GameLiftbuild,您无法更新与之关联的生成包文件。对于每一组新文件,创建一个新的 GameLift build。使用upload-build命令, GameLift 自动为每个请求创建新的生成记录。如果您使用以下方式提供编译文件create-build命令,将其他名称的新生成包 .zip 文件上传到 Amazon S3 并通过引用新文件名创建生成包。

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

  • 根据需要使用队列和换出队组。在通过设置游戏客户端时 GameLift,请指定队列而不是队组。借助队列,您可以将新生成包的新队组添加到队列并删除旧队组。有关更多信息,请参阅 设置 GameLift 游戏会话会话放置队列

  • 使用别名将玩家传输到新游戏生成包。当您将游戏客户端集成到时 GameLift,请指定队组别名而不是队组 ID。有关更多信息,请参阅 将别名添加到 GameLift 舰队

  • 设置自动生成包更新。有关合并的示例脚本和信息 GameLift 部署到您的编译系统中,请参阅自动部署到亚马逊 GameLift在Amazon游戏技术博客。