教程:使用 Amazon GameLift Servers 封装器快速入门 - Amazon GameLift Servers

教程:使用 Amazon GameLift Servers 封装器快速入门

欢迎使用 Amazon GameLift Servers 的入门教程。在本教程中,您将快速部署游戏服务器,使其托管于基于云的计算资源实例集上。通过本教程,您无需将 Amazon GameLift Servers 的服务器 SDK 集成到游戏代码中,而是直接部署具备基本功能的游戏,使其能够与 Amazon GameLift Servers 服务通信并运行游戏会话。您将搭建基础托管解决方案,并通过该解决方案体验自动扩展、对战系统等全套功能。此解决方案同样适用于托管游戏原型,可用于现场演示或测试场景。

这种入门方法的核心优势:

  • 快速部署游戏服务器,实现高效托管。

  • 无需更改游戏代码,零修改要求。

  • 适用于任何游戏可执行文件,不受游戏引擎限制。

  • 探索所有 Amazon GameLift Servers 管理工具,包括监控游戏会话活动和托管运行状况。

注意

该封装器适用于评估场景及基础生产环境使用。详细玩家会话管理等高级功能需完整集成服务器 SDK 方可使用。

先决条件

在开始之前,请确保您满足以下条件:

  • 拥有适当权限的 AWS 账户

  • 已安装 AWS CLI

  • Go 1.18 及以上版本

  • 多人游戏服务器可执行文件

  • Make 工具(Linux/Mac 系统)

  • 已安装 Git 且账户处于活跃状态

概览

本教程将引导您完成以下操作:

  1. 获取并构建封装器

  2. 准备游戏生成包

  3. 配置封装器

  4. 上传游戏服务器生成包

  5. 创建托管式 EC2 实例集

  6. 创建游戏会话并连接

  7. 监控和管理游戏服务器

  8. 扩展游戏服务器

第 1 步:获取并构建游戏服务器封装器

使用以下命令获取游戏服务器封装器源代码并构建封装器。这些命令基于 SSH 执行,您也可直接访问 GitHub 存储库完成操作。

Windows

> git clone git@github.com:amazon-gamelift/amazon-gamelift-servers-game-server-wrapper.git > cd amazon-gamelift-servers-game-server-wrapper > powershell -file .\build.ps1

Mac 和 Linux

$ git clone git@github.com:amazon-gamelift/amazon-gamelift-servers-game-server-wrapper.git $ cd amazon-gamelift-servers-game-server-wrapper $ make

构建成功后,amazon-gamelift-servers-game-server-wrapper 目录下会新增一个“out”目录。该目录有三个文件夹,分别对应三种受支持的托管实例集选项,其中均包含一组构建构件。在本教程中,您将部署至托管式 EC2 实例集,因此需使用 gamelift-servers-managed-ec2 文件夹。

第 2 步:准备游戏服务器生成包

在此步骤中,您将准备要上传到 Amazon GameLift Servers 的游戏服务器生成包文件。

创建游戏目录

现在,在本地计算机上准备一个游戏目录。该目录需包含通过 Amazon GameLift Servers 运行游戏服务器所需的全部文件,包括游戏服务器封装器、游戏服务器生成包,以及使封装器与游戏服务器搭配运行的 config.yaml 配置文件。

使用以下步骤:

  1. 托管式 EC2 实例集。在游戏服务器封装器输出文件夹中,找到用于部署至托管式 EC2 实例集的构建构件。该构建构件会写入如下指定的 out 目录:out\linux\amd64\gamelift-servers-managed-ec2

  2. 将游戏服务器可执行文件及其运行所需的全部关联文件复制至 gamelift-servers-managed-ec2 文件夹。您可根据需要创建嵌套目录。

示例目录结构如下所示:

gamelift-servers-managed-ec2 │-- config.yaml │-- amazon-gamelift-servers-game-server-wrapper │-- MyGame │ │-- server-executable.exe │ │-- my-game-settings │ │ ......

第 3 步:为实例集配置封装器

