

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

# 适用于 Unreal 的插件：将游戏部署到托管式 EC2 实例集
<a name="unreal-plugin-ec2"></a>

在此工作流程中，部署您的游戏，使其托管在 Amazon GameLift Servers 托管的基于云的计算资源上。将您的集成式游戏服务器生成包上传到 Amazon GameLift Servers 服务进行部署。如果您尚未集成游戏代码，请参阅[适用于 Unreal 的插件：集成游戏代码](unreal-plugin-integrate.md)。此工作流程完成后，您将拥有一个可以连接到云端游戏服务器且正常运行的游戏客户端。

**要启动 Amazon GameLift Servers 托管的 Amazon EC2 工作流程，请执行以下操作：**
+ 在 Unreal 编辑器主工具栏中，选择 Amazon GameLift Servers 菜单，然后选择**通过托管式 EC2 进行托管**。此操作将打开插件页面**部署 Amazon EC2 Fleet**，其中提供了集成、构建、部署和启动游戏组件的六步流程。

## 步骤 1：设置配置文件
<a name="unreal-plugin-ec2-profile"></a>

选择您要在遵循此工作流程时使用的配置文件。您选择的配置文件会影响工作流程中的所有步骤。您创建的所有资源都与个人资料的 AWS 账户相关联，并放置在个人资料的默认 AWS 区域中。个人资料用户的权限决定了您对 AWS 资源和操作的访问权限。

**设置用户配置文件**

1. 从可用配置文件的下拉列表中选择一个配置文件。如果您还没有个人资料或想要创建新的个人资料，请前往 **Amazon GameLift** 菜单并选择 “**设置 AWS 用户资料**”。

1. 如果引导状态不是“活动”，请选择**引导配置文件**并等待状态变为“活动”。

## 步骤 2：设置游戏代码
<a name="unreal-plugin-ec2-integrate"></a>

在此步骤中，准备您的游戏服务器和游戏客户端生成包，使其能够与适用于 Unreal 的 Amazon GameLift Servers C\+\+ 服务器 SDK 搭配使用。如果您尚未集成游戏代码并构建游戏客户端和服务器可执行文件，请参阅[适用于 Unreal 的插件：集成游戏代码](unreal-plugin-integrate.md)。在本地工作站上输入游戏可执行文件的路径。

在工作流程的这个步骤中，该插件会提供指向说明和源代码的链接，用于设置 Unreal 编辑器的源代码构建版本。在构建客户端和服务器组件时，需要使用源代码构建版本。

构建与服务器 SDK 集的游戏服务器后，请完成以下任务来做好准备，以便将其上传到 Amazon GameLift Servers 进行托管。

### 准备好服务器生成包以进行云部署（Windows）
<a name="w2aab9c11b9c19c35b9b9b1"></a>

在 Unreal 编辑器默认存储服务器生成包文件的 `WindowsServer` 文件夹中，添加以下内容：

1. **将服务器生成包安装脚本复制到 `WindowsServer` 文件夹的根目录中。**安装脚本包含在插件下载内容中。查找文件 `[project-name]/Plugins/Resources/CloudFormation/extra_server_resources/install.bat`。Amazon GameLift Servers 使用此文件在您的托管计算资源上安装服务器生成包。

1. **将 `VC_redist.x64.exe` 文件复制到 `WindowsServer` 文件夹的根目录中。**如果您使用的是 Unreal Engine 5.6 版或更高版本，可以跳过此步骤。此文件包含在您的 Visual Studio 安装中，通常位于 `C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Redist/MSVC/v142`。

1. **将 OpenSSL 库文件添加到游戏服务器生成包中。**如果您的游戏服务器与服务器 SDK 5.3 或更高版本集成，可以跳过此步骤。此版本包含在适用于 Unreal 的 Amazon GameLift Servers 插件 3.0 版或更高版本中。

   手动找到 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`

### 准备好服务器生成包以进行云部署（Linux）
<a name="w2aab9c11b9c19c35b9c11b1"></a>

有关如何准备专为 Linux 构建的游戏服务器的更多详细说明，请参阅[在 Amazon Linux 上为适用于 Unreal Engine 5 的 Amazon GameLift Servers 构建服务器 SDK](https://github.com/aws/amazon-gamelift-toolkit/tree/main/building-gamelift-server-sdk-for-unreal-engine-and-amazon-linux)。

1. **指定一个工作目录来整理生成包文件。**工作目录的结构按原样部署到每个托管计算资源上。添加您的 Linux 构建的游戏服务器以及所有依赖文件。

1. **在工作目录的根目录中创建服务器生成包安装脚本。**如果需要，请创建一个 `install.sh` 文件，并添加正确安装游戏服务器生成包所需的所有命令。Amazon GameLift Servers 使用此文件将服务器生成包安装到每个 EC2 托管资源上。

1. **将 OpenSSL 库文件添加到游戏服务器生成包中。**如果您的游戏服务器与服务器 SDK 5.3 或更高版本集成，可以跳过此步骤。

   手动查找并复制库。您**必须**使用与您的 Unreal Engine 5 版本相同的 OpenSSL 版本。使用错误的 OpenSSL 库部署的游戏生成包将无法与 Amazon GameLift Servers 服务通信。

   1. 在您的游戏引擎源代码中查找 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`

   1. 找到 OpenSSL 库后，将其复制到您的游戏生成包目录中，位置为 `<YourGame>/Binaries/Linux`。

