All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awscdk.services.gamelift.alpha.package-info Maven / Gradle / Ivy

There is a newer version: 2.170.0-alpha.0
Show newest version
/**
 * 

Amazon GameLift Construct Library

*

* --- *

* cdk-constructs: Experimental *

*

*

* The APIs of higher level constructs in this module are experimental and under active development. * They are subject to non-backward compatible changes or removal in any future version. These are * not subject to the Semantic Versioning model and breaking changes will be * announced in the release notes. This means that while you may use them, you may need to update * your source code when upgrading to a newer version of this package. *

*

*

*


*

* *

* Amazon GameLift is a service used * to deploy, operate, and scale dedicated, low-cost servers in the cloud for session-based multiplayer games. Built * on AWS global computing infrastructure, GameLift helps deliver high-performance, high-reliability game servers * while dynamically scaling your resource usage to meet worldwide player demand. *

* GameLift is composed of three main components: *

*

    *
  • GameLift FlexMatch which is a customizable matchmaking service for * multiplayer games. With FlexMatch, you can * build a custom set of rules that defines what a multiplayer match looks like * for your game, and determines how to * evaluate and select compatible players for each match. You can also customize * key aspects of the matchmaking * process to fit your game, including fine-tuning the matching algorithm.
  • *
  • GameLift hosting for custom or realtime servers which helps you deploy, * operate, and scale dedicated game servers. It regulates the resources needed to * host games, finds available game servers to host new game sessions, and puts * players into games.
  • *
  • GameLift FleetIQ to optimize the use of low-cost Amazon Elastic Compute Cloud * (Amazon EC2) Spot Instances for cloud-based game hosting. With GameLift * FleetIQ, you can work directly with your hosting resources in Amazon EC2 and * Amazon EC2 Auto Scaling while taking advantage of GameLift optimizations to * deliver inexpensive, resilient game hosting for your players
  • *
*

* This module is part of the AWS Cloud Development Kit project. It allows you to define components for your matchmaking * configuration or game server fleet management system. *

*

GameLift FlexMatch

*

*

Defining a Matchmaking configuration

*

* FlexMatch is available both as a GameLift game hosting solution (including * Realtime Servers) and as a standalone matchmaking service. To set up a * FlexMatch matchmaker to process matchmaking requests, you have to create a * matchmaking configuration based on a RuleSet. *

* More details about matchmaking ruleSet are covered below. *

* There is two types of Matchmaking configuration: *

* Through a game session queue system to let FlexMatch forms matches and uses the specified GameLift queue to start a game session for the match. *

*

 * GameSessionQueue queue;
 * MatchmakingRuleSet ruleSet;
 * 
 * 
 * QueuedMatchmakingConfiguration.Builder.create(this, "QueuedMatchmakingConfiguration")
 *         .matchmakingConfigurationName("test-queued-config-name")
 *         .gameSessionQueues(List.of(queue))
 *         .ruleSet(ruleSet)
 *         .build();
 * 
*

* Or through a standalone version to let FlexMatch forms matches and returns match information in an event. *

*

 * MatchmakingRuleSet ruleSet;
 * 
 * 
 * StandaloneMatchmakingConfiguration.Builder.create(this, "StandaloneMatchmaking")
 *         .matchmakingConfigurationName("test-standalone-config-name")
 *         .ruleSet(ruleSet)
 *         .build();
 * 
*

* More details about Game session queue are covered below. *

*

Matchmaking RuleSet

*

* Every FlexMatch matchmaker must have a rule set. The rule set determines the * two key elements of a match: your game's team structure and size, and how to * group players together for the best possible match. *

* For example, a rule set might describe a match like this: Create a match with * two teams of four to eight players each, one team is the cowboy and the other * team the aliens. A team can have novice and experienced players, but the * average skill of the two teams must be within 10 points of each other. If no * match is made after 30 seconds, gradually relax the skill requirements. *

*

 * MatchmakingRuleSet.Builder.create(this, "RuleSet")
 *         .matchmakingRuleSetName("my-test-ruleset")
 *         .content(RuleSetContent.fromJsonFile(join(__dirname, "my-ruleset", "ruleset.json")))
 *         .build();
 * 
*

*

FlexMatch Monitoring

*

* You can monitor GameLift FlexMatch activity for matchmaking configurations and * matchmaking rules using Amazon CloudWatch. These statistics are used to provide * a historical perspective on how your Gamelift FlexMatch solution is performing. *

*

FlexMatch Metrics

*

* GameLift FlexMatch sends metrics to CloudWatch so that you can collect and * analyze the activity of your matchmaking solution, including match acceptance * workflow, ticket consumtion. *

* You can then use CloudWatch alarms to alert you, for example, when matches has * been rejected (potential matches that were rejected by at least one player * since the last report) exceed a certain thresold which could means that you may * have an issue in your matchmaking rules. *

* CDK provides methods for accessing GameLift FlexMatch metrics with default configuration, * such as metricRuleEvaluationsPassed, or metricRuleEvaluationsFailed (see * IMatchmakingRuleSet * for a full list). CDK also provides a generic metric method that can be used * to produce metric configurations for any metric provided by GameLift FlexMatch; * the configurations are pre-populated with the correct dimensions for the * matchmaking configuration. *

*

 * MatchmakingRuleSet matchmakingRuleSet;
 * 
 * // Alarm that triggers when the per-second average of not placed matches exceed 10%
 * MathExpression ruleEvaluationRatio = MathExpression.Builder.create()
 *         .expression("1 - (ruleEvaluationsPassed / ruleEvaluationsFailed)")
 *         .usingMetrics(Map.of(
 *                 "ruleEvaluationsPassed", matchmakingRuleSet.metricRuleEvaluationsPassed(MetricOptions.builder().statistic(Statistic.SUM).build()),
 *                 "ruleEvaluationsFailed", matchmakingRuleSet.metric("ruleEvaluationsFailed")))
 *         .build();
 * Alarm.Builder.create(this, "Alarm")
 *         .metric(ruleEvaluationRatio)
 *         .threshold(0.1)
 *         .evaluationPeriods(3)
 *         .build();
 * 
*

* See: Monitoring Using CloudWatch Metrics * in the Amazon GameLift Developer Guide. *

*

GameLift Hosting

*

*

Uploading builds and scripts to GameLift

*

* Before deploying your GameLift-enabled multiplayer game servers for hosting with the GameLift service, you need to upload * your game server files. This section provides guidance on preparing and uploading custom game server build * files or Realtime Servers server script files. When you upload files, you create a GameLift build or script resource, which * you then deploy on fleets of hosting resources. *

* To troubleshoot fleet activation problems related to the server script, see Debug GameLift fleet issues. *

*

Upload a custom server build to GameLift

*

* Before uploading your configured game server to GameLift for hosting, package the game build files into a build directory. * This directory must include all components required to run your game servers and host game sessions, including the following: *

*

    *
  • Game server binaries – The binary files required to run the game server. A build can include binaries for multiple game * servers built to run on the same platform. For a list of supported platforms, see Download Amazon GameLift SDKs.
  • *
  • Dependencies – Any dependent files that your game server executables require to run. Examples include assets, configuration * files, and dependent libraries.
  • *
  • Install script – A script file to handle tasks that are required to fully install your game build on GameLift hosting * servers. Place this file at the root of the build directory. GameLift runs the install script as part of fleet creation.
  • *
*

* You can set up any application in your build, including your install script, to access your resources securely on other AWS * services. *

*

 * Bucket bucket;
 * 
 * Build build = Build.Builder.create(this, "Build")
 *         .content(Content.fromBucket(bucket, "sample-asset-key"))
 *         .build();
 * 
 * CfnOutput.Builder.create(this, "BuildArn").value(build.getBuildArn()).build();
 * CfnOutput.Builder.create(this, "BuildId").value(build.getBuildId()).build();
 * 
*

* To specify a server SDK version you used when integrating your game server build with Amazon GameLift use the serverSdkVersion parameter: *

*

*

* See Integrate games with custom game servers for more details. *

*

*

*

 * Bucket bucket;
 * 
 * Build build = Build.Builder.create(this, "Build")
 *         .content(Content.fromBucket(bucket, "sample-asset-key"))
 *         .serverSdkVersion("5.0.0")
 *         .build();
 * 
*

*

Upload a realtime server Script

*

* Your server script can include one or more files combined into a single .zip file for uploading. The .zip file must contain * all files that your script needs to run. *

* You can store your zipped script files in either a local file directory or in an Amazon Simple Storage Service (Amazon S3) * bucket or defines a directory asset which is archived as a .zip file and uploaded to S3 during deployment. *

* After you create the script resource, GameLift deploys the script with a new Realtime Servers fleet. GameLift installs your * server script onto each instance in the fleet, placing the script files in /local/game. *

*

 * Bucket bucket;
 * 
 * Script.Builder.create(this, "Script")
 *         .content(Content.fromBucket(bucket, "sample-asset-key"))
 *         .build();
 * 
*

*

Defining a GameLift Fleet

*

*

Creating a custom game server fleet

*

* Your uploaded game servers are hosted on GameLift virtual computing resources, * called instances. You set up your hosting resources by creating a fleet of * instances and deploying them to run your game servers. You can design a fleet * to fit your game's needs. *

*

 * BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(Build.fromAsset(this, "Build", join(__dirname, "CustomerGameServer")))
 *         .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("test-launch-path")
 *                         .build()))
 *                 .build())
 *         .build();
 * 
*

*

Managing game servers launch configuration

*

* GameLift uses a fleet's runtime configuration to determine the type and number * of processes to run on each instance in the fleet. At a minimum, a runtime * configuration contains one server process configuration that represents one * game server executable. You can also define additional server process * configurations to run other types of processes related to your game. Each * server process configuration contains the following information: *

*

    *
  • The file name and path of an executable in your game build.
  • *
  • Optionally Parameters to pass to the process on launch.
  • *
  • The number of processes to run concurrently.
  • *
*

* A GameLift instance is limited to 50 processes running concurrently. *

*

 * Build build;
 * 
 * // Server processes can be delcared in a declarative way through the constructor
 * BuildFleet fleet = BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(build)
 *         .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("/local/game/GameLiftExampleServer.x86_64")
 *                         .parameters("-logFile /local/game/logs/myserver1935.log -port 1935")
 *                         .concurrentExecutions(100)
 *                         .build()))
 *                 .build())
 *         .build();
 * 
*

* See Managing how game servers are launched for hosting * in the Amazon GameLift Developer Guide. *

*

Defining an instance type

*

* GameLift uses Amazon Elastic Compute Cloud (Amazon EC2) resources, called * instances, to deploy your game servers and host game sessions for your players. * When setting up a new fleet, you decide what type of instances your game needs * and how to run game server processes on them (using a runtime configuration). All instances in a fleet use the same type of resources and the same runtime * configuration. You can edit a fleet's runtime configuration and other fleet * properties, but the type of resources cannot be changed. *

*

 * Build build;
 * 
 * BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(build)
 *         .instanceType(InstanceType.of(InstanceClass.C5, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("/local/game/GameLiftExampleServer.x86_64")
 *                         .build()))
 *                 .build())
 *         .build();
 * 
*

*

Using Spot instances

*

* When setting up your hosting resources, you have the option of using Spot * Instances, On-Demand Instances, or a combination. *

* By default, fleet are using on demand capacity. *

*

 * Build build;
 * 
 * BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(build)
 *         .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("/local/game/GameLiftExampleServer.x86_64")
 *                         .build()))
 *                 .build())
 *         .useSpot(true)
 *         .build();
 * 
*

*

Allowing Ingress traffic

*

* The allowed IP address ranges and port settings that allow inbound traffic to * access game sessions on this fleet. *

* New game sessions are assigned an IP address/port number combination, which * must fall into the fleet's allowed ranges. Fleets with custom game builds must * have permissions explicitly set. For Realtime Servers fleets, GameLift * automatically opens two port ranges, one for TCP messaging and one for UDP. *

*

 * Build build;
 * 
 * 
 * BuildFleet fleet = BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(build)
 *         .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("/local/game/GameLiftExampleServer.x86_64")
 *                         .build()))
 *                 .build())
 *         .ingressRules(List.of(IngressRule.builder()
 *                 .source(Peer.anyIpv4())
 *                 .port(Port.tcpRange(100, 200))
 *                 .build()))
 *         .build();
 * // Allowing a specific CIDR for port 1111 on UDP Protocol
 * fleet.addIngressRule(Peer.ipv4("1.2.3.4/32"), Port.udp(1111));
 * 
*

*

Managing locations

*

* A single Amazon GameLift fleet has a home Region by default (the Region you * deploy it to), but it can deploy resources to any number of GameLift supported * Regions. Select Regions based on where your players are located and your * latency needs. *

* By default, home region is used as default location but we can add new locations if needed and define desired capacity *

*

 * Build build;
 * 
 * 
 * // Locations can be added directly through constructor
 * BuildFleet fleet = BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(build)
 *         .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("/local/game/GameLiftExampleServer.x86_64")
 *                         .build()))
 *                 .build())
 *         .locations(List.of(Location.builder()
 *                 .region("eu-west-1")
 *                 .capacity(LocationCapacity.builder()
 *                         .desiredCapacity(5)
 *                         .minSize(2)
 *                         .maxSize(10)
 *                         .build())
 *                 .build(), Location.builder()
 *                 .region("us-east-1")
 *                 .capacity(LocationCapacity.builder()
 *                         .desiredCapacity(5)
 *                         .minSize(2)
 *                         .maxSize(10)
 *                         .build())
 *                 .build()))
 *         .build();
 * 
 * // Or through dedicated methods
 * fleet.addLocation("ap-southeast-1", 5, 2, 10);
 * 
*

*

Specifying an IAM role for a Fleet

*

* Some GameLift features require you to extend limited access to your AWS * resources. This is done by creating an AWS IAM role. The GameLift Fleet class * automatically created an IAM role with all the minimum necessary permissions * for GameLift to access your resources. If you wish, you may * specify your own IAM role. *

*

 * Build build;
 * 
 * Role role = Role.Builder.create(this, "Role")
 *         .assumedBy(new CompositePrincipal(new ServicePrincipal("gamelift.amazonaws.com")))
 *         .build();
 * role.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("CloudWatchAgentServerPolicy"));
 * 
 * BuildFleet fleet = BuildFleet.Builder.create(this, "Game server fleet")
 *         .fleetName("test-fleet")
 *         .content(build)
 *         .instanceType(InstanceType.of(InstanceClass.C5, InstanceSize.LARGE))
 *         .runtimeConfiguration(RuntimeConfiguration.builder()
 *                 .serverProcesses(List.of(ServerProcess.builder()
 *                         .launchPath("/local/game/GameLiftExampleServer.x86_64")
 *                         .build()))
 *                 .build())
 *         .role(role)
 *         .build();
 * 
 * // Actions can also be grantted through dedicated method
 * fleet.grant(role, "gamelift:ListFleets");
 * 
*

*

Alias

*

* A GameLift alias is used to abstract a fleet designation. Fleet designations * tell Amazon GameLift where to search for available resources when creating new * game sessions for players. By using aliases instead of specific fleet IDs, you * can more easily and seamlessly switch player traffic from one fleet to another * by changing the alias's target location. *

*

 * BuildFleet fleet;
 * 
 * 
 * // Add an alias to an existing fleet using a dedicated fleet method
 * Alias liveAlias = fleet.addAlias("live");
 * 
 * // You can also create a standalone alias
 * // You can also create a standalone alias
 * Alias.Builder.create(this, "TerminalAlias")
 *         .aliasName("terminal-alias")
 *         .terminalMessage("A terminal message")
 *         .build();
 * 
*

* See Add an alias to a GameLift fleet * in the Amazon GameLift Developer Guide. *

*

Monitoring your Fleet

*

* GameLift is integrated with CloudWatch, so you can monitor the performance of * your game servers via logs and metrics. *

*

Fleet Metrics

*

* GameLift Fleet sends metrics to CloudWatch so that you can collect and analyze * the activity of your Fleet, including game and player sessions and server * processes. *

* You can then use CloudWatch alarms to alert you, for example, when matches has * been rejected (potential matches that were rejected by at least one player * since the last report) exceed a certain threshold which could means that you may * have an issue in your matchmaking rules. *

* CDK provides methods for accessing GameLift Fleet metrics with default configuration, * such as metricActiveInstances, or metricIdleInstances (see IFleet * for a full list). CDK also provides a generic metric method that can be used * to produce metric configurations for any metric provided by GameLift Fleet, * Game sessions or server processes; the configurations are pre-populated with * the correct dimensions for the matchmaking configuration. *

*

 * BuildFleet fleet;
 * 
 * // Alarm that triggers when the per-second average of not used instances exceed 10%
 * MathExpression instancesUsedRatio = MathExpression.Builder.create()
 *         .expression("1 - (activeInstances / idleInstances)")
 *         .usingMetrics(Map.of(
 *                 "activeInstances", fleet.metric("ActiveInstances", MetricOptions.builder().statistic(Statistic.SUM).build()),
 *                 "idleInstances", fleet.metricIdleInstances()))
 *         .build();
 * Alarm.Builder.create(this, "Alarm")
 *         .metric(instancesUsedRatio)
 *         .threshold(0.1)
 *         .evaluationPeriods(3)
 *         .build();
 * 
*

* See: Monitoring Using CloudWatch Metrics * in the Amazon GameLift Developer Guide. *

*

Game session queue

*

* The game session queue is the primary mechanism for processing new game session * requests and locating available game servers to host them. Although it is * possible to request a new game session be hosted on specific fleet or location. *

* The GameSessionQueue resource creates a placement queue that processes requests for * new game sessions. A queue uses FleetIQ algorithms to determine the best placement * locations and find an available game server, then prompts the game server to start a * new game session. Queues can have destinations (GameLift fleets or aliases), which * determine where the queue can place new game sessions. A queue can have destinations * with varied fleet type (Spot and On-Demand), instance type, and AWS Region. *

*

 * BuildFleet fleet;
 * Alias alias;
 * 
 * 
 * GameSessionQueue queue = GameSessionQueue.Builder.create(this, "GameSessionQueue")
 *         .gameSessionQueueName("my-queue-name")
 *         .destinations(List.of(fleet))
 *         .build();
 * queue.addDestination(alias);
 * 
*

* A more complex configuration can also be definied to override how FleetIQ algorithms prioritize game session placement in order to favour a destination based on Cost, Latency, Destination orderor Location. *

*

 * BuildFleet fleet;
 * Topic topic;
 * 
 * 
 * GameSessionQueue.Builder.create(this, "MyGameSessionQueue")
 *         .gameSessionQueueName("test-gameSessionQueue")
 *         .customEventData("test-event-data")
 *         .allowedLocations(List.of("eu-west-1", "eu-west-2"))
 *         .destinations(List.of(fleet))
 *         .notificationTarget(topic)
 *         .playerLatencyPolicies(List.of(PlayerLatencyPolicy.builder()
 *                 .maximumIndividualPlayerLatency(Duration.millis(100))
 *                 .policyDuration(Duration.seconds(300))
 *                 .build()))
 *         .priorityConfiguration(PriorityConfiguration.builder()
 *                 .locationOrder(List.of("eu-west-1", "eu-west-2"))
 *                 .priorityOrder(List.of(PriorityType.LATENCY, PriorityType.COST, PriorityType.DESTINATION, PriorityType.LOCATION))
 *                 .build())
 *         .timeout(Duration.seconds(300))
 *         .build();
 * 
*

* See Setting up GameLift queues for game session placement * in the Amazon GameLift Developer Guide. *

*

GameLift FleetIQ

*

* The GameLift FleetIQ solution is a game hosting layer that supplements the full * set of computing resource management tools that you get with Amazon EC2 and * Auto Scaling. This solution lets you directly manage your Amazon EC2 and Auto * Scaling resources and integrate as needed with other AWS services. *

*

Defining a Game Server Group

*

* When using GameLift FleetIQ, you prepare to launch Amazon EC2 instances as * usual: make an Amazon Machine Image (AMI) with your game server software, * create an Amazon EC2 launch template, and define configuration settings for an * Auto Scaling group. However, instead of creating an Auto Scaling group * directly, you create a GameLift FleetIQ game server group with your Amazon EC2 * and Auto Scaling resources and configuration. All game server groups must have * at least two instance types defined for it. *

* Once a game server group and Auto Scaling group are up and running with * instances deployed, when updating a Game Server Group instance, only certain * properties in the Auto Scaling group may be overwrite. For all other Auto * Scaling group properties, such as MinSize, MaxSize, and LaunchTemplate, you can * modify these directly on the Auto Scaling group using the AWS Console or * dedicated Api. *

*

 * ILaunchTemplate launchTemplate;
 * IVpc vpc;
 * 
 * 
 * GameServerGroup.Builder.create(this, "Game server group")
 *         .gameServerGroupName("sample-gameservergroup-name")
 *         .instanceDefinitions(List.of(InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C5, InstanceSize.LARGE))
 *                 .build(), InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *                 .build()))
 *         .launchTemplate(launchTemplate)
 *         .vpc(vpc)
 *         .build();
 * 
*

* See Manage game server groups * in the Amazon GameLift FleetIQ Developer Guide. *

*

Scaling Policy

*

* The scaling policy uses the metric PercentUtilizedGameServers to maintain a * buffer of idle game servers that can immediately accommodate new games and * players. *

*

 * ILaunchTemplate launchTemplate;
 * IVpc vpc;
 * 
 * 
 * GameServerGroup.Builder.create(this, "Game server group")
 *         .gameServerGroupName("sample-gameservergroup-name")
 *         .instanceDefinitions(List.of(InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C5, InstanceSize.LARGE))
 *                 .build(), InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *                 .build()))
 *         .launchTemplate(launchTemplate)
 *         .vpc(vpc)
 *         .autoScalingPolicy(AutoScalingPolicy.builder()
 *                 .estimatedInstanceWarmup(Duration.minutes(5))
 *                 .targetTrackingConfiguration(5)
 *                 .build())
 *         .build();
 * 
*

* See Manage game server groups * in the Amazon GameLift FleetIQ Developer Guide. *

*

Specifying an IAM role for GameLift

*

* The GameLift FleetIQ class automatically creates an IAM role with all the minimum necessary * permissions for GameLift to access your Amazon EC2 Auto Scaling groups. If you wish, you may * specify your own IAM role. It must have the correct permissions, or FleetIQ creation or resource usage may fail. *

*

 * ILaunchTemplate launchTemplate;
 * IVpc vpc;
 * 
 * 
 * Role role = Role.Builder.create(this, "Role")
 *         .assumedBy(new CompositePrincipal(new ServicePrincipal("gamelift.amazonaws.com"),
 *         new ServicePrincipal("autoscaling.amazonaws.com")))
 *         .build();
 * role.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName("GameLiftGameServerGroupPolicy"));
 * 
 * GameServerGroup.Builder.create(this, "Game server group")
 *         .gameServerGroupName("sample-gameservergroup-name")
 *         .instanceDefinitions(List.of(InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C5, InstanceSize.LARGE))
 *                 .build(), InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *                 .build()))
 *         .launchTemplate(launchTemplate)
 *         .vpc(vpc)
 *         .role(role)
 *         .build();
 * 
*

* See Controlling Access * in the Amazon GameLift FleetIQ Developer Guide. *

*

Specifying VPC Subnets

*

* GameLift FleetIQ use by default, all supported GameLift FleetIQ Availability * Zones in your chosen region. You can override this parameter to specify VPCs * subnets that you've set up. *

* This property cannot be updated after the game server group is created, and the * corresponding Auto Scaling group will always use the property value that is set * with this request, even if the Auto Scaling group is updated directly. *

*

 * ILaunchTemplate launchTemplate;
 * IVpc vpc;
 * 
 * 
 * GameServerGroup.Builder.create(this, "GameServerGroup")
 *         .gameServerGroupName("sample-gameservergroup-name")
 *         .instanceDefinitions(List.of(InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C5, InstanceSize.LARGE))
 *                 .build(), InstanceDefinition.builder()
 *                 .instanceType(InstanceType.of(InstanceClass.C4, InstanceSize.LARGE))
 *                 .build()))
 *         .launchTemplate(launchTemplate)
 *         .vpc(vpc)
 *         .vpcSubnets(SubnetSelection.builder().subnetType(SubnetType.PUBLIC).build())
 *         .build();
 * 
*

*

FleetIQ Monitoring

*

* GameLift FleetIQ sends metrics to CloudWatch so that you can collect and * analyze the activity of your Game server fleet, including the number of * utilized game servers, and the number of game server interruption due to * limited Spot availability. *

* You can then use CloudWatch alarms to alert you, for example, when the portion * of game servers that are currently supporting game executions exceed a certain * threshold which could means that your autoscaling policy need to be adjust to * add more instances to match with player demand. *

* CDK provides a generic metric method that can be used * to produce metric configurations for any metric provided by GameLift FleetIQ; * the configurations are pre-populated with the correct dimensions for the * matchmaking configuration. *

*

 * IGameServerGroup gameServerGroup;
 * 
 * // Alarm that triggers when the percent of utilized game servers exceed 90%
 * // Alarm that triggers when the percent of utilized game servers exceed 90%
 * Alarm.Builder.create(this, "Alarm")
 *         .metric(gameServerGroup.metric("UtilizedGameServers"))
 *         .threshold(0.9)
 *         .evaluationPeriods(2)
 *         .build();
 * 
*

* See: Monitoring with CloudWatch * in the Amazon GameLift FleetIQ Developer Guide. */ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Experimental) package software.amazon.awscdk.services.gamelift.alpha;





© 2015 - 2025 Weber Informatics LLC | Privacy Policy