From 0a2b51c32d2634ece206b2378f7495a512629a23 Mon Sep 17 00:00:00 2001 From: Junbo Liang <68558268+junbo75@users.noreply.github.com> Date: Thu, 24 Jun 2021 14:50:56 -0700 Subject: [PATCH] Address the comments on the CDK application (#1560) [LYN-3649] Address the comments on the CDK application Signed-off-by: John --- Gems/AWSGameLift/cdk/.gitignore | 1 + Gems/AWSGameLift/cdk/README.md | 11 ++-- .../aws_gamelift/aws_gamelift_construct.py | 7 ++- .../cdk/aws_gamelift/fleet_configurations.py | 59 +++++++++---------- .../cdk/aws_gamelift/gamelift_stack.py | 3 +- .../cdk/aws_gamelift/support_stack.py | 2 +- 6 files changed, 44 insertions(+), 39 deletions(-) diff --git a/Gems/AWSGameLift/cdk/.gitignore b/Gems/AWSGameLift/cdk/.gitignore index 383cdd5040..58505a0211 100644 --- a/Gems/AWSGameLift/cdk/.gitignore +++ b/Gems/AWSGameLift/cdk/.gitignore @@ -3,6 +3,7 @@ package-lock.json __pycache__ .pytest_cache .env +.venv *.egg-info # CDK asset staging directory diff --git a/Gems/AWSGameLift/cdk/README.md b/Gems/AWSGameLift/cdk/README.md index 34933d3651..9baaec0f26 100644 --- a/Gems/AWSGameLift/cdk/README.md +++ b/Gems/AWSGameLift/cdk/README.md @@ -53,9 +53,10 @@ to use for environment variables. ## Edit the sample fleet configurations -Before deploy the CDK application, please update the sample fleet configurations defined in the -[sample fleet configurations](aws_gamelift/fleet_configurations.py) - with project specific settings. +Before deploy the CDK application, please update the fleet configurations defined in the +[sample fleet configurations](aws_gamelift/fleet_configurations.py) with project specific settings. +You can either use an existing GameLift build id for creating a fleet or provide the local server package path +for creating a new GameLift build. ## Synthesize the project @@ -74,7 +75,9 @@ $ cdk deploy -c create_game_session_queue=true ``` You can also deploy a support stack which is used to upload local build files to S3 and provide GameLift access -to the S3 objects when create GameLift builds: +to the S3 objects when create GameLift builds. The local build path needs to be specified in the +[sample fleet configurations](aws_gamelift/fleet_configurations.py) if the feature is enabled. Otherwise an existing +build id is required. ``` $ cdk deploy -c upload-with-support-stack=true --all diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py b/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py index a9935b72eb..8eaa7b5dac 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/aws_gamelift_construct.py @@ -20,7 +20,10 @@ from aws_gamelift.support_stack import SupportStack class AWSGameLift(core.Construct): """ - Orchestrates setting up the AWS GameLift Stack(s) + Orchestrates setting up the AWS GameLift Stack(s). + + This construct uses the fleet configurations defined in + aws_gamelift/fleet_configurations.py to set up the GameLift stacks. """ def __init__(self, scope: core.Construct, @@ -41,7 +44,7 @@ class AWSGameLift(core.Construct): f'{stack_name}-Support', stack_name=stack_name, fleet_configurations=fleet_configurations, - description='(Optional) Contains resources for creating GameLift builds with local files', + description='Contains resources for creating GameLift builds with local files', tags=tags, env=env ) diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/fleet_configurations.py b/Gems/AWSGameLift/cdk/aws_gamelift/fleet_configurations.py index d5390ae7b3..f13df250a0 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/fleet_configurations.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/fleet_configurations.py @@ -11,6 +11,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # Configurations for the fleets to deploy. # Modify the fleet configuration fields below before deploying the CDK application. +# Customers can define multiple fleets by copying the existing configuration template below and +# append the new fleet configuration to the FLEET_CONFIGURATIONS list. All the fleets in the list +# will be deployed automatically by this CDK application. # To select the right combination of hosting resources and learn how to configure them to best suit to your application, # please check: https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-design.html FLEET_CONFIGURATIONS = [ @@ -29,7 +32,8 @@ FLEET_CONFIGURATIONS = [ # Required if specify TERMINAL for the Type property, 'message': '', # (Required) A type of routing strategy. - 'type': 'SIMPLE | TERMINAL' + # Choose from SIMPLE or TERMINAL. + 'type': 'SIMPLE' } }, # (Required) Information about a game server build that is installed and @@ -39,17 +43,19 @@ FLEET_CONFIGURATIONS = [ # This parameter is required unless the parameters build_path and operating_system are defined and # the conditional variable upload-with-support-stack is set to true 'build_id': '', - # (Conditional) The disk location of the local build file(zip). + # (Conditional) The disk location of the local build file(.zip). # This parameter is required unless the parameter build_id is defined. 'build_path': '', # (Conditional) The operating system that the game server binaries are built to run on. # This parameter is required if the parameter build_path is defined. - 'operating_system': 'AMAZON_LINUX | AMAZON_LINUX_2 | WINDOWS_2012' + # Choose from AMAZON_LINUX, AMAZON_LINUX or WINDOWS_2012. + 'operating_system': 'WINDOWS_2012' }, # (Optional) Information about the use of a TLS/SSL certificate for a fleet. 'certificate_configuration': { # (Required) Indicates whether a TLS/SSL certificate is generated for the fleet. - 'certificate_type': 'DISABLED | GENERATED', + # Choose from DISABLED or GENERATED. + 'certificate_type': 'DISABLED', }, # A human-readable description of the fleet. 'description': 'Amazon GameLift fleet to host game servers.', @@ -59,14 +65,14 @@ FLEET_CONFIGURATIONS = [ 'ec2_inbound_permissions': [ { # (Required) A starting value for a range of allowed port numbers. - # 30090 is the default server port defined by the Multiplayer Gem. - 'from_port': 30090, + # 33450 is the default server port defined by the Multiplayer Gem. + 'from_port': 33450, # (Required) A range of allowed IP addresses. 'ip_range': '', # (Required) The network communication protocol used by the fleet. 'protocol': 'UDP', # (Required) An ending value for a range of allowed port numbers. - 'to_port': 30090 + 'to_port': 33450 }, { # Open the debug port for remote into a Windows fleet. @@ -84,23 +90,14 @@ FLEET_CONFIGURATIONS = [ } ], # (Optional) The GameLift-supported EC2 instance type to use for all fleet instances. - 'ec2_instance_type': 'c3.2xlarge | c3.4xlarge | c3.8xlarge | c3.large | c3.xlarge | c4.2xlarge | c4.4xlarge |' - ' c4.8xlarge | c4.large | c4.xlarge | c5.12xlarge | c5.18xlarge | c5.24xlarge |' - ' c5.2xlarge | c5.4xlarge | c5.9xlarge | c5.large | c5.xlarge | c5a.12xlarge |' - ' c5a.16xlarge | c5a.24xlarge | c5a.2xlarge | c5a.4xlarge | c5a.8xlarge | c5a.large |' - ' c5a.xlarge | m3.2xlarge | m3.large | m3.medium | m3.xlarge | m4.10xlarge | m4.2xlarge |' - ' m4.4xlarge | m4.large | m4.xlarge | m5.12xlarge | m5.16xlarge | m5.24xlarge |' - ' m5.2xlarge | m5.4xlarge | m5.8xlarge | m5.large | m5.xlarge | m5a.12xlarge |' - ' m5a.16xlarge | m5a.24xlarge | m5a.2xlarge | m5a.4xlarge | m5a.8xlarge | m5a.large |' - ' m5a.xlarge | r3.2xlarge | r3.4xlarge | r3.8xlarge | r3.large | r3.xlarge | r4.16xlarge |' - ' r4.2xlarge | r4.4xlarge | r4.8xlarge | r4.large | r4.xlarge | r5.12xlarge |' - ' r5.16xlarge | r5.24xlarge | r5.2xlarge | r5.4xlarge | r5.8xlarge | r5.large |' - ' r5.xlarge | r5a.12xlarge | r5a.16xlarge | r5a.24xlarge | r5a.2xlarge | r5a.4xlarge |' - ' r5a.8xlarge | r5a.large | r5a.xlarge | t2.large | t2.medium | t2.micro | t2.small', + # Choose from the available EC2 instance type list: https://aws.amazon.com/ec2/instance-types/ + 'ec2_instance_type': 'c5.large', # (Optional) Indicates whether to use On-Demand or Spot instances for this fleet. - 'fleet_type': 'ON_DEMAND | SPOT', + # Choose from ON_DEMAND or SPOT + 'fleet_type': 'ON_DEMAND', # (Optional) A game session protection policy to apply to all game sessions hosted on instances in this fleet. - 'new_game_session_protection_policy': 'FullProtection | NoProtection', + # Choose from FullProtection or NoProtection + 'new_game_session_protection_policy': 'NoProtection', # (Optional) A policy that limits the number of game sessions that an individual player # can create on instances in this fleet within a specified span of time. 'resource_creation_limit_policy': { @@ -131,17 +128,19 @@ FLEET_CONFIGURATIONS = [ # run concurrently on each instance. # Provide any integer not less than 1. 'concurrent_executions': 1, - # (Required) The location of a game build executable or the Realtime script file that - # contains the Init() function. - 'launch_path': '(Windows) | ' - '(Linux) /local/game/MyGame/', - # (Optional) An optional list of parameters to pass to the server executable - # or Realtime script on launch. - 'parameters': '' + # (Required) The location of a game build executable that contains the Init() function. + # Game builds are installed on instances at the root: + # Windows (custom game builds only): C:\game. + # Linux: /local/game. + 'launch_path': 'C:\\game\\bin\\server.exe', + # (Optional) An optional list of parameters to pass to the server executable on launch. + 'parameters': '--sv_port 33450 --project-path=C:\\game ' + '--project-cache-path=C:\\game\\assets --engine-path=C:\\game ' + '-bg_ConnectToAssetProcessor=0' } ] } # For additional fleet configurations, please check: - # # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_GameLift.html + # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_GameLift.html } ] diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py b/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py index 99702f054a..28a5552578 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/gamelift_stack.py @@ -118,8 +118,7 @@ class GameLiftStack(core.Stack): def _get_gamelift_build_id(self, build_configuration: dict, identifier: int) -> str: """ - Get the GameLift build id. - Create the GameLift build from the storage location information if the build doesn't exist. + Create a GameLift build using the storage location if the build doesn't exist and return the build id. :param build_configuration: Configuration of the GameLift build. :param identifier: Unique identifier of the build which will be included in the resource id. :return: Build id. diff --git a/Gems/AWSGameLift/cdk/aws_gamelift/support_stack.py b/Gems/AWSGameLift/cdk/aws_gamelift/support_stack.py index 717b220ca7..a4fc134cec 100644 --- a/Gems/AWSGameLift/cdk/aws_gamelift/support_stack.py +++ b/Gems/AWSGameLift/cdk/aws_gamelift/support_stack.py @@ -16,7 +16,7 @@ from aws_cdk import core class SupportStack(core.Stack): """ - The support stack + The Build support stack Defines AWS resources that help to create GameLift builds from local files """