/*
* 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.
///
/// -
///
/// ActivatingGameSessions -- Game sessions in the process of being created.
///
///
-
///
/// ActiveGameSessions -- Game sessions that are currently running.
///
///
-
///
/// ActiveInstances -- Fleet instances that are currently running at least one
/// game session.
///
///
-
///
/// AvailableGameSessions -- Additional game sessions that fleet could host simultaneously,
/// given current capacity.
///
///
-
///
/// AvailablePlayerSessions -- Empty player slots in currently active game sessions.
/// This includes game sessions that are not currently accepting players. Reserved player
/// slots are not included.
///
///
-
///
/// CurrentPlayerSessions -- Player slots in active game sessions that are being
/// used by a player or are reserved for a player.
///
///
-
///
/// IdleInstances -- Active instances that are currently hosting zero game sessions.
///
///
///
-
///
/// PercentAvailableGameSessions -- Unused percentage of the total number of game
/// sessions that a fleet could host simultaneously, given current capacity. Use this
/// metric for a target-based scaling policy.
///
///
-
///
/// PercentIdleInstances -- Percentage of the total number of active instances
/// that are hosting zero game sessions.
///
///
-
///
/// QueueDepth -- Pending game session placement requests, in any queue, where
/// the current fleet is the top-priority destination.
///
///
-
///
/// WaitTime -- Current wait time for pending game session placement requests,
/// in any queue, where the current fleet is the top-priority destination.
///
///
///
[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:
///
/// -
///
/// ChangeInCapacity -- add (or subtract) the scaling adjustment value from the
/// current instance count. Positive values scale up while negative values scale down.
///
///
-
///
/// ExactCapacity -- set the instance count to the scaling adjustment value.
///
///
-
///
/// PercentChangeInCapacity -- increase or reduce the current instance count by
/// the scaling adjustment, read as a percentage. Positive values scale up while negative
/// values scale down; for example, a value of "-10" scales the fleet down by 10%.
///
///
///
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;
}
}
}