适用于 Unreal 的插件:将游戏部署到托管式容器实例集
使用此引导式插件工作流程为您的游戏服务器创建容器映像,并将其部署到基于容器的托管解决方案。如果您尚未集成游戏代码,请参阅适用于 Unreal 的插件:集成游戏代码。成功完成此工作流程后,您的容器化游戏服务器将在云中运行,您可以使用该插件启动游戏客户端、连接到游戏会话和玩游戏。
开始之前
此工作流程假定您已完成以下任务。
-
将游戏服务器代码与 Amazon GameLift Servers 服务器 SDK 集成。您的托管游戏服务器必须能够与 Amazon GameLift Servers 服务通信,以便能够响应启动新游戏会话和报告游戏会话状态的请求。如果您尚未完成此任务,建议您先按照“通过 Anywhere 托管”插件工作流程进行操作。有关准备游戏服务器代码的指导,请参阅更新游戏服务器代码。对于托管式容器实例集,必须将游戏与服务器 SDK 5.2 版或更高版本集成。
注意
如果您使用的是启动游戏地图,则此任务已经为您完成了。
-
将游戏服务器可执行文件打包,以便在 Linux 上运行。如果您在 Windows 上开发,并且集成了 C++ 服务器 SDK 5.2.x 版或更早版本,则需要使用 Unreal 交叉编译工具包
。或者,您可以设置一个单独的 Linux 工作区,或使用适用于 Linux 的 Windows 子系统(WSL)之类的工具。 -
收集要与游戏服务器生成包一起部署的文件。在本地计算机上,创建一个工作目录来整理将内置到游戏服务器容器映像中的文件。这些文件可能包括游戏依赖项、启动游戏服务器的脚本以及启动容器时的其他进程等。
为游戏服务器生成包添加 OpenSSL 库文件。如果您的游戏服务器与服务器 SDK 5.3 或更高版本集成,可以跳过此步骤。
手动找到 OpenSSL 库并将其复制到您的游戏生成包目录中,位置为
<YourGame>/Binaries/Win64。您必须使用与您的 Unreal Engine 5 版本相同的 OpenSSL 版本。使用错误的 OpenSSL 库部署的游戏生成包将无法与 Amazon GameLift Servers 服务通信。要找到 OpenSSL 库,请查找您的游戏引擎源代码。具体位置因开发环境而异:
在 Windows 上:
-
[ENGINE_ROOT_DIR]\Engine\Extras\ThirdPartyNotUE\libimobiledevice\x64\libssl-1_1-x64.dll -
[ENGINE_ROOT_DIR]\Engine\Extras\ThirdPartyNotUE\libimobiledevice\x64\libcrypto-1_1-x64.dll
在 Linux 上:
-
Engine/Source/Thirdparty/OpenSSL/1.1.1n/include/libssl.so.1.1 -
Engine/Source/Thirdparty/OpenSSL/1.1.1n/include/libcrypto.so.1.1
-
-
将游戏客户端代码与 Amazon GameLift Servers 集成。要完成此任务,其中一种方法是添加已集成的示例资产(包含在插件中)。有关准备游戏客户端代码的指导,请参阅整合客户端游戏地图 。
-
在本地计算机上安装 Docker。如果您希望插件为您创建容器映像并将其推送到 ECR 存储库,则需要安装此工具。或者,您可以手动执行这些任务,并指示插件使用现有的容器映像。有关手动构建映像的更多信息,请参阅为 Amazon GameLift Servers 构建容器映像。
要启动 Amazon GameLift Servers 托管式容器工作流程,请执行以下操作:
在 Unreal 编辑器主工具栏中,选择 Amazon GameLift Servers 菜单,然后选择托管式容器。此操作将打开插件页面通过托管式容器进行托管,其中提供了分步流程,用于创建包含游戏服务器生成包的容器映像、将其部署到容器实例集并启动游戏。
步骤 0:设置配置文件
此部分显示您当前选择的用户配置文件。请确认当前的用户配置文件就是您希望在此工作流程中使用的配置文件。您在此工作流程中创建的所有资源都与配置文件的 AWS 账户相关联,并放置在配置文件的默认 AWS 区域中。配置文件用户的权限决定了您对 AWS 资源和操作的访问权限。
在以下情况下,您可能需要修改所选的用户配置文件:
-
当前未选择任何配置文件。
-
您想要选择其他配置文件或创建新的配置文件。
-
您需要引导所选的配置文件(如果引导状态为非活动)。
设置或更改所选用户配置文件
-
在 Amazon GameLift Servers 菜单中,选择打开 AWS 访问凭证。
第 1 步:评测容器就绪情况
在将游戏服务器部署到容器实例集之前,必须将其打包成容器映像并存储在 Amazon ECR 存储库中。该插件可以为您完成这些任务,或者您也可以手动完成这些任务。在此步骤中,提供有关您的容器映像和 ECR 存储库状态的信息。
使用评测问题告知插件,它需要采取哪些步骤:
-
创建新的容器映像。如果您选择此选项,下一步将提示您输入游戏服务器生成包目录和生成包可执行文件的位置。该插件使用 Dockerfile 模板(由 Amazon GameLift Servers 提供),并自动为您的游戏配置该模板。您可以参阅为 Amazon GameLift Servers 构建容器映像,以查看该模板。选择此选项后,请指明您希望插件存储新映像的位置:
-
创建一个新的 Amazon ECR 存储库,并将容器映像推送到该存储库。该插件使用您选择的用户配置文件中的 AWS 账户和默认 AWS 区域创建私有 ECR 存储库。
-
将容器映像推送到之前创建的 Amazon ECR 存储库。如果您选择此选项,下一步将提示您从列表中选择现有的 Amazon ECR 存储库。该列表包含适用于所选用户配置文件中的 AWS 账户和默认 AWS 区域的所有 Amazon ECR 存储库。您可以选择公有存储库或私有存储库。
-
-
使用现有的容器映像。如果您手动构建了映像,我们建议您使用 Amazon GameLift Servers 提供的 Dockerfile 模板,该模板可在为 Amazon GameLift Servers 构建容器映像中获取。选择此选项后,请指明映像的位置。
本地存储的 Docker 生成的映像。如果您选择此选项,该插件会创建一个新的 Amazon ECR 私有存储库,并将本地映像文件推送到该存储库。下一步将提示您输入映像 ID,插件会使用该 ID 来找到映像文件。
已存储在 Amazon ECR 存储库中的容器映像。如果您选择此选项,下一步将提示您从列表中选择现有的 Amazon ECR 存储库和映像。该列表包含适用于所选用户配置文件中的 AWS 账户和默认 AWS 区域的所有 Amazon ECR 存储库。您可以选择公有存储库或私有存储库。
第 2 步:配置映像部署
在此步骤中,提供插件将您的容器映像部署到容器实例集所需的信息。此步骤要求提供以下信息:
-
您的游戏服务器生成包、容器映像或 Amazon ECR 存储库的位置,具体取决于您在第 1 步中的选择。
-
用于托管式容器部署的方案。
客户端配置输出路径。在您的客户端生成包中选择包含 AWS 配置的文件夹。在以下位置寻找:
[client-build]/[project-name]/Content/CloudFormation。-
可选部署设置。此部分包含插件默认使用的配置设置。您可以修改这些设置,也可以保留默认值
部署方案选项
此方案将您的游戏服务器部署到单个容器实例集。它是测试服务器与 AWS 集成和容器配置的良好起点。它部署了以下资源:
-
Amazon GameLift Servers 容器组定义,描述了如何在容器实例集上部署和运行您的容器映像。
-
已安装并运行您的游戏服务器容器的 Amazon GameLift Servers 容器实例集(按需型),附带别名。
-
Amazon Cognito 用户群体和客户端,使玩家能够进行身份验证和开始游戏。
-
将用户池与 API 关联的 API 网关授权器。
-
Web 访问控制列表(ACL),用于限制玩家对 API 网关的过多调用。
-
代表游戏客户端向 Amazon GameLift Servers 服务发出请求的后端服务,例如请求游戏会话和加入游戏:
-
API 网关 + Lambda 函数,供玩家申请游戏会话位置。如果没有可用的空闲位置,则此函数调用
CreateGameSession()。 -
API 网关 + Lambda 函数,供玩家获取游戏请求的连接信息。
-
此方案将您的游戏服务器部署到容器实例集、配置游戏会话放置并设置 FlexMatch 对战。当您准备开始为托管解决方案设计自定义配对器时,此方案非常有用。使用此方案时,您将为该解决方案创建基本资源,并可以根据需要后续对其进行自定义。它部署了以下资源:
-
Amazon GameLift Servers 容器组定义,描述了如何在容器实例集上部署和运行您的容器映像。
-
已安装并运行您的游戏服务器容器的 Amazon GameLift Servers 容器实例集(按需型),附带别名。
-
FlexMatch 对战配置和对战规则设置为接受玩家请求和组成对战。
-
Amazon GameLift Servers 游戏会话队列,通过寻找尽可能好的托管资源(基于可行性、成本、玩家延迟等)并启动游戏会话来满足对提议对战的请求。
-
Amazon Cognito 用户群体和客户端,使玩家能够进行身份验证和开始游戏。
-
将用户池与 API 关联的 API 网关授权器。
-
Web 访问控制列表(ACL),用于限制玩家对 API 网关的过多调用。
-
代表游戏客户端向 Amazon GameLift Servers 服务发出请求的后端服务,例如请求游戏会话和加入游戏:
-
API 网关 + Lambda 函数,供玩家申请游戏会话位置。如果没有可用的空闲位置,则此函数调用
StartMatchmaking()。 -
API 网关 + Lambda 函数,供玩家获取游戏请求的连接信息。
-
-
DynamoDB 表,用于存储玩家的对战票证和游戏会话信息。
-
Amazon SNS 主题 + Lambda 函数,用于处理 GameSessionQueue 事件。
部署容器实例集
实例集配置完成后,选择部署容器实例集按钮以开始部署。插件将创建容器映像并将其推送到 ECR,为容器实例集预调配托管资源,并为所选托管解决方案场景部署实例集和其他 AWS 资源,整个过程可能需要几分钟。
开始部署时,您可以跟踪每个步骤的进度。根据您的配置,步骤可能包括以下内容:
配置容器映像
创建新的 Amazon ECR 存储库
构建映像并推送到 Amazon ECR
创建容器组定义
创建容器实例集
有关更详细的部署信息,请选择在 AWS 管理控制台中查看。当容器实例集达到活动状态时,即表示实例集正在主动运行容器,其中的服务器进程已准备好托管游戏会话。
部署完成后,您将拥有一个正常运行的容器实例集,随时可以托管游戏会话并接受玩家连接。
您无法停止正在进行的部署。如果部署进入不良状态或失败,您可以使用重置部署选项重新开始。
启动客户端
至此,您已经完成了启动和玩使用 Amazon GameLift Servers 托管的多人游戏所需的所有任务。要玩游戏,请选择启动客户端以启动游戏客户端的本地实例。
-
如果您部署了单个实例集方案,请打开一个包含一名玩家的游戏客户端实例,然后进入服务器地图并进行移动操作。您可以打开游戏客户端的第二个实例,将第二名玩家添加到同一个服务器游戏地图中。
-
如果您部署了 FlexMatch 方案,则托管解决方案会等待至少两个游戏客户端发出对战请求。打开至少两个游戏客户端实例,每个实例各包含一名玩家。这两名玩家将进行匹配,并收到加入游戏会话以进行对战的提示。
更新容器实例集
如果您已成功部署托管式容器托管解决方案,可以使用更新部署功能。此选项可让您更新已部署容器实例集的配置设置,而无需创建新的实例集。
更新部署时,您可以部署包含不同游戏服务器生成包的容器映像,更改 Amazon ECR 存储库,选择不同的部署方案,以及自定义可选配置设置。
如果您已准备好部署更改,请选择“更新”。部署更新所需的时间与全面部署所需的时间类似。有关详细的部署信息,请选择在 AWS 管理控制台中查看。
清理已部署的资源
作为最佳实践,请尽快清理您不再需要的托管式容器解决方案的 AWS 资源。如果不删除这些资源,它们可能会继续产生费用。
请删除以下资源:
托管式容器资源堆栈。此堆栈中的资源取决于您选择的部署方案。要删除整个堆栈,请使用 CloudFormation 控制台。从 Amazon GameLift Servers 插件生成的堆栈使用以下命名规范:
GameLiftPluginForUnreal-{GameName}-Containers。在插件中启动新的托管式容器部署之前,请等待堆栈删除过程完成。有关更多信息,请参阅通过 CloudFormation 控制台删除堆栈。Amazon ECR 存储库。如果您使用插件为容器映像创建了存储库,可能需要删除所有不再需要的存储库。在重置托管式容器部署之前,无需删除存储库。如果您更新或重置部署,除非指示使用其他存储库,否则插件将自动使用同一个存储库。有关更多信息,请参阅在 Amazon ECR 中删除私有存储库。