/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ /* * Do not modify this file. This file is generated from the gamelift-2015-10-01.normal.json service model. */ using System; using System.Collections.Generic; using System.Xml.Serialization; using System.Text; using System.IO; using System.Net; using Amazon.Runtime; using Amazon.Runtime.Internal; namespace Amazon.GameLift.Model { /// /// Container for the parameters to the PutScalingPolicy operation. /// Creates or updates a scaling policy for a fleet. Scaling policies are used to automatically /// scale a fleet's hosting capacity to meet player demand. An active scaling policy instructs /// Amazon GameLift to track a fleet metric and automatically change the fleet's capacity /// when a certain threshold is reached. There are two types of scaling policies: target-based /// and rule-based. Use a target-based policy to quickly and efficiently manage fleet /// scaling; this option is the most commonly used. Use rule-based policies when you need /// to exert fine-grained control over auto-scaling. /// /// /// /// Fleets can have multiple scaling policies of each type in force at the same time; /// you can have one target-based policy, one or multiple rule-based scaling policies, /// or both. We recommend caution, however, because multiple auto-scaling policies can /// have unintended consequences. /// /// /// /// Learn more about how to work with auto-scaling in Set /// Up Fleet Automatic Scaling. /// /// /// /// Target-based policy /// /// /// /// A target-based policy tracks a single metric: PercentAvailableGameSessions. This metric /// tells us how much of a fleet's hosting capacity is ready to host game sessions but /// is not currently in use. This is the fleet's buffer; it measures the additional player /// demand that the fleet could handle at current capacity. With a target-based policy, /// you set your ideal buffer size and leave it to Amazon GameLift to take whatever action /// is needed to maintain that target. /// /// /// /// For example, you might choose to maintain a 10% buffer for a fleet that has the capacity /// to host 100 simultaneous game sessions. This policy tells Amazon GameLift to take /// action whenever the fleet's available capacity falls below or rises above 10 game /// sessions. Amazon GameLift will start new instances or stop unused instances in order /// to return to the 10% buffer. /// /// /// /// To create or update a target-based policy, specify a fleet ID and name, and set the /// policy type to "TargetBased". Specify the metric to track (PercentAvailableGameSessions) /// and reference a TargetConfiguration object with your desired buffer value. /// Exclude all other parameters. On a successful request, the policy name is returned. /// The scaling policy is automatically in force as soon as it's successfully created. /// If the fleet's auto-scaling actions are temporarily suspended, the new policy will /// be in force once the fleet actions are restarted. /// /// /// /// Rule-based policy /// /// /// /// A rule-based policy tracks specified fleet metric, sets a threshold value, and specifies /// the type of action to initiate when triggered. With a rule-based policy, you can select /// from several available fleet metrics. Each policy specifies whether to scale up or /// scale down (and by how much), so you need one policy for each type of action. /// /// /// /// For example, a policy may make the following statement: "If the percentage of idle /// instances is greater than 20% for more than 15 minutes, then reduce the fleet capacity /// by 10%." /// /// /// /// A policy's rule statement has the following structure: /// /// /// /// If [MetricName] is [ComparisonOperator] [Threshold] /// for [EvaluationPeriods] minutes, then [ScalingAdjustmentType] /// to/by [ScalingAdjustment]. /// /// /// /// To implement the example, the rule statement would look like this: /// /// /// /// If [PercentIdleInstances] is [GreaterThanThreshold] [20] /// for [15] minutes, then [PercentChangeInCapacity] to/by [10]. /// /// /// /// To create or update a scaling policy, specify a unique combination of name and fleet /// ID, and set the policy type to "RuleBased". Specify the parameter values for a policy /// rule statement. On a successful request, the policy name is returned. Scaling policies /// are automatically in force as soon as they're successfully created. If the fleet's /// auto-scaling actions are temporarily suspended, the new policy will be in force once /// the fleet actions are restarted. /// /// public partial class PutScalingPolicyRequest : AmazonGameLiftRequest { private ComparisonOperatorType _comparisonOperator; private int? _evaluationPeriods; private string _fleetId; private MetricName _metricName; private string _name; private PolicyType _policyType; private int? _scalingAdjustment; private ScalingAdjustmentType _scalingAdjustmentType; private TargetConfiguration _targetConfiguration; private double? _threshold; /// /// Gets and sets the property ComparisonOperator. /// /// Comparison operator to use when measuring the metric against the threshold value. /// /// public ComparisonOperatorType ComparisonOperator { get { return this._comparisonOperator; } set { this._comparisonOperator = value; } } // Check to see if ComparisonOperator property is set internal bool IsSetComparisonOperator() { return this._comparisonOperator != null; } /// /// Gets and sets the property EvaluationPeriods. /// /// Length of time (in minutes) the metric must be at or beyond the threshold before a /// scaling event is triggered. /// /// [AWSProperty(Min=1)] public int EvaluationPeriods { get { return this._evaluationPeriods.GetValueOrDefault(); } set { this._evaluationPeriods = value; } } // Check to see if EvaluationPeriods property is set internal bool IsSetEvaluationPeriods() { return this._evaluationPeriods.HasValue; } /// /// Gets and sets the property FleetId. /// /// A unique identifier for the fleet to apply this policy to. You can use either the /// fleet ID or ARN value. The fleet cannot be in any of the following statuses: ERROR /// or DELETING. /// /// [AWSProperty(Required=true)] public string FleetId { get { return this._fleetId; } set { this._fleetId = value; } } // Check to see if FleetId property is set internal bool IsSetFleetId() { return this._fleetId != null; } /// /// Gets and sets the property MetricName. /// /// Name of the Amazon GameLift-defined metric that is used to trigger a scaling adjustment. /// For detailed descriptions of fleet metrics, see Monitor /// Amazon GameLift with Amazon CloudWatch. /// /// /// [AWSProperty(Required=true)] public MetricName MetricName { get { return this._metricName; } set { this._metricName = value; } } // Check to see if MetricName property is set internal bool IsSetMetricName() { return this._metricName != null; } /// /// Gets and sets the property Name. /// /// A descriptive label that is associated with a fleet's scaling policy. Policy names /// do not need to be unique. A fleet can have only one scaling policy with the same name. /// /// [AWSProperty(Required=true, Min=1, Max=1024)] public string Name { get { return this._name; } set { this._name = value; } } // Check to see if Name property is set internal bool IsSetName() { return this._name != null; } /// /// Gets and sets the property PolicyType. /// /// The type of scaling policy to create. For a target-based policy, set the parameter /// MetricName to 'PercentAvailableGameSessions' and specify a TargetConfiguration. /// For a rule-based policy set the following parameters: MetricName, ComparisonOperator, /// Threshold, EvaluationPeriods, ScalingAdjustmentType, and ScalingAdjustment. /// /// public PolicyType PolicyType { get { return this._policyType; } set { this._policyType = value; } } // Check to see if PolicyType property is set internal bool IsSetPolicyType() { return this._policyType != null; } /// /// Gets and sets the property ScalingAdjustment. /// /// Amount of adjustment to make, based on the scaling adjustment type. /// /// public int ScalingAdjustment { get { return this._scalingAdjustment.GetValueOrDefault(); } set { this._scalingAdjustment = value; } } // Check to see if ScalingAdjustment property is set internal bool IsSetScalingAdjustment() { return this._scalingAdjustment.HasValue; } /// /// Gets and sets the property ScalingAdjustmentType. /// /// The type of adjustment to make to a fleet's instance count: /// /// /// public ScalingAdjustmentType ScalingAdjustmentType { get { return this._scalingAdjustmentType; } set { this._scalingAdjustmentType = value; } } // Check to see if ScalingAdjustmentType property is set internal bool IsSetScalingAdjustmentType() { return this._scalingAdjustmentType != null; } /// /// Gets and sets the property TargetConfiguration. /// /// An object that contains settings for a target-based scaling policy. /// /// public TargetConfiguration TargetConfiguration { get { return this._targetConfiguration; } set { this._targetConfiguration = value; } } // Check to see if TargetConfiguration property is set internal bool IsSetTargetConfiguration() { return this._targetConfiguration != null; } /// /// Gets and sets the property Threshold. /// /// Metric value used to trigger a scaling event. /// /// public double Threshold { get { return this._threshold.GetValueOrDefault(); } set { this._threshold = value; } } // Check to see if Threshold property is set internal bool IsSetThreshold() { return this._threshold.HasValue; } } }