- Overview
- Prerequisites
- Deployment Steps
- Deployment Validation
- Running the Guidance
- Next Steps
- Cleanup
This guidance helps customers by providing a starter kit for their playtesting needs. Today, customers face many challenges with playtesting. One of those challenges is not having an easy way for playtesters to signup for playtesting. Another challenge is coordinating client-side builds across many unique PC setups around the world. Furthermore, the concern around sharing pre-launch gaming builds can become quite a scary experience for new startups, as they have to find ways to best secure their IP. With this guidance, customers can leverage a full solution made up of three parts: 1. React front end that enables customers to serve their player base with a streamed playtesting experience as well as a full administrative portal for studios and publishers; 2. Full backend infrastructure enabling the front end via APIs, secured with AWS WAF as well as Amazon Cognito for authorization; 3. A starter Discord bot setup that allows playtesters to never leave Discord to "Opt-In" and register for playtest sessions.
- Playtester: A user who will be playtesting a game session via web frontend. This user will be given an URL that will launch them into a web frontend in which they start the game session and play the game. During playtesting, users are expected to record their observations via the test panel provided.
- Playtest Session: A game session that is created by a studio to be active during a given time frame. These sessions can be partial game builds or full game builds that studios upload during the playtest session creation process. a playtest session can have multiple playtesters that will connect to the game session all using Amazon GameLift Streams.
- Observation: Created during the playtest session process. Observations are questions posed by a studio/publisher that require playtester's to respond to during a playtest session. For example, a studio may create a playtest session with these observations. What do you think about the combat style? or How does the layout feel with this current level design? Playtesters respond to each question during a playtesting session.
You are responsible for the cost of the AWS services used while running this Guidance. As of July 2025, the cost for running this Guidance with the default settings in the US East (N. Virginia and Ohio for GameLift Streams) is approximately $11,964 per month for servicing (100 players playing 8 hours per day for a week straight).
We recommend creating an AWS Budget through AWS Cost Explorer to help manage costs. Prices are subject to change. For full details, refer to the pricing webpage for each AWS service used in this Guidance.
The following table provides a sample cost breakdown for deploying this Guidance with the default parameters in the US East (N. Virginia and Ohio) Regions for one month.
AWS service | Dimensions | Cost [USD] per month |
---|---|---|
Amazon API Gateway | 1,000,000 REST API calls per month | $ 3.50 |
Amazon Cognito | 2 active users per month with advanced security feature | $ 0.10 |
Amazon CloudFront | Data transfer out to internet (.264 GB per month), Number of requests (HTTPS) (100000 per month) | $ 0.10 |
Amazon Simple Storage Service (S3) | S3 Standard storage (.00264 GB per month) | $ 0.00 |
AWS Lambda | Number of requests (1000000 per month) | $ 0.00 |
Amazon DynamoDB | Table class (Standard), Average item size (all attributes) (1000 Byte), Data storage size (0.5 GB) | $ 1.63 |
AWS Step Functions | Workflow requests (100 per month), State transitions per workflow (11) | $ 0.00 |
AWS Web Application Firewall (WAF) | Number of Web Access Control Lists (Web ACLs) utilized (2 per month), Number of Rules added per Web ACL (5 per month) | $ 20.60 |
Amazon Bedrock | Claude 3 Haiku, 1 avg request per minute for 8 hours per day. 100 average input tokens with 500 average output tokens | $ 9.36 |
Amazon GameLift Streams | 100 players streaming 8 hours per day, for 7 days, using Windows Gen5 stream class at $2.13 per hour | $ 11,928.00 |
These deployment instructions work on both Windows and Mac-based operating systems. Below are the required installations before deploying:
- Install Node.js (v22 or above). (Optional: install Node.js and npm with the Node Version Manager.
- Install npm
- Use the AWS Cloud Development Kit (AWS CDK). You can use aws configure via AWS CLI or other mechanisms to authenticate your terminal to use CDK
- Make sure you have installed AWS Command Line Interface (AWS CLI)
- Make sure you have your AWS Profile set up to point to the correct account and the us-east-2 region
While the backend stack can technically be deployed to any region, it should be deployed in a region supported by GameLift Streams. Below are the currently supported regions for GameLift Streams:
- US East (N. Virginia)
- US East (Ohio)
- US West (Oregon)
- Asia Pacific (Tokyo)
- Europe (Frankfurt)
- Europe (Ireland)
- Clone the repo using command:
git clone https://github.com/aws-solutions-library-samples/guidance-for-scalable-game-playtesting-and-qa-on-aws.git
- Change directory to the repo folder:
cd <repo-name>/source
- Install dependencies in all subprojects and Lambda functions:
npm run install-all
-
(skip if already have boostrapped account). Perform CDK Bootstrap if you have not previously deployed infrastructure using AWS CDK in your AWS account Supported Regions. NOTE: The default installation is within two regions (us-east-1 for the frontend and us-east-2 for the backend). Be sure you have boostrapped both regions
-
Located the file .env.example within the source directory and remove the .example extentions. Open that .env file and replace each value then save your changes (see images below): NOTE - For passwords make sure you use the following as guidance or installation will fail "Minimum Length 8 characters, Digits required, Upper and Lowercase required, and at least 1 symbol"
- Run the following command to deploy the entire solution (except the Discord Bot):
npm run deploy-all
- When deployment is complete, to access the admin portal use the URL in the PlaytestingFrontendStack Outputs tab within CloudFormation on the AWS Console. Optionally, you should see the URL located in the terminal window after deployment (should see Outputs: PlaytestingFrontendStack.CloudFrontDomain = <YOUR_CLOUDFRONT_URL>). Install time should take 15-20 minutes.
-
Open the CloudFormation console (make sure you are viewing the region with your ApiStack, which should be us-east-2 by default) and click on the Outputs Tab of the PlaytestingApiStack.
-
Copy the Endpoint URL, as you'll need this for the Discord Bot.
-
Open the API Gateway console. On the left-hand side, click on API Keys.
-
Copy the playtesting-api-key API Key (there should be a copy-to-clipboard icon by the masked values). You will need this for the Discord Bot.
-
Open the admin portion of the playtesting solution and login using the admin user.
-
On the dashboard, select the playtest session you wish to set up for registering with the Discord bot and click on the "Copy Session ID to Clipboard" button. This is the final piece needed to configure your Discord bot.
-
Refer here to guide you through editing your Discord bot with these three values, as well as deploying your Discord bot.
-
Open the CloudFormation console and verify the status of the templates PlaytestingFrontendStack in us-east-1 (N. Virgina) and PlaytestingApiStack in us-east-2 (Ohio).
-
Open the CloudFormation console (make sure you are viewing the region with your frontend stack, which should be us-east-1 by default) and click on the Outputs Tab of the PlaytestingFrontendStack.
-
Navigate to the CloudFrontDomain URL listed. Use your admin credentials that you specified when installing the solution to log in. If successful, you should see the home page.
In this guidance, we will walk through the functions of the admin page as well as the playtesting page that playtesters will see. NOTE: This solution does not ship with a testable game.
The solution guidance is shipped with Amazon Cognito, and two accounts are created during installation. The admin user should be used for administration purposes, and the playtester account is distributed to playtesters. If playtesters try to access the admin portion of the React app, they will not be allowed due to Cognito groups. Playtesters receive their credentials upon registration and are prompted to log in when they access the unique URL generated by the Discord bot. Administrators can browse to the CloudFront-generated URL found within the output section of the PlaytestingFrontendStack, where they will be prompted to log in. The token validity for both Admin and Playtester logins is set to 1 hour with the default installation.
Home Page: The home page displays playtest sessions that have been created. You can select a playtest session to view any observation feedback submitted by playtesters. On the right-hand side of the screen, you can expand the window to generate a summarization of received feedback. On the left-hand side of the page, you will see your collapsible menu (expanded by default). Currently, there are two options: Dashboard and Manage Play Sessions.
- "What is the overall opinion of this playtest session based on playtesters' feedback?"
- "What areas should we focus on in our next development cycle based on playtesters' feedback?"
Manage Play Sessions: This view allows users to perform CRUD operations on playtest sessions. For new sessions, click the "Create New" button to start the creation wizard process. For existing sessions, select one to access edit options. Note that when creating new play sessions, AWS requires several minutes to spin up a new GameLift Streams stream group in your account.
Note: When creating a new playtest session, Step 2 gives you the options "Add New Game" or "Select Existing Game." If you haven't previously added an "application" to GameLift Streams or previously used "Add New Game," you will need to select "Add New Game." Your game binaries must be located in an S3 bucket beforehand. Tip: Consider having your CI/CD process deposit game builds into this S3 location to streamline this process.
Note: On Step 3, the default stream configuration uses us-east-2 (Ohio) with an always-on capacity and on-demand capacity of 1. Each location allows you to allocate streaming capacity for available playtesters. For example, if you have a playtest session planned for next weekend and are expecting 100 players, you might want to set the "On-Demand" capacity to 100 and "Always-On" to 0, or mix and match with 50/50.
This guidance demonstrates setting up a single playtest session with a single Discord bot. For multiple playtest sessions running simultaneously, you can deploy multiple versions of the Discord bot with different Session IDs. Additionally, while this guide demonstrates a simple playtest session setup using a single region, you may want to consider leveraging multiple regions.
-
Empty the S3 buckets that host the frontend application:
- Navigate to S3
- Locate and empty the two buckets that begin with "playtestingfrontendstack-xxxxxxxx"
-
Delete the API stack:
- Open the CloudFormation console (ensure you are in us-east-2, the default region for the API Stack)
- Select the PlaytestingApiStack
- Delete the stack
-
Delete the frontend stack:
- Open the CloudFormation console (ensure you are in us-east-1, the default region for the frontend stack)
- Select the PlaytestingFrontendStack
- Delete the stack