Amazon GameLift Servers 会管理实例集的计算实例生命周期,启动已安装您的服务器生成包的新实例,并根据需要回收实例。该服务同时管理每个实例上运行的游戏服务器进程生命周期。托管式 EC2 实例集可在多个位置部署实例,确保为全球各地的玩家提供服务支持。

编辑 config.yaml 文件以配置封装器的日志、端口设置及服务器初始化相关参数。

  1. 配置日志设置。游戏服务器封装器会为每个游戏服务器进程生成日志信息。默认日志级别为 debug,以输出最详尽的日志内容。该级别在部署配置和故障排除阶段非常实用,其日志消息详尽程度为最高级。可选日志级别包括 debug、info、warn 和 error(日志详尽程度最低)。

  2. 指定游戏服务器日志目录的路径。游戏服务器日志的默认路径是 ./game-server-logs。该目录包含游戏服务器生成的所有日志,且每个实例均会生成独立日志文件。日志会自动上传至 Amazon GameLift Servers,您可在事件选项卡中查看。有关更多详细信息,请查看“故障排除”部分。

  3. 定义网络端口配置。游戏端口可按需自定义设置。本教程仅需指定一个端口,因为创建的实例集每个实例仅运行一个并发游戏服务器进程。若需同时运行多个进程,则需为每个并发进程配置足够的端口。配置文件中默认端口值为 37016,通用端口规则如下:对于使用 Linux 生成包的实例集,使用 22 端口及 1026-60000 端口段;对于使用 Windows 生成包的实例集,使用 1026-60000 端口段。

  4. 设置游戏服务器可执行文件的路径。对于 ./MyGame/my-server-executable.exe,请根据实际游戏服务器可执行文件的名称和位置自定义其路径。该路径是启动游戏服务器的入口。

  5. 配置游戏服务器参数。至少需指定 -port 参数,并使用之前定义的游戏端口值。“pos”值设为 0,表示这是第一个参数。可按需添加其他参数,这些参数会在游戏服务器启动时传入,用于配置其运行时行为。

    1. 参数:"--port"

    2. 值:"{{.port number here}}"

    3. 位置:0(列表中的第一个参数)

示例配置:

log-config: wrapper-log-level: debug game-server-logs-dir: ./game-server-logs ports: gamePort: 37016 game-server-details: executable-file-path: ./MyGame/my-server-executable game-server-args: - arg: "--port" val: "{{.gameport}}" pos: 0

第 4 步:上传游戏服务器生成包

您现已完成游戏服务器生成包的全部必要配置(含游戏服务器封装器、config.yaml 配置文件及游戏服务器文件),可将该游戏生成包上传至 Amazon GameLift Servers 进行托管。上传游戏生成包的最快上传方式是使用 AWS CLI 命令 upload-build,如以下示例所示。

通过 Windows 上传游戏生成包:

aws gamelift upload-build \ --name gamelift-test-2025-03-11-1 \ --build-version gamelift-test-2025-03-11-1 \ --build-root out/windows/amd64/gamelift-servers-managed-ec2 \ --operating-system WINDOWS_2022 \ --server-sdk-version 5.3.0 \ --region us-west-2
注意

对于 Mac 和 Linux 生成包,请使用 --operating-system AMAZON_LINUX_2023

创建生成包时,请记录 API 响应中的生成包 ID 以将其用于实例集创建。

第 5 步:创建托管式 EC2 实例集

以下步骤描述了最小化实例集配置流程,帮助您快速启动并运行实例集。

