Plugin for Unreal: Deploy your game to a managed EC2 fleet - Amazon GameLift

Plugin for Unreal: Deploy your game to a managed EC2 fleet

In this workflow, you use the plugin to modify your game for hosting on cloud-based compute resources managed by Amazon GameLift. You add client and server game code for Amazon GameLift functionality, then upload your server build to the Amazon GameLift service for deployment to the cloud-based resources. When this workflow is complete, you'll have a working game client that can connect to your game servers in the cloud.

To start the Amazon GameLift managed Amazon EC2 workflow:
  • In the Unreal editor main toolbar, choose the Amazon GameLift menu, and select Host with Managed EC2. This action opens the plugin page Deploy Amazon EC2 Fleet, which presents a six-step process to integrate, build, deploy, and launch your game components.

Step 1: Set your profile

Choose the profile you want to use when following this workflow. The profile you select impacts all steps in the workflow. All resources you create are associated with the profile's AWS account and are placed in the profile's default AWS Region. The profile user's permissions determine your access to AWS resources and actions.

To set a user profile
  1. Select a profile from the dropdown list of available profiles. If you don't have a profile yet or want to create a new one, go to the Amazon GameLift menu and choose Set AWS User Profiles.

  2. If bootstrap status is not "Active", choose Bootstrap profile and wait for the status to change to "Active".

Step 2: Set up your game code

In this step, you make some updates to your client and server game code. Your hosted game server must be able to communicate with the Amazon GameLift service to accept new game session requests and report status. You game client (through a backend service) must be able to request new game sessions and connect to them.

If you haven't already set up a source-built version of the Unreal Editor, the plugin provides links to instructions and source code.

If you integrated your game for use with an Anywhere fleet, you don't need to make any changes to your game code. You can also use the startup game map with EC2 deployments.

After building your game server, complete the following tasks to prepare it for uploading to Amazon GameLift for hosting.

In the WindowsServer folder, where the Unreal editor packages your server build files by default, make the following additions:

  1. Copy the server build install script into the root of the WindowsServer folder. The install script is included in the plugin download. Look for the file [project-name]/Plugins/Resources/CloudFormation/extra_server_resources/install.bat. Amazon GameLift uses this file to install the server build onto your hosting computes.

  2. Copy the VC_redist.x64.exe file into the root of the WindowsServer folder. This file is included in your Visual Studio installation. It is commonly located at C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Redist/MSVC/v142.

  3. Add the OpenSSL library files to your game server build. You must use the same OpenSSL version that your Unreal Engine 5 version uses. This is a critical step. If you include the wrong version, you might be able to deploy this build, but your game servers won't be able to report ready and host game sessions.

    • Look for the OpenSSL libraries in your game engine source. The location varies depending on your development environment:

      On 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

      On 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

    When you locate the OpenSSL libraries, copy them to your game build package directory at <YourGame>/Binaries/Win64.

For more detailed instructions on preparing a game server built for Linux, see Building the Amazon GameLift Server SDK for Unreal Engine 5 on Amazon Linux.

  1. Designate a working directory to organize your build files. The working directory's structure is deployed as is onto each hosting compute. Add your Linux-built game server and all dependent files.

  2. Create a server build install script in the root of your working directory. If needed,create an install.sh file and add any commands needed to properly install your game server build. Amazon GameLift uses this file to install the server build onto each EC2 hosting resource.

  3. Add the OpenSSL library files to your game server build. You must use the same OpenSSL version that your Unreal Engine 5 version uses. This is a critical step. If you include the wrong version, you might be able to deploy this build, but your game servers won't be able to report ready and host game sessions.

    • Look for the OpenSSL libraries in your game engine source. The location varies depending on your development environment:

      On 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

      On 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

    When you locate the OpenSSL libraries, copy them to your game build package directory at <YourGame>/Binaries/Linux.

Step 3: Select deployment scenario

In this step, you choose the game hosting solution that you want to deploy at this time. You can have multiple deployments of your game, using any of the scenarios.

  • Single-region fleet: Deploys your game server to a single fleet of hosting resources in the active profile's default AWS region. This scenario is a good starting point for testing your server integration with AWS and server build configuration. It deploys the following resources:

    • AWS fleet (On-Demand) with your game server build installed and running.

    • Amazon Cognito user pool and client to enable players to authenticate and start a game.

    • API gateway authorizer that links user pool with APIs.

    • WebACl for throttling excessive player calls to API gateway.

    • API gateway + Lambda function for players to request a game slot. This function calls CreateGameSession() if none are available.

    • API gateway + Lambda function for players to get connection info for their game request.

  • FlexMatch fleet: Deploys your game server to a set of fleets and sets up a FlexMatch matchmaker with rules to create player matches. This scenario uses low-cost Spot hosting with a multi-fleet, multi-location structure for durable availability. This approach is useful when you're ready to start designing a matchmaker component for your hosting solution. In this scenario, you'll create the basic resources for this solution, which you can customize later as needed. It deploys the following resources:

    • FlexMatch matchmaking configuration and matchmaking rule set to accept player requests and form matches.

    • Three AWS fleets with your game server build installed and running in multiple locations. Includes two Spot fleets and one On-Demand fleet as a backup.

    • AWS game session placement queue that fulfills requests for proposed matches by finding the best possible hosting resource (based on viability, cost, player latency, etc.) and starting a game session.

    • Amazon Cognito user pool and client to enable players to authenticate and start a game.

    • API gateway authorizer that links user pool with APIs.

    • WebACl for throttling excessive player calls to API gateway.

    • API gateway + Lambda function for players to request a game slot. This function calls StartMatchmaking().

    • API gateway + Lambda function for players to get connection info for their game request.

    • Amazon DynamoDB tables to store matchmaking tickets for players and game session information.

    • SNS topic + Lambda function to handle GameSessionQueue events.

Step 4: Set game parameters

In this step, you describe your game for uploading to AWS;

  • Server build name: Provide a meaningful name for your game server build. AWS uses this name to refer to the copy of your server build that's uploaded and used for deployments.

  • Server build OS: Enter the operating system that your server is built to run on. This tells AWS what type of compute resources to use to host your game.

  • Game server folder: Identify the path to your local server build folder.

  • Game server build: Identify the path to the game server executable.

  • Game client path: Identify the path to the game client executable.

  • Client configuration output: This field needs to point to a folder in your client build that contains your AWS configuration. Look for it in the following location: [client-build]/[project-name]/Content/CloudFormation.

Step 5: Deploy scenario

In this step, you deploy your game to a cloud hosting solution based on the deployment scenario you chose. This process can take several minutes while AWS validates your server build, provisions hosting resources, installs your game server, launches server processes, and gets them ready to host game sessions.

To start deployment, choose Deploy CloudFormation. You can track the status of your game hosting here. For more detailed information, you can sign in to the AWS Management console for AWS and view event notifications. Be sure to sign in using the same account, user, and AWS Region as the active user profile in the plugin.

When deployment is complete, you have your game server installed on an AWS EC2 instance. At least one server process is running and ready to start a game session.

Step 6: Launch client

At this point, you've completed all of the tasks needed to launch and play your multiplayer game hosted with Amazon GameLift. To play the game, launch an instance of you game client.

If you deployed the single fleet scenario, you can open a single client instance with one player, enter the server map and move around. Open additional instances of the game client to add a second player to the same server game map.

If you deployed the FlexMatch scenario, the solution waits for at least two clients to be queued for game session placement before the players can enter the server map.