## 步骤 3：选择部署方案
<a name="unreal-plugin-ec2-scenarios"></a>

在此步骤中，您可以选择此时要部署的游戏托管解决方案。使用任何方案，您都可以对游戏进行多个部署。
+ 单区域队列：将您的游戏服务器部署到活动配置文件默认 AWS 区域中的单个托管资源队列。此方案是测试服务器与 AWS 集成和服务器构建配置的良好起点。它部署了以下资源：
  + 已安装并运行游戏服务器构建的AWS 实例集（按需型）。
  + Amazon Cognito 用户群体和客户端，使玩家能够进行身份验证和开始游戏。
  + 与 APIs用户池关联的 API 网关授权器。
  + Web ACl 用于限制玩家对 API 网关的过多调用。
  + API 网关 \+ Lambda 函数，供玩家申请游戏位置。如果两者都不可用，则此函数调用 `CreateGameSession()`。
  + API 网关 \+ Lambda 函数，供玩家获取游戏请求的连接信息。
+ FlexMatch 舰队：将你的游戏服务器部署到一组舰队中，并设置一个带有规则的 FlexMatch 匹配器来创建玩家对战。此方案使用低成本的竞价型托管和一个多实例集、多位置结构，以实现持久可用性。当您准备好开始为托管解决方案设计对战构建器组件时，此方法非常有用。在这种方案下，您将为此解决方案创建基本资源，并可以根据需要后续对其进行自定义。它部署了以下资源：
  + FlexMatch 配对配置和配对规则设置为接受玩家请求和表单匹配。
  + 三个 AWS 实例集，安装了游戏服务器构建，并在多个位置运行。包括两个竞价型实例集和一个按需型实例集作为备份。
  + AWS 游戏会话放置队列，通过寻找尽可能好的托管资源（基于可行性、成本、玩家延迟等）并启动游戏会话来满足对提议对战的请求。
  + Amazon Cognito 用户群体和客户端，使玩家能够进行身份验证和开始游戏。
  + 与 APIs用户池关联的 API 网关授权器。
  + Web ACl 用于限制玩家对 API 网关的过多调用。
  + API 网关 \+ Lambda 函数，供玩家申请游戏位置。此函数调用 `StartMatchmaking()`。
  + API 网关 \+ Lambda 函数，供玩家获取游戏请求的连接信息。
  + Amazon DynamoDB 表，用于存储玩家的对战票证和游戏会话信息。
  + SNS 主题 \+ 用于处理事件的 Lambda 函数。 GameSessionQueue 

## 步骤 4：设置游戏参数
<a name="unreal-plugin-ec2-parameters"></a>

在此步骤中，您将描述要上传到的游戏 AWS；
+ 服务器生成包名称：为游戏服务器生成包提供一个有意义的名称。 AWS 使用此名称来指代上传并用于部署的服务器生成包的副本。
+ 服务器构建操作系统：输入构建服务器以在其中运行的操作系统。这将告诉 AWS 使用哪种类型的计算资源来托管您的游戏。
+ 游戏服务器文件夹：确定本地服务器构建文件夹的路径。
+ 游戏服务器构建：确定游戏服务器可执行文件的路径。
+ 游戏客户端路径：确定游戏客户端可执行文件的路径。
+ 客户端配置输出：此字段需要指向您的客户端版本中包含您的 AWS 配置的文件夹。在以下位置寻找：`[client-build]/[project-name]/Content/CloudFormation`。

## 步骤 5：部署方案
<a name="unreal-plugin-ec2-deploy"></a>

在此步骤中，您将根据所选的部署方案将游戏部署到云托管解决方案。在 AWS 验证服务器生成包、预置托管资源、安装游戏服务器、启动服务器进程以及让它们做好托管游戏会话的准备时，此过程可能需要数分钟。

要开始部署，请选择**部署 CloudFormation**。您可以在此处跟踪您的游戏托管状态。要了解更多详细信息，您可以登录 AWS 管理控制台查看 AWS 和查看事件通知。请务必使用与插件中活跃用户个人资料相同的账户、用户和 AWS 地区登录。

部署完成后，您的游戏服务器将安装在 AWS EC2 实例上。至少有一个服务器进程正在运行并准备开始游戏会话。

## 步骤 6：启动客户端
<a name="unreal-plugin-ec2-launch"></a>

至此，您已经完成了启动和玩使用 Amazon GameLift Servers 托管的多人游戏所需的所有任务。要玩游戏，请启动您的游戏客户端实例。

如果您部署了单个实例集方案，则可以用一个玩家打开一个客户端实例，进入服务器地图并四处移动。打开游戏客户端的其他实例，将第二个玩家添加到同一个服务器游戏地图中。

如果您部署了 FlexMatch 场景，则解决方案会等待至少两个客户端排队等候游戏会话放置，然后玩家才能进入服务器地图。