本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将自定义服务器版本上传到亚马逊 GameLift
将游戏服务器与亚马逊集成后 GameLift,将构建文件上传到亚马逊 GameLift。本主题介绍如何打包游戏的编译文件,创建可选的编译安装脚本,然后使用 AWS Command Line Interface(AWS CLI)
打包游戏生成包文件
在将配置的游戏服务器上传到亚马逊之前 GameLift,请将游戏编译文件打包到构建目录中。此目录必须包含运行您的游戏服务器和托管游戏会话所需的所有组件,如下所示:
-
游戏服务器二进制文件 — 运行游戏服务器所需的二进制文件。一个版本可以包含用于在同一平台上运行的多个游戏服务器的二进制文件。有关支持平台的列表,请参阅下载亚马逊 GameLift SDK。
-
依赖关系 — 游戏服务器可执行文件需要运行的任何依赖文件。示例包括资产、配置文件和相关库。
-
安装脚本(可选)— 用于处理在亚马逊 GameLift 托管服务器上安装游戏版本的任务的脚本文件。将此文件放在构建目录的根目录处。亚马逊在创建队列时 GameLift 运行安装脚本。
您可以在构建版本中设置任何应用程序,包括安装脚本,以安全地访问其他AWS服务上的资源。有关如何执行此操作的信息,请参阅与舰队中的其他AWS资源通信。
打包构建文件后,请确保您的游戏服务器可以在全新安装的目标操作系统上运行。这将验证您的软件包中是否包含所有必需的依赖关系,以及您的安装脚本是否准确。
创建亚马逊 GameLift 版本
创建生成包和上传文件时,有几个选项可供选择:
-
从文件目录创建版本。 这是最简单和最常用的选项。
-
使用Amazon S3 简单存储服务 (Amazon S3) 中的文件创建内部版本。使用此选项,您可以在 Amazon S3 中管理您的编译版本。
使用这两种方法,Amazon 使用唯一的构建 ID 和其他元数据 GameLift 创建新的编译资源。生成以 “初始化” 状态开始。亚马逊 GameLift获取游戏服务器文件后,编译将变为 “就绪” 状态。
构建准备就绪后,您可以将其部署到新的 Amazon GameLift 舰队。有关更多信息,请参阅创建亚马逊 GameLift 托管舰队。当 Amazon GameLift 设置新队列时,它会将构建文件下载到每个队列实例并安装构建文件。
从文件目录创建版本
要创建存储在任何位置(包括本地目录)的游戏版本,请使用upload-build
AWS CLI命令。此命令在 Amazon 中创建新的编译记录 GameLift 并从您指定的位置上传文件。
发送上传请求。在命令行窗口中,输入以下upload-build命令和参数。
aws gamelift upload-build \ --operating-system
supported OS
\ --build-rootbuild path
\ --nameuser-defined name of build
\ --build-versionuser-defined build number
\ --regionregion name
-
operating-system— 游戏服务器版本的操作系统。如果未指定操作系统,则 Amazon 将 GameLift 使用默认值 (
WINDOWS_2012
)。您无法更新。 -
build-root— 您的生成文件的目录路径。
-
name— 新版本的描述性名称。
-
build-version— 编译文件的版本详细信息。
-
region— 要创建内部版本的AWS区域。在计划部署舰队的区域中创建内部版本。如果要在多个区域部署游戏,请在每个区域中创建一个内部版本。
注意 使用查看您当前的默认区域aws configure get region。要更改您的默认区域,请使用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。上传时间取决于游戏文件的大小和连接速度。
使用 Amazon S3 中的文件创建内部版本
您可以将构建文件存储在 Amazon S3 中,然后 GameLift 从那里将其上传到亚马逊。创建构建版本时,指定 S3 存储桶位置,然后 Amazon 直接从 Amazon S3 GameLift 检索构建文件。
创建生成资源
-
将构建文件存储在 Amazon S3 中。创建包含打包构建文件的.zip 文件,并将其上传到您的 S3 存储桶AWS 账户。记下存储桶标签和文件名,在创 GameLift 建 Amazon 版本时需要这些标签。
-
授予亚马逊 GameLift 访问您的编译文件的权限。按照中的说明创建 IAM 角色在 Amazon S3 中访问游戏编译文件。创建完角色后,请记下新角色的 Amazon Resource ce ce (ARN),创建完角色后,您将需要此信息。
-
创建版本。使用 Amazon GameLift 控制台或AWS CLI,创建新的构建记录。您必须拥有
PassRole
权限,如中所述AAAAAAAAAAA GameLift。
更新您的编译文件
您可以使用 Amazon GameLift 控制台或update-build
AWS CLI命令更新编译资源的元数据。
创建 Amazon GameLift 版本后,您无法更新与其关联的编译文件。对于每组新文件,创建一个新的 Amazon GameLift 版本。使用该upload-build
命令,Amazon GameLift 会自动为每个请求创建新的构建记录。如果您使用create-build
命令提供构建文件,请将名称不同的新 build.zip 文件上传到 Amazon S3,并通过引用新文件名创建内部版本。
对于部署更新的生成包,请尝试这些提示:
-
根据需要使用队列和换出队组。在使用亚马逊设置游戏客户端时 GameLift,请指定队列而不是舰队。使用队列,您可以将具有新版本的新舰队添加到队列中,并移除旧舰队。有关更多信息,请参阅设置游戏会话置放置放置放会话置放置放会 GameLift :
-
使用别名将玩家转移到新游戏生成包中。将您的游戏客户端与亚马逊集成时 GameLift,请指定舰队别名而不是舰队 ID。有关更多信息,请参阅Amazon 队列 Amazon GameLift 队列:
-
设置自动编译更新。有关将 Amazon GameLift 部署整合到构建系统的示例脚本和信息,请参阅AWS游戏技术博客 GameLift上的 “自动部署到亚马逊
”。
添加生成包安装脚本
为游戏内部版本的操作系统 (OS) 创建安装脚本:
-
Windows:创建名为的批处理文件
install.bat
。 -
Linux:创建名为的外壳脚本文件
install.sh
。
在创建安装脚本时,请注意以下事项:
-
该脚本无法接受任何用户输入。
-
Amazon 在以下位置的托管服务器上 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 对等连接要等到 Amazon 在舰队实例上 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 代理收集系统级和自定义指标,以及处理日志轮换。由于亚马逊在服务 VPC 中 GameLift 运行,因此您必须授予亚马逊 GameLift 权限才能代表您担任AWS Identity and Access Management (IAM) 角色。要允许 Amazon GameLift 担任某个角色,请创建一个包含AWS托管策略的角色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