创建实例集:

  1. 登录 AWS 管理控制台并导航至 Amazon GameLift Servers。

  2. 在控制台窗口顶部的菜单栏中,确认您的生成包所在的区域 并记录,因为您的实例集必须与生成包处于同一区域,否则将无法查找或选择该生成包。

  3. 在导航窗格的托管式 EC2 部分中,选择生成包

  4. 选择您之前上传的生成包,以显示生成包详情信息页面。

  5. 在“实例集”部分中选择创建实例集,系统将显示“定义托管式 EC2 实例集详细信息”页面。您可在此页面跟踪实例集状态,并通过事件选项卡查看实例集创建事件。

  6. 填写实例集名称和描述,然后选择下一步

  7. 在“定义实例详细信息”页面中,默认显示生成包所在的区域。如需添加任何其他区域,可自行选择。

  8. 对于实例集类型,请选择按需型

  9. 实例类型下选择 c5.large,然后选择下一步

  10. 运行时配置下,由于您上传的游戏生成包已使用封装器,因此需指定封装器可执行文件路径而非游戏服务器本身。对于 Windows 游戏服务器,路径为 C:\game\amazon-gamelift-servers-game-server-wrapper.exe。对于 Linux 游戏服务器,路径为 /local/game/amazon-gamelift-servers-game-server-wrapper

    例如:LaunchPath": "/local/game/amazon-gamelift-servers-game-server-wrapper", "ConcurrentExecutions": 1, "Parameters": "—port 37016

    此外,配置游戏端口范围值,该范围需包含您在 config.yaml 中设置的端口及运行时配置的启动参数端口。config.yaml 中的端口无需与实例集的运行时配置中指定的端口一致,但运行时若后者端口不同,该值将覆盖 config.yaml 中的配置。运行时配置中输入的启动参数同样会覆盖 config.yaml 中的相应设置。

  11. 审核并创建页面上,仔细核对所有配置,然后选择提交以创建您的实例集。实例集会启动容量以托管游戏服务器,状态将随之更新,很快显示为活跃。激活完成且实例集部署就绪后,服务会自动启动封装器,此时封装器已准备就绪,可接收游戏会话请求。

第 6 步:创建游戏会话并连接

当实例集状态显示为活跃时,表明游戏服务器已准备就绪,可等待托管游戏会话。要启动游戏会话,需向 Amazon GameLift Servers 服务发起游戏会话请求。本教程将使用 AWS CLI 执行该请求操作。

注意

需注意,通过 AWS CLI 创建游戏会话适用于测试场景及流程熟悉阶段。在某个时候,您需在游戏后端服务中添加编程 AWS SDK 调用,将其纳入游戏的对战或游戏会话放置系统。

使用以下命令创建游戏会话:

aws gamelift create-game-session \ --fleet-id <FLEET_ID> \ --game-properties '[{"Key": "exampleProperty", "Value": "exampleValue"}]' \ --maximum-player-session-count 3 \ --region us-west-2

您也可向服务器可执行文件传递自定义游戏属性。有关详细信息,请参阅自述文件中的“游戏服务器参数”部分。当 Amazon GameLift Servers 接收到 create-game-session 调用时,会通知封装器启动游戏服务器可执行文件并创建游戏会话。其中,config.yaml 中的配置影响游戏服务器的配置,而控制台中设置的启动参数则决定游戏会话本身的配置。

添加游戏属性的格式示例:

defaultArgs: - arg: "--port" val: "{{.GamePort}}" pos: 0 - arg: "--ipAddress" val: "{{.IpAddress}}" pos: 1 - arg: "--gameSessionId" val: "{{.GameSessionId}}" pos: 2

第 7 步:管理和监控实例集

您的游戏服务器实例集已配置完成且游戏会话已启动,您可通过 Amazon GameLift Servers 控制台对其进行管理和监控。最优操作方式是访问实例集详细信息页面,您可以在其中编辑实例集详细信息或在扩展选项卡上更改实例集扩展和容量。有关如何扩展游戏服务器,请参阅以下部分。

选择指标选项卡可查看描述监控活动指标和硬件指标的图表。有关指标图表的详细信息,请选择您的实例集 ID 旁边的信息链接。此外,您不仅可通过指标选项卡密切监控游戏服务器,还可在 CloudWatch 控制面板中为这些指标添加警报。

要从控制台导航到 CloudWatch 控制面板,请执行以下操作:

  1. 在搜索栏中键入“CloudWatch”,然后从搜索结果列表中进行选择,即可显示 CloudWatch 概述页面。

  2. 向下滚动页面并选择查看 GameLift 控制面板,即可查看基于实例集及游戏会话关键指标的图表。

