亚马逊AWS官方博客
Amazon GameLift 高阶使用技巧(二)- 使用 GameLift Container Fleet 运行 UE5 Dedicated Server
![]() |
前言
在快速发展的游戏行业中,游戏服务器的部署和维护一直是开发团队面临的重要挑战。随着容器技术的成熟,将 Unreal Engine 专用服务器容器化部署到 Amazon GameLift 平台上,已经成为一种高效且可靠的解决方案。这种方案不仅简化了部署流程,还提供了更好的资源隔离和扩展性能。
![]() |
本文将详细介绍如何利用 Amazon GameLift 的容器 Fleet 来部署和管理 Unreal Engine5 经典 Demo 游戏 Lyra Game 的专用服务器。通过容器化部署,我们可以实现环境一致性、快速部署、自动扩展等优势。同时,Amazon GameLift 强大的管理功能,如会话管理、自动伸缩、监控告警等,能够帮助开发团队更好地维护游戏服务质量,为玩家提供稳定的游戏体验。另外,目前 GameLift 已经支持 Graviton3 的机型,进一步为用户带来更高的性价比。本文将带大家完成 UE5 Dedicated Server 部署到 Graviton based Container Fleet 的流程。
环境准备
- 请阅读博客 UnrealEngine 5 结合 AmazonGameLift 在 Graviton3 上的实践来熟悉 UE5 的 Linux Arm 包的构建;
- 准备一台 EC2,配置为 R7g.4xlarge,操作系统为 Amazon Linux2023;
- 在 EC2 上安装 Docker。
环境部署
编译适合 GameLift Managed Container 的游戏包
目前 GameLift Managed Container 的 SDK 版本为 5.2.0+,所以我们需要重新基于 5.2.0 版本进行构建游戏包。
1. 将 GameLift-Cpp-ServerSDK-5.2.0 重新进行编译
2. Dockerfile 请使用以下内容
3. 执行命令,获取编译包
执行完毕后,下载 AL2023GameliftUE5sdk.zip
至 Windows 机器上。
4. 在官方网站下载 5.2.0 的 Unreal Engine Plugin 文件至 Windows 机器上。删除原有 C:\Unreal Projects\LyraStarterGame\Plugins 下 GameLiftServerSDK
Plugin文件,并将最新 Plugin 文件拷贝进去
5. 将编译好的文件存放到 LyraStarterGame\Plugins\GameLiftServerSDK\ThirdParty\GameLiftServerSDK\LinuxArm64\x86_64-unknown-linux-gnu
,如果文件夹不存在,请自行创建
6. 将 Project 重新 Build Solution 后,打开 UE Editor, Cook Development Server
构建镜像
1. 首先在 ECR 上创建存储容器镜像
2. 然后将已经打好的 Linux Arm64 的包上传至上面创建的 EC2 上
4. 解压 linuxarm64.zip 的打包后,我们在文件目录下创建 Dockerfile 文件
4. 打包镜像,并且 push 至 ECR 上
配置 GameLift Container group definitions
Amazon GameLift 的 Container group definitions 是一个配置蓝图,用于定义如何将容器化游戏服务器部署到容器机群中,包含游戏服务器容器和支持容器的配置信息。它支持两种类型:GAME_SERVER 和 PER_INSTANCE,可以指定内存、CPU 等资源限制,并且允许维护多个版本。
GAME_SERVER 容器组用于运行游戏服务器应用程序,是托管游戏会话和玩家的必需组件。它可以在 Fleet 实例中复制多份,复制数量取决于软件的计算需求和实例可用资源.
PER_INSTANCE 容器组是可选的,用于在每个 Fleet 实例上运行额外的支持软件,比如监控或后台服务。游戏服务器软件不直接依赖于 PER_INSTANCE 组中的进程。
本文主要是测试 Game Server 的内容,我们首先创建 Group Definitions。
打开 AWS Console
![]() |
![]() |
创建 Container Group Definition 完成。
配置 GameLift Managed Container Fleet
下面我们依据上面的 Container Definition Group 来创建 Managed Container Fleet,打开 AWS Console。
1. 因为在 Fleet 中我们需要将日志保存到 S3 中,所以我们需要创建一个 Fleet Role 绑定到 GameLift Fleet
![]() |
2. 创建日志存储桶,命名格式为 gamelift-*
3. 创建 Fleet,并选择日志存储方式为到 S3 中
![]() |
选择 C7g 实例
![]() |
![]() |
Review,然后提交创建。
等待几分钟之后,我们会看到 Container Fleet 的状态变为 Active
![]() |
同时在日志中,我们可以发现以下日志信息,表示 GameLift 初始化成功
![]() |
连接测试
创建 GameSession
1. 使用以下 AWS Cli 命令来创建 Game Session
![]() |
2. 使用命令连接 Game Session,注意 IP 和端口请根据上图的内容来进行替换
![]() |
至此我们使用 Graviton 容器的方式来部署 UE5 的 Dedicated Server 流程就完毕了。
总结
通过将 Unreal Engine 5 专用服务器容器化并部署到 Amazon GameLift 的 Container Fleet,开发团队能够实现高效、灵活的游戏服务器管理。本文详细介绍了从环境准备到构建镜像及配置 GameLift Managed Container Fleet 的完整流程,涵盖了以下关键点:
- 环境准备:了解构建 UE5 Linux Arm 包的要求,并配置适合的 EC2 实例和 Docker 环境。
- 游戏包编译:通过安装必要的依赖项和使用 GameLift Server SDK,成功编译适合 GameLift Managed Container 的游戏包。
- 镜像构建与推送:创建 ECR 仓库,构建 Docker 镜像并将其推送至 Amazon ECR,实现游戏服务器的容器化。
- Fleet 配置:配置 Container Group Definitions 和 Managed Container Fleet,确保游戏服务器能够在 AWS 环境中高效运行。
- 连接测试:通过创建 Game Session 并连接客户端,验证服务器部署的成功性。
这种容器化部署方案不仅简化了游戏服务器的管理流程,还提供了更好的资源利用率和扩展能力,使开发团队能够专注于提升玩家体验。借助 Amazon GameLift 强大的功能,团队可以更好地维护游戏服务质量,确保稳定的在线游戏体验。
系列博客:
Amazon GameLift 高阶使用技巧(一)- FlexMatch 多模式匹配的实现