How to integrate Unreal Engine with GameLift and other AWS services [Tutorial - Video Series]

Hey everyone, about a year ago I made a very simple tutorial on how to integrate Unreal Engine with Amazon GameLift, but I was not very knowledgeable on many GameLift concepts so the end result was just hosting a UE4 server on GameLift and then having clients connect to that server. Over the past year, I have done more research on implementing specific GameLift features such as matchmaking, terminating game sessions, accepting player sessions, and more while following recommended practices. I have also done research on integrating other AWS services with an Unreal Engine game, while following best practices, and ultimately consolidated all of my research into a video series. Just a warning for everyone that these videos are very long, and the reason for that is that I wanted to go in depth and explain as much as possible. There will be more parts, not involving coding, as well as a consolidated version (for those who don’t care about the explanations but just want the project running) in the future, and I will update this post as those new videos come out. However, the tutorial series, as of now, goes over all the coding needed to get the tutorial project setup and running. With that said, hope you guys enjoy!

Table of Contents

Part 1 (https://youtu.be/tOy0xYaP3wA) - Installing Prerequisite files (Visual Studio, Unreal Engine source, etc.)

Part 2 (https://youtu.be/PIg2q0wEPJc) - Buidling the GameLift Server SDK

Part 3 (https://youtu.be/_A4JiDY24gM) - Uploading a server build to GameLift, making a fleet, and creating a queue

Part 4 (https://youtu.be/gbVohFwaeVU) - Setting up for FlexMatch, which involves creating a matchmaking rule set, creating a matchmaking configuration, creating an SNS topic for FlexMatch event notifications, creating a table in DynamoDb to store information about specific event notifications, and creating a Lambda function that is subscribed to the SNS topic

Part 5 (https://youtu.be/t7U8nWHj3cI) - Setting up for Cognito, which involves creating a user pool, , adding the Cognito hosted UI to our Unreal Engine game client, and making a request to an API method on API Gateway that will call a Lambda function for getting temporary user pool tokens

Part 6 (https://youtu.be/TJjn9xcm3Gs) - Setting up the client service (API Gateway + Lambda), which is an API that contains methods that clients will invoke for interacting with GameLift and other AWS services

Part 7 (https://youtu.be/Fx2GUa0RADY) - Modifying the Unreal Engine client code so that the client can use the Cognito user pool tokens to invoke the client service in a way that will ultimately lead to clients connecting to the game server hosted on AWS

Part 8 (https://youtu.be/FY2jfRYTT3w) - Modifying the Unreal Engine server code so that the server can replicate matchmaking information to the clients, accept player sessions when players connect to the game server, terminate the game session when the “game” is over, handle server process interruptions, handle backfill requests, and more

Part 9 (https://youtu.be/V1fIQOpqa4Y) - Remotely accessing a Windows EC2 instance in a GameLift fleet

Link to the Unreal Engine Client/Server code: https://github.com/chris-gong/gamelift-example-ue4
Link to the AWS Lambda Backend code: https://github.com/chris-gong/gamelift-example-lambda

3 Likes

These are really fantastic. You weren’t kidding about going in depth :slight_smile: The video modules seem compartmentalized enough that developers could get all the gamelift/AWS info they need to get up and running and transfer the knowledge to any game engine they want. Thanks for sharing.

1 Like

It would be great if these lessons were for the Lumberyard engine!

1 Like

@chrisgong - Thanks for putting this together. Sure its going to be really helpful.

If you want any suggestions for future videos a video on how to integrate GameLift servers and Steam would be a great topic as folks really struggle with this and theres no good reference source out there :slight_smile:

1 Like

Thank you @Pip, Steam is definitely on todo list but it will take a while since I have to take time to familiarize myself with Steam first.

For some reason I can’t edit my original post, but I just wanted to add on to my tutorial series (should be two more parts left after this).

Part 10 (https://youtu.be/BEfow18dvCA) - Cross compiling an Unreal Engine server for Linux on Windows, packaging a Linux server build, uploading that server build to GameLift, creating a fleet out of that build, and remotely accessing a Linux EC2 instance in a GameLift fleet

Part 11 (https://youtu.be/DyE5rX9rbn8) - Going over auto-scaling, specifically target-tracking, in order to try to ensure that there is enough EC2 instance capacity in your fleets for fluctuating player demand/traffic

Part 12 (https://youtu.be/T3MzZGiVYpI) - Going over pricing details and the free tier for the various AWS services used throughout the tutorial