第 8 步:扩展游戏服务器

下一步将设置自动扩缩。通过自动扩缩,实例集容量会根据游戏服务器的活动负载动态调整。当玩家加入并创建游戏会话时,自动扩缩会新增实例;当玩家需求减少时,自动扩缩会释放闲置实例。这是一种高效的优化方案,可在保障玩家流畅快速体验的前提下,最大程度地降低托管资源消耗和成本。

在游戏启动前,建议为实例集配置自动扩缩。自动扩缩是一种推荐的高效优化方案,可在保障玩家流畅快速体验的前提下,最大程度地降低托管资源消耗和成本。

手动设置实例集容量

手动设置实例集容量

  1. 前往实例集详细信息页面中的扩展选项卡。

  2. 选择一个位置并选择编辑

  3. 要突破当前配置值上限进行扩展,可更改所需实例数值,并调整最小最大实例数设置,完成后选择确认

注意

最大实例数设置可作为临时管控措施,防止扩展过度导致资源浪费与成本超支。

使用基于目标的自动扩缩

使用基于目标的自动扩缩

基于目标的自动扩缩(目标跟踪模式)将实例集扩展与可用游戏会话百分比关联。当玩家流量激增导致可用游戏会话减少时,系统会自动为实例集新增实例以应对需求。

  1. 基于目标的自动扩缩策略下,选择添加策略,然后将实例集的容量设置为在达到您设置的可用游戏会话百分比的阈值时自动更改。设置更大的缓冲空间可更好地应对流量峰值,保障新玩家快速进入游戏,但可能会增加托管成本。

  2. 选择确认以接受更改。

基于规则的自动扩缩提供更精细的控制能力,例如能够将扩展与其他实例集指标关联起来,并设置自定义阈值和扩展响应。它提供功能强大的选项,但需使用 CLI 配置且需经过充分测试,以验证自定义规则的实际运行效果。本教程重点介绍如何首先设置基于目标的策略。

常见问题故障排除

以下是游戏服务器及游戏会话部署运行过程中可能遇到的常见问题。如果服务器或游戏会话运行异常,第一步是检查日志,日志内容可能会揭示新部署项目或生产环境游戏中出现的以下问题之一。

日志中常见问题及排查方向如下:

  • 游戏服务器进程无法启动。这可能是封装器配置错误—请验证配置文件中的启动路径、启动参数及参数项是否正确。

  • 游戏服务器生成包无法运行。大概率是游戏代码存在错误。

  • 玩家无法连接到游戏会话。大概率是端口配置错误。

  • 连接延迟或缓慢。请查看扩展策略和阈值设置。

  • 完全无法建立连接。请验证实例集的端口规则和配置是否正确。

查看 Amazon GameLift Servers 实例集的事件日志

查看 Amazon GameLift Servers 实例集的事件日志

  1. 打开 Amazon GameLift Servers 管理控制台。

  2. 在实例集详细信息页面上,选择事件选项卡并下载日志。您还可以通过指标选项卡,实时监控游戏服务器运行状况、游戏会话激活情况等活动指标和硬件指标。

查看游戏会话日志

查看游戏会话日志

  1. 通过控制台打开您的实例集并打开游戏会话选项卡。

  2. 从列表中选择游戏会话 ID 即可显示其概述页面。

  3. 选择下载日志,即可将日志文件下载至本地。

要通过 CLI 查看游戏会话日志,请使用 GetGameSessionLogURL API。Amazon GameLift Servers 会自动将日志存储 14 天。

您还可以为实例集配置 Amazon CloudWatch Logs。这提供了更多日志功能,并可与其他 AWS 监控服务集成。

要通过 CloudWatch 进行实时日志访问或延长保留期,请执行以下操作:

  1. 在 Amazon GameLift Servers 控制台控制面板的顶部的搜索栏中键入“CloudWatch”,然后从结果下拉列表中进行选择。

  2. 前往 CloudWatch 日志组并搜索特定会话。最简单的方式是单击全部搜索,然后使用 gameSessionId 或 clientId 进行筛选。

后续步骤