本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将自定义服务器构建上传到 Amazon GameLift
将游戏服务器与 Amazon GameLift 集成后,将构建文件上传到 Amazon GameLift。本主题介绍如何使用 Amazon Command Line Interface (Amazon CLI)
打包游戏构建文件
在将您配置的游戏服务器上传到 Amazon GameLift 之前,请将游戏构建文件打包到构建目录中。此目录必须包含运行您的游戏服务器和托管游戏会话所需的所有组件,如下所示:
-
游戏服务器二进制文件 – 运行游戏服务器所需的二进制文件。构建可以包括多个为相同平台构建的游戏服务器的二进制文件。有关受支持平台的列表,请参阅Amazon 为开发提供支持 GameLift。
-
依赖项 – 运行游戏服务器可执行文件所需的任何相关文件。示例包括资产、配置文件和相关库。
注意
对于使用适用于 C++ 的 Amazon GameLift 服务器软件开发工具包创建的游戏构建(包括使用 Unreal 插件创建的构建),请包含与您构建服务器软件开发工具包时使用的相同 OpenSSL 版本的 OpenSSL DLL。有关更多详细信息,请参阅服务器软件开发工具包自述文件。
-
安装脚本(可选)– 用于处理在 Amazon GameLift 托管服务器上安装游戏构建的任务的脚本文件。将此文件放置到构建目录的根目录中。Amazon GameLift 在创建实例集时运行安装脚本。
您可以在构建中设置任何应用程序,包括您的安装脚本,以确保安全访问您在其他 Amazon 服务上的资源。有关如何执行此操作的信息,请参阅与您的实例集中的其他 Amazon 资源进行通信。
在您打包构建文件后,请确保您的游戏服务器运行在目标操作系统的干净安装上。这有助于验证您在程序包内包含了所有必需的依赖项,并且您的安装脚本准确。
创建 Amazon GameLift 构建
创建构建和上传文件时,有几个选项可供选择:
-
从文件目录创建构建。这是最简单且最常用的方法。
-
使用 Amazon Simple Storage Service (Amazon S3) 中的文件创建构建。使用此选项,您可以在 Amazon S3 中管理您的构建版本。
通过这两种方法,Amazon GameLift 使用唯一的构建 ID 和其他元数据创建新的构建资源。生成以已初始化状态开始。Amazon GameLift 获取游戏服务器文件后,构建将变为就绪状态。
构建准备就绪后,您可以将其部署到新的 Amazon GameLift 实例集中。有关更多信息,请参阅创建 Amazon GameLift 托管实例集。当 Amazon GameLift 设置新实例集时,它会将构建文件下载到每个实例集实例并安装构建文件。
从文件目录创建构建
要创建存储在任意位置(包括本地目录)的游戏构建,请使用 upload-build
Amazon CLI 命令。此命令在 Amazon GameLift 中创建一个新的构建记录并从您指定的位置上传文件。
发送上传请求。在命令行窗口中,键入以下 upload-build 命令和参数。
aws gamelift upload-build \ --name
user-defined name of build
\ --operating-systemsupported OS
\ --server-sdk-versionAmazon GameLift server SDK version
\ --build-rootbuild path
\ --build-versionuser-defined build number
\ --regionregion name
-
operating-system – 游戏服务器构建的运行时环境。您必须指定操作系统值。您稍后无法更新。
-
server-sdk-version – 您的游戏服务器与之集成的 Amazon GameLift 服务器软件开发工具包版本。如果您没有提供值,则 Amazon GameLift 会使用默认值
4.0.2
。如果您指定的服务器软件开发工具包版本不正确,则在调用InitSdk
建立与 Amazon GameLift 服务的连接时,游戏服务器构建可能会失败。 -
build-root – 您的构建文件的目录路径。
-
name – 新构建的描述性名称。
-
build-version – 构建文件的版本详细信息。
-
region – 要创建构建的 Amazon 区域。在要部署实例集的区域中创建构建。如果您在多个区域中部署游戏,则需在每个区域中创建一个构建。
注意
使用 aws configure get region 查看您当前的默认区域。要更改默认区域,请使用 aws configure set region
region name
命令。
示例
aws gamelift upload-build \ --operating-system AMAZON_LINUX_2 \ --server-sdk-version "5.0.0" \ --build-root "~/mygame" \ --name "My Game Nightly Build" \ --build-version "build 255" \ --region us-west-2
aws gamelift upload-build \ --operating-system WINDOWS_2016 \ --server-sdk-version "5.0.0" \ --build-root "C:\mygame" \ --name "My Game Nightly Build" \ --build-version "build 255" \ --region us-west-2
为了回应您的上传请求,Amazon GameLift 会提供上传进度。成功上传后,Amazon GameLift 会返回新的构建记录 ID。上传时间取决于游戏文件的大小和连接速度。
使用 Amazon S3 中的文件创建构建
您可以将构建文件存储在 Amazon S3 中,然后从那里将其上传到 Amazon GameLift。在创建构建时,指定 S3 存储桶的位置,然后 Amazon GameLift 会从 Amazon S3 直接检索构建文件。
创建构建资源
-
将构建文件存储在 Amazon S3 中。创建一个 .zip 文件,其中包含打包的构建文件,并将其上传到您 Amazon Web Services 账户中的 S3 存储桶。记下存储桶标签和文件名;您在创建 Amazon GameLift 构建时需要这些内容。
-
向 Amazon GameLift 提供对您构建文件的访问权限。按照在 Amazon S3 中访问游戏构建文件中的说明创建 IAM 角色。创建角色后,记录新角色的 Amazon 资源名称 (ARN),您在创建构建时需要该名称。
-
创建构建 使用 Amazon GameLift 控制台或 Amazon CLI 创建新的构建记录。您必须拥有
PassRole
权限,如Amazon GameLift 的 IAM 权限示例中所述。
更新您的构建文件
您可以使用 Amazon GameLift 控制台或 update-build
Amazon CLI 命令更新构建资源的元数据。
创建 Amazon GameLift 构建后,您将无法更新与之关联的构建文件。对于每组新文件,都要创建一个新的 Amazon GameLift 构建。使用 upload-build
命令,Amazon GameLift 会自动为每个请求创建新的构建记录。如果您使用 create-build
命令提供构建文件,则使用其他名称上传新构建 .zip 文件到 Amazon S3 并通过引用新的文件名创建构建。
对于部署更新的构建,请尝试这些提示:
-
根据需要使用队列和换出实例集。在通过 Amazon GameLift 设置游戏客户端时,指定队列而不是实例集。借助队列,您可以向队列添加新实例集和新构建,然后删除旧实例集。有关更多信息,请参阅《Amazon GameLift 开发人员指南》中的设置游戏会话置放的 GameLift 队列。
-
使用别名将玩家传输到新游戏构建。当您将游戏客户端集成到 Amazon GameLift 时,请指定实例集别名而不是实例集 ID。有关更多信息,请参阅向 Amazon GameLift 舰队添加别名。
-
设置自动构建更新。有关将 Amazon GameLift 部署整合到构建系统的示例脚本和信息,请参阅 Amazon 游戏技术博客上的自动部署到 Amazon GameLift
。
添加构建安装脚本
创建适用于您的游戏构建操作系统 (OS) 的安装脚本:
-
Windows:创建名为
install.bat
的批处理文件。 -
Linux:创建名为
install.sh
的 Shell 脚本文件。
在创建安装脚本时,请注意以下事项:
-
该脚本不接受任何用户输入。
-
Amazon GameLift 在托管服务器上的以下位置安装构建并重新创建构建包中的文件目录:
-
Windows 实例集:
C:\game
-
Linux 实例集:
/local/game
-
-
在 Linux 实例集安装过程中,run-as 用户具有对实例文件结构的有限访问权限。此用户对安装您的构建文件的目录拥有全部权限。如果您的安装脚本执行的操作需要管理员权限,请使用 sudo 指定管理员访问权限。默认情况下,Windows 实例集的 run-as 用户具有管理员权限。与安装脚本相关的权限失败会生成一条事件消息,此消息指示脚本出现问题。
-
在 Linux 上,Amazon GameLift 支持常用的 Shell 解释器语言,例如 bash。在安装脚本的顶部添加 shebang (例如
#!/bin/bash
)。要验证对您的首选 Shell 命令的支持,可以远程访问活动的 Linux 实例并打开 Shell 提示符。有关更多信息,请参阅远程连接到 Amazon GameLift 舰队实例。 -
安装脚本不能依赖于 VPC 对等连接。直到 Amazon GameLift 在实例集实例上安装构建后,VPC 对等连接才可用。
例 Windows 安装 bash 文件
此示例 install.bat
文件安装游戏服务器所需的 Visual C++ 运行时组件,然后将结果写入日志文件。脚本包含根目录下构建包中的组件文件。
vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log
例 Linux 安装 Shell 脚本
此示例 install.sh
文件在安装脚本中使用 bash 并将结果写入日志文件。
#!/bin/bash echo 'Hello World' > install.log
此示例 install.sh
文件展示了如何使用 Amazon CloudWatch 代理收集系统级和自定义指标以及处理日志轮换。由于 Amazon GameLift 在服务 VPC 中运行,因此您必须向 Amazon GameLift 授予代表您担任 Amazon Identity and Access Management (IAM) 角色的权限。要允许 Amazon 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