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

facade.amazonaws.services.ApplicationAutoScaling.scala Maven / Gradle / Ivy

package facade.amazonaws.services

import scalajs._
import scalajs.js.annotation.JSImport
import scala.scalajs.js.|
import scala.concurrent.Future
import io.scalajs.nodejs
import facade.amazonaws._

package object applicationautoscaling {
  type AdjustmentType            = String
  type Alarms                    = js.Array[Alarm]
  type Cooldown                  = Int
  type DisableScaleIn            = Boolean
  type MaxResults                = Int
  type MetricAggregationType     = String
  type MetricDimensionName       = String
  type MetricDimensionValue      = String
  type MetricDimensions          = js.Array[MetricDimension]
  type MetricName                = String
  type MetricNamespace           = String
  type MetricScale               = Double
  type MetricStatistic           = String
  type MetricType                = String
  type MetricUnit                = String
  type MinAdjustmentMagnitude    = Int
  type PolicyName                = String
  type PolicyType                = String
  type ResourceCapacity          = Int
  type ResourceId                = String
  type ResourceIdMaxLen1600      = String
  type ResourceIdsMaxLen1600     = js.Array[ResourceIdMaxLen1600]
  type ResourceLabel             = String
  type ScalableDimension         = String
  type ScalableTargets           = js.Array[ScalableTarget]
  type ScalingActivities         = js.Array[ScalingActivity]
  type ScalingActivityStatusCode = String
  type ScalingAdjustment         = Int
  type ScalingPolicies           = js.Array[ScalingPolicy]
  type ScalingSuspended          = Boolean
  type ScheduledActionName       = String
  type ScheduledActions          = js.Array[ScheduledAction]
  type ServiceNamespace          = String
  type StepAdjustments           = js.Array[StepAdjustment]
  type TimestampType             = js.Date
  type XmlString                 = String

  implicit final class ApplicationAutoScalingOps(private val service: ApplicationAutoScaling) extends AnyVal {

    @inline def deleteScalingPolicyFuture(params: DeleteScalingPolicyRequest): Future[DeleteScalingPolicyResponse] =
      service.deleteScalingPolicy(params).promise.toFuture
    @inline def deleteScheduledActionFuture(
        params: DeleteScheduledActionRequest
    ): Future[DeleteScheduledActionResponse] = service.deleteScheduledAction(params).promise.toFuture
    @inline def deregisterScalableTargetFuture(
        params: DeregisterScalableTargetRequest
    ): Future[DeregisterScalableTargetResponse] = service.deregisterScalableTarget(params).promise.toFuture
    @inline def describeScalableTargetsFuture(
        params: DescribeScalableTargetsRequest
    ): Future[DescribeScalableTargetsResponse] = service.describeScalableTargets(params).promise.toFuture
    @inline def describeScalingActivitiesFuture(
        params: DescribeScalingActivitiesRequest
    ): Future[DescribeScalingActivitiesResponse] = service.describeScalingActivities(params).promise.toFuture
    @inline def describeScalingPoliciesFuture(
        params: DescribeScalingPoliciesRequest
    ): Future[DescribeScalingPoliciesResponse] = service.describeScalingPolicies(params).promise.toFuture
    @inline def describeScheduledActionsFuture(
        params: DescribeScheduledActionsRequest
    ): Future[DescribeScheduledActionsResponse] = service.describeScheduledActions(params).promise.toFuture
    @inline def putScalingPolicyFuture(params: PutScalingPolicyRequest): Future[PutScalingPolicyResponse] =
      service.putScalingPolicy(params).promise.toFuture
    @inline def putScheduledActionFuture(params: PutScheduledActionRequest): Future[PutScheduledActionResponse] =
      service.putScheduledAction(params).promise.toFuture
    @inline def registerScalableTargetFuture(
        params: RegisterScalableTargetRequest
    ): Future[RegisterScalableTargetResponse] = service.registerScalableTarget(params).promise.toFuture
  }
}

package applicationautoscaling {
  @js.native
  @JSImport("aws-sdk", "ApplicationAutoScaling")
  class ApplicationAutoScaling() extends js.Object {
    def this(config: AWSConfig) = this()

    def deleteScalingPolicy(params: DeleteScalingPolicyRequest): Request[DeleteScalingPolicyResponse]       = js.native
    def deleteScheduledAction(params: DeleteScheduledActionRequest): Request[DeleteScheduledActionResponse] = js.native
    def deregisterScalableTarget(params: DeregisterScalableTargetRequest): Request[DeregisterScalableTargetResponse] =
      js.native
    def describeScalableTargets(params: DescribeScalableTargetsRequest): Request[DescribeScalableTargetsResponse] =
      js.native
    def describeScalingActivities(
        params: DescribeScalingActivitiesRequest
    ): Request[DescribeScalingActivitiesResponse] = js.native
    def describeScalingPolicies(params: DescribeScalingPoliciesRequest): Request[DescribeScalingPoliciesResponse] =
      js.native
    def describeScheduledActions(params: DescribeScheduledActionsRequest): Request[DescribeScheduledActionsResponse] =
      js.native
    def putScalingPolicy(params: PutScalingPolicyRequest): Request[PutScalingPolicyResponse]       = js.native
    def putScheduledAction(params: PutScheduledActionRequest): Request[PutScheduledActionResponse] = js.native
    def registerScalableTarget(params: RegisterScalableTargetRequest): Request[RegisterScalableTargetResponse] =
      js.native
  }

  object AdjustmentTypeEnum {
    val ChangeInCapacity        = "ChangeInCapacity"
    val PercentChangeInCapacity = "PercentChangeInCapacity"
    val ExactCapacity           = "ExactCapacity"

    val values = js.Object.freeze(js.Array(ChangeInCapacity, PercentChangeInCapacity, ExactCapacity))
  }

  /**
    * Represents a CloudWatch alarm associated with a scaling policy.
    */
  @js.native
  trait Alarm extends js.Object {
    var AlarmARN: ResourceId
    var AlarmName: ResourceId
  }

  object Alarm {
    @inline
    def apply(
        AlarmARN: ResourceId,
        AlarmName: ResourceId
    ): Alarm = {
      val __obj = js.Dynamic.literal(
        "AlarmARN"  -> AlarmARN.asInstanceOf[js.Any],
        "AlarmName" -> AlarmName.asInstanceOf[js.Any]
      )

      __obj.asInstanceOf[Alarm]
    }
  }

  /**
    * Represents a CloudWatch metric of your choosing for a target tracking scaling policy to use with Application Auto Scaling.
    *  To create your customized metric specification:
    * * Add values for each required parameter from CloudWatch. You can use an existing metric, or a new metric that you create. To use your own metric, you must first publish the metric to CloudWatch. For more information, see [[https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html|Publish Custom Metrics]] in the Amazon CloudWatch User Guide.
    *  * Choose a metric that changes proportionally with capacity. The value of the metric should increase or decrease in inverse proportion to the number of capacity units. That is, the value of the metric should decrease when capacity increases.
    * For more information about CloudWatch, see [[https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html|Amazon CloudWatch Concepts]].
    */
  @js.native
  trait CustomizedMetricSpecification extends js.Object {
    var MetricName: MetricName
    var Namespace: MetricNamespace
    var Statistic: MetricStatistic
    var Dimensions: js.UndefOr[MetricDimensions]
    var Unit: js.UndefOr[MetricUnit]
  }

  object CustomizedMetricSpecification {
    @inline
    def apply(
        MetricName: MetricName,
        Namespace: MetricNamespace,
        Statistic: MetricStatistic,
        Dimensions: js.UndefOr[MetricDimensions] = js.undefined,
        Unit: js.UndefOr[MetricUnit] = js.undefined
    ): CustomizedMetricSpecification = {
      val __obj = js.Dynamic.literal(
        "MetricName" -> MetricName.asInstanceOf[js.Any],
        "Namespace"  -> Namespace.asInstanceOf[js.Any],
        "Statistic"  -> Statistic.asInstanceOf[js.Any]
      )

      Dimensions.foreach(__v => __obj.updateDynamic("Dimensions")(__v.asInstanceOf[js.Any]))
      Unit.foreach(__v => __obj.updateDynamic("Unit")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[CustomizedMetricSpecification]
    }
  }

  @js.native
  trait DeleteScalingPolicyRequest extends js.Object {
    var PolicyName: ResourceIdMaxLen1600
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
  }

  object DeleteScalingPolicyRequest {
    @inline
    def apply(
        PolicyName: ResourceIdMaxLen1600,
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace
    ): DeleteScalingPolicyRequest = {
      val __obj = js.Dynamic.literal(
        "PolicyName"        -> PolicyName.asInstanceOf[js.Any],
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any]
      )

      __obj.asInstanceOf[DeleteScalingPolicyRequest]
    }
  }

  @js.native
  trait DeleteScalingPolicyResponse extends js.Object {}

  object DeleteScalingPolicyResponse {
    @inline
    def apply(
        ): DeleteScalingPolicyResponse = {
      val __obj = js.Dynamic.literal()

      __obj.asInstanceOf[DeleteScalingPolicyResponse]
    }
  }

  @js.native
  trait DeleteScheduledActionRequest extends js.Object {
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ScheduledActionName: ResourceIdMaxLen1600
    var ServiceNamespace: ServiceNamespace
  }

  object DeleteScheduledActionRequest {
    @inline
    def apply(
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ScheduledActionName: ResourceIdMaxLen1600,
        ServiceNamespace: ServiceNamespace
    ): DeleteScheduledActionRequest = {
      val __obj = js.Dynamic.literal(
        "ResourceId"          -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension"   -> ScalableDimension.asInstanceOf[js.Any],
        "ScheduledActionName" -> ScheduledActionName.asInstanceOf[js.Any],
        "ServiceNamespace"    -> ServiceNamespace.asInstanceOf[js.Any]
      )

      __obj.asInstanceOf[DeleteScheduledActionRequest]
    }
  }

  @js.native
  trait DeleteScheduledActionResponse extends js.Object {}

  object DeleteScheduledActionResponse {
    @inline
    def apply(
        ): DeleteScheduledActionResponse = {
      val __obj = js.Dynamic.literal()

      __obj.asInstanceOf[DeleteScheduledActionResponse]
    }
  }

  @js.native
  trait DeregisterScalableTargetRequest extends js.Object {
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
  }

  object DeregisterScalableTargetRequest {
    @inline
    def apply(
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace
    ): DeregisterScalableTargetRequest = {
      val __obj = js.Dynamic.literal(
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any]
      )

      __obj.asInstanceOf[DeregisterScalableTargetRequest]
    }
  }

  @js.native
  trait DeregisterScalableTargetResponse extends js.Object {}

  object DeregisterScalableTargetResponse {
    @inline
    def apply(
        ): DeregisterScalableTargetResponse = {
      val __obj = js.Dynamic.literal()

      __obj.asInstanceOf[DeregisterScalableTargetResponse]
    }
  }

  @js.native
  trait DescribeScalableTargetsRequest extends js.Object {
    var ServiceNamespace: ServiceNamespace
    var MaxResults: js.UndefOr[MaxResults]
    var NextToken: js.UndefOr[XmlString]
    var ResourceIds: js.UndefOr[ResourceIdsMaxLen1600]
    var ScalableDimension: js.UndefOr[ScalableDimension]
  }

  object DescribeScalableTargetsRequest {
    @inline
    def apply(
        ServiceNamespace: ServiceNamespace,
        MaxResults: js.UndefOr[MaxResults] = js.undefined,
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ResourceIds: js.UndefOr[ResourceIdsMaxLen1600] = js.undefined,
        ScalableDimension: js.UndefOr[ScalableDimension] = js.undefined
    ): DescribeScalableTargetsRequest = {
      val __obj = js.Dynamic.literal(
        "ServiceNamespace" -> ServiceNamespace.asInstanceOf[js.Any]
      )

      MaxResults.foreach(__v => __obj.updateDynamic("MaxResults")(__v.asInstanceOf[js.Any]))
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ResourceIds.foreach(__v => __obj.updateDynamic("ResourceIds")(__v.asInstanceOf[js.Any]))
      ScalableDimension.foreach(__v => __obj.updateDynamic("ScalableDimension")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScalableTargetsRequest]
    }
  }

  @js.native
  trait DescribeScalableTargetsResponse extends js.Object {
    var NextToken: js.UndefOr[XmlString]
    var ScalableTargets: js.UndefOr[ScalableTargets]
  }

  object DescribeScalableTargetsResponse {
    @inline
    def apply(
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ScalableTargets: js.UndefOr[ScalableTargets] = js.undefined
    ): DescribeScalableTargetsResponse = {
      val __obj = js.Dynamic.literal()
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ScalableTargets.foreach(__v => __obj.updateDynamic("ScalableTargets")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScalableTargetsResponse]
    }
  }

  @js.native
  trait DescribeScalingActivitiesRequest extends js.Object {
    var ServiceNamespace: ServiceNamespace
    var MaxResults: js.UndefOr[MaxResults]
    var NextToken: js.UndefOr[XmlString]
    var ResourceId: js.UndefOr[ResourceIdMaxLen1600]
    var ScalableDimension: js.UndefOr[ScalableDimension]
  }

  object DescribeScalingActivitiesRequest {
    @inline
    def apply(
        ServiceNamespace: ServiceNamespace,
        MaxResults: js.UndefOr[MaxResults] = js.undefined,
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ResourceId: js.UndefOr[ResourceIdMaxLen1600] = js.undefined,
        ScalableDimension: js.UndefOr[ScalableDimension] = js.undefined
    ): DescribeScalingActivitiesRequest = {
      val __obj = js.Dynamic.literal(
        "ServiceNamespace" -> ServiceNamespace.asInstanceOf[js.Any]
      )

      MaxResults.foreach(__v => __obj.updateDynamic("MaxResults")(__v.asInstanceOf[js.Any]))
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ResourceId.foreach(__v => __obj.updateDynamic("ResourceId")(__v.asInstanceOf[js.Any]))
      ScalableDimension.foreach(__v => __obj.updateDynamic("ScalableDimension")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScalingActivitiesRequest]
    }
  }

  @js.native
  trait DescribeScalingActivitiesResponse extends js.Object {
    var NextToken: js.UndefOr[XmlString]
    var ScalingActivities: js.UndefOr[ScalingActivities]
  }

  object DescribeScalingActivitiesResponse {
    @inline
    def apply(
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ScalingActivities: js.UndefOr[ScalingActivities] = js.undefined
    ): DescribeScalingActivitiesResponse = {
      val __obj = js.Dynamic.literal()
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ScalingActivities.foreach(__v => __obj.updateDynamic("ScalingActivities")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScalingActivitiesResponse]
    }
  }

  @js.native
  trait DescribeScalingPoliciesRequest extends js.Object {
    var ServiceNamespace: ServiceNamespace
    var MaxResults: js.UndefOr[MaxResults]
    var NextToken: js.UndefOr[XmlString]
    var PolicyNames: js.UndefOr[ResourceIdsMaxLen1600]
    var ResourceId: js.UndefOr[ResourceIdMaxLen1600]
    var ScalableDimension: js.UndefOr[ScalableDimension]
  }

  object DescribeScalingPoliciesRequest {
    @inline
    def apply(
        ServiceNamespace: ServiceNamespace,
        MaxResults: js.UndefOr[MaxResults] = js.undefined,
        NextToken: js.UndefOr[XmlString] = js.undefined,
        PolicyNames: js.UndefOr[ResourceIdsMaxLen1600] = js.undefined,
        ResourceId: js.UndefOr[ResourceIdMaxLen1600] = js.undefined,
        ScalableDimension: js.UndefOr[ScalableDimension] = js.undefined
    ): DescribeScalingPoliciesRequest = {
      val __obj = js.Dynamic.literal(
        "ServiceNamespace" -> ServiceNamespace.asInstanceOf[js.Any]
      )

      MaxResults.foreach(__v => __obj.updateDynamic("MaxResults")(__v.asInstanceOf[js.Any]))
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      PolicyNames.foreach(__v => __obj.updateDynamic("PolicyNames")(__v.asInstanceOf[js.Any]))
      ResourceId.foreach(__v => __obj.updateDynamic("ResourceId")(__v.asInstanceOf[js.Any]))
      ScalableDimension.foreach(__v => __obj.updateDynamic("ScalableDimension")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScalingPoliciesRequest]
    }
  }

  @js.native
  trait DescribeScalingPoliciesResponse extends js.Object {
    var NextToken: js.UndefOr[XmlString]
    var ScalingPolicies: js.UndefOr[ScalingPolicies]
  }

  object DescribeScalingPoliciesResponse {
    @inline
    def apply(
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ScalingPolicies: js.UndefOr[ScalingPolicies] = js.undefined
    ): DescribeScalingPoliciesResponse = {
      val __obj = js.Dynamic.literal()
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ScalingPolicies.foreach(__v => __obj.updateDynamic("ScalingPolicies")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScalingPoliciesResponse]
    }
  }

  @js.native
  trait DescribeScheduledActionsRequest extends js.Object {
    var ServiceNamespace: ServiceNamespace
    var MaxResults: js.UndefOr[MaxResults]
    var NextToken: js.UndefOr[XmlString]
    var ResourceId: js.UndefOr[ResourceIdMaxLen1600]
    var ScalableDimension: js.UndefOr[ScalableDimension]
    var ScheduledActionNames: js.UndefOr[ResourceIdsMaxLen1600]
  }

  object DescribeScheduledActionsRequest {
    @inline
    def apply(
        ServiceNamespace: ServiceNamespace,
        MaxResults: js.UndefOr[MaxResults] = js.undefined,
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ResourceId: js.UndefOr[ResourceIdMaxLen1600] = js.undefined,
        ScalableDimension: js.UndefOr[ScalableDimension] = js.undefined,
        ScheduledActionNames: js.UndefOr[ResourceIdsMaxLen1600] = js.undefined
    ): DescribeScheduledActionsRequest = {
      val __obj = js.Dynamic.literal(
        "ServiceNamespace" -> ServiceNamespace.asInstanceOf[js.Any]
      )

      MaxResults.foreach(__v => __obj.updateDynamic("MaxResults")(__v.asInstanceOf[js.Any]))
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ResourceId.foreach(__v => __obj.updateDynamic("ResourceId")(__v.asInstanceOf[js.Any]))
      ScalableDimension.foreach(__v => __obj.updateDynamic("ScalableDimension")(__v.asInstanceOf[js.Any]))
      ScheduledActionNames.foreach(__v => __obj.updateDynamic("ScheduledActionNames")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScheduledActionsRequest]
    }
  }

  @js.native
  trait DescribeScheduledActionsResponse extends js.Object {
    var NextToken: js.UndefOr[XmlString]
    var ScheduledActions: js.UndefOr[ScheduledActions]
  }

  object DescribeScheduledActionsResponse {
    @inline
    def apply(
        NextToken: js.UndefOr[XmlString] = js.undefined,
        ScheduledActions: js.UndefOr[ScheduledActions] = js.undefined
    ): DescribeScheduledActionsResponse = {
      val __obj = js.Dynamic.literal()
      NextToken.foreach(__v => __obj.updateDynamic("NextToken")(__v.asInstanceOf[js.Any]))
      ScheduledActions.foreach(__v => __obj.updateDynamic("ScheduledActions")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[DescribeScheduledActionsResponse]
    }
  }

  object MetricAggregationTypeEnum {
    val Average = "Average"
    val Minimum = "Minimum"
    val Maximum = "Maximum"

    val values = js.Object.freeze(js.Array(Average, Minimum, Maximum))
  }

  /**
    * Describes the dimension names and values associated with a metric.
    */
  @js.native
  trait MetricDimension extends js.Object {
    var Name: MetricDimensionName
    var Value: MetricDimensionValue
  }

  object MetricDimension {
    @inline
    def apply(
        Name: MetricDimensionName,
        Value: MetricDimensionValue
    ): MetricDimension = {
      val __obj = js.Dynamic.literal(
        "Name"  -> Name.asInstanceOf[js.Any],
        "Value" -> Value.asInstanceOf[js.Any]
      )

      __obj.asInstanceOf[MetricDimension]
    }
  }

  object MetricStatisticEnum {
    val Average     = "Average"
    val Minimum     = "Minimum"
    val Maximum     = "Maximum"
    val SampleCount = "SampleCount"
    val Sum         = "Sum"

    val values = js.Object.freeze(js.Array(Average, Minimum, Maximum, SampleCount, Sum))
  }

  object MetricTypeEnum {
    val DynamoDBReadCapacityUtilization          = "DynamoDBReadCapacityUtilization"
    val DynamoDBWriteCapacityUtilization         = "DynamoDBWriteCapacityUtilization"
    val ALBRequestCountPerTarget                 = "ALBRequestCountPerTarget"
    val RDSReaderAverageCPUUtilization           = "RDSReaderAverageCPUUtilization"
    val RDSReaderAverageDatabaseConnections      = "RDSReaderAverageDatabaseConnections"
    val EC2SpotFleetRequestAverageCPUUtilization = "EC2SpotFleetRequestAverageCPUUtilization"
    val EC2SpotFleetRequestAverageNetworkIn      = "EC2SpotFleetRequestAverageNetworkIn"
    val EC2SpotFleetRequestAverageNetworkOut     = "EC2SpotFleetRequestAverageNetworkOut"
    val SageMakerVariantInvocationsPerInstance   = "SageMakerVariantInvocationsPerInstance"
    val ECSServiceAverageCPUUtilization          = "ECSServiceAverageCPUUtilization"
    val ECSServiceAverageMemoryUtilization       = "ECSServiceAverageMemoryUtilization"

    val values = js.Object.freeze(
      js.Array(
        DynamoDBReadCapacityUtilization,
        DynamoDBWriteCapacityUtilization,
        ALBRequestCountPerTarget,
        RDSReaderAverageCPUUtilization,
        RDSReaderAverageDatabaseConnections,
        EC2SpotFleetRequestAverageCPUUtilization,
        EC2SpotFleetRequestAverageNetworkIn,
        EC2SpotFleetRequestAverageNetworkOut,
        SageMakerVariantInvocationsPerInstance,
        ECSServiceAverageCPUUtilization,
        ECSServiceAverageMemoryUtilization
      )
    )
  }

  object PolicyTypeEnum {
    val StepScaling           = "StepScaling"
    val TargetTrackingScaling = "TargetTrackingScaling"

    val values = js.Object.freeze(js.Array(StepScaling, TargetTrackingScaling))
  }

  /**
    * Represents a predefined metric for a target tracking scaling policy to use with Application Auto Scaling.
    */
  @js.native
  trait PredefinedMetricSpecification extends js.Object {
    var PredefinedMetricType: MetricType
    var ResourceLabel: js.UndefOr[ResourceLabel]
  }

  object PredefinedMetricSpecification {
    @inline
    def apply(
        PredefinedMetricType: MetricType,
        ResourceLabel: js.UndefOr[ResourceLabel] = js.undefined
    ): PredefinedMetricSpecification = {
      val __obj = js.Dynamic.literal(
        "PredefinedMetricType" -> PredefinedMetricType.asInstanceOf[js.Any]
      )

      ResourceLabel.foreach(__v => __obj.updateDynamic("ResourceLabel")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[PredefinedMetricSpecification]
    }
  }

  @js.native
  trait PutScalingPolicyRequest extends js.Object {
    var PolicyName: PolicyName
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
    var PolicyType: js.UndefOr[PolicyType]
    var StepScalingPolicyConfiguration: js.UndefOr[StepScalingPolicyConfiguration]
    var TargetTrackingScalingPolicyConfiguration: js.UndefOr[TargetTrackingScalingPolicyConfiguration]
  }

  object PutScalingPolicyRequest {
    @inline
    def apply(
        PolicyName: PolicyName,
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace,
        PolicyType: js.UndefOr[PolicyType] = js.undefined,
        StepScalingPolicyConfiguration: js.UndefOr[StepScalingPolicyConfiguration] = js.undefined,
        TargetTrackingScalingPolicyConfiguration: js.UndefOr[TargetTrackingScalingPolicyConfiguration] = js.undefined
    ): PutScalingPolicyRequest = {
      val __obj = js.Dynamic.literal(
        "PolicyName"        -> PolicyName.asInstanceOf[js.Any],
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any]
      )

      PolicyType.foreach(__v => __obj.updateDynamic("PolicyType")(__v.asInstanceOf[js.Any]))
      StepScalingPolicyConfiguration.foreach(
        __v => __obj.updateDynamic("StepScalingPolicyConfiguration")(__v.asInstanceOf[js.Any])
      )
      TargetTrackingScalingPolicyConfiguration.foreach(
        __v => __obj.updateDynamic("TargetTrackingScalingPolicyConfiguration")(__v.asInstanceOf[js.Any])
      )
      __obj.asInstanceOf[PutScalingPolicyRequest]
    }
  }

  @js.native
  trait PutScalingPolicyResponse extends js.Object {
    var PolicyARN: ResourceIdMaxLen1600
    var Alarms: js.UndefOr[Alarms]
  }

  object PutScalingPolicyResponse {
    @inline
    def apply(
        PolicyARN: ResourceIdMaxLen1600,
        Alarms: js.UndefOr[Alarms] = js.undefined
    ): PutScalingPolicyResponse = {
      val __obj = js.Dynamic.literal(
        "PolicyARN" -> PolicyARN.asInstanceOf[js.Any]
      )

      Alarms.foreach(__v => __obj.updateDynamic("Alarms")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[PutScalingPolicyResponse]
    }
  }

  @js.native
  trait PutScheduledActionRequest extends js.Object {
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ScheduledActionName: ScheduledActionName
    var ServiceNamespace: ServiceNamespace
    var EndTime: js.UndefOr[TimestampType]
    var ScalableTargetAction: js.UndefOr[ScalableTargetAction]
    var Schedule: js.UndefOr[ResourceIdMaxLen1600]
    var StartTime: js.UndefOr[TimestampType]
  }

  object PutScheduledActionRequest {
    @inline
    def apply(
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ScheduledActionName: ScheduledActionName,
        ServiceNamespace: ServiceNamespace,
        EndTime: js.UndefOr[TimestampType] = js.undefined,
        ScalableTargetAction: js.UndefOr[ScalableTargetAction] = js.undefined,
        Schedule: js.UndefOr[ResourceIdMaxLen1600] = js.undefined,
        StartTime: js.UndefOr[TimestampType] = js.undefined
    ): PutScheduledActionRequest = {
      val __obj = js.Dynamic.literal(
        "ResourceId"          -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension"   -> ScalableDimension.asInstanceOf[js.Any],
        "ScheduledActionName" -> ScheduledActionName.asInstanceOf[js.Any],
        "ServiceNamespace"    -> ServiceNamespace.asInstanceOf[js.Any]
      )

      EndTime.foreach(__v => __obj.updateDynamic("EndTime")(__v.asInstanceOf[js.Any]))
      ScalableTargetAction.foreach(__v => __obj.updateDynamic("ScalableTargetAction")(__v.asInstanceOf[js.Any]))
      Schedule.foreach(__v => __obj.updateDynamic("Schedule")(__v.asInstanceOf[js.Any]))
      StartTime.foreach(__v => __obj.updateDynamic("StartTime")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[PutScheduledActionRequest]
    }
  }

  @js.native
  trait PutScheduledActionResponse extends js.Object {}

  object PutScheduledActionResponse {
    @inline
    def apply(
        ): PutScheduledActionResponse = {
      val __obj = js.Dynamic.literal()

      __obj.asInstanceOf[PutScheduledActionResponse]
    }
  }

  @js.native
  trait RegisterScalableTargetRequest extends js.Object {
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
    var MaxCapacity: js.UndefOr[ResourceCapacity]
    var MinCapacity: js.UndefOr[ResourceCapacity]
    var RoleARN: js.UndefOr[ResourceIdMaxLen1600]
    var SuspendedState: js.UndefOr[SuspendedState]
  }

  object RegisterScalableTargetRequest {
    @inline
    def apply(
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace,
        MaxCapacity: js.UndefOr[ResourceCapacity] = js.undefined,
        MinCapacity: js.UndefOr[ResourceCapacity] = js.undefined,
        RoleARN: js.UndefOr[ResourceIdMaxLen1600] = js.undefined,
        SuspendedState: js.UndefOr[SuspendedState] = js.undefined
    ): RegisterScalableTargetRequest = {
      val __obj = js.Dynamic.literal(
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any]
      )

      MaxCapacity.foreach(__v => __obj.updateDynamic("MaxCapacity")(__v.asInstanceOf[js.Any]))
      MinCapacity.foreach(__v => __obj.updateDynamic("MinCapacity")(__v.asInstanceOf[js.Any]))
      RoleARN.foreach(__v => __obj.updateDynamic("RoleARN")(__v.asInstanceOf[js.Any]))
      SuspendedState.foreach(__v => __obj.updateDynamic("SuspendedState")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[RegisterScalableTargetRequest]
    }
  }

  @js.native
  trait RegisterScalableTargetResponse extends js.Object {}

  object RegisterScalableTargetResponse {
    @inline
    def apply(
        ): RegisterScalableTargetResponse = {
      val __obj = js.Dynamic.literal()

      __obj.asInstanceOf[RegisterScalableTargetResponse]
    }
  }

  object ScalableDimensionEnum {
    val `ecs:service:DesiredCount`                     = "ecs:service:DesiredCount"
    val `ec2:spot-fleet-request:TargetCapacity`        = "ec2:spot-fleet-request:TargetCapacity"
    val `elasticmapreduce:instancegroup:InstanceCount` = "elasticmapreduce:instancegroup:InstanceCount"
    val `appstream:fleet:DesiredCapacity`              = "appstream:fleet:DesiredCapacity"
    val `dynamodb:table:ReadCapacityUnits`             = "dynamodb:table:ReadCapacityUnits"
    val `dynamodb:table:WriteCapacityUnits`            = "dynamodb:table:WriteCapacityUnits"
    val `dynamodb:index:ReadCapacityUnits`             = "dynamodb:index:ReadCapacityUnits"
    val `dynamodb:index:WriteCapacityUnits`            = "dynamodb:index:WriteCapacityUnits"
    val `rds:cluster:ReadReplicaCount`                 = "rds:cluster:ReadReplicaCount"
    val `sagemaker:variant:DesiredInstanceCount`       = "sagemaker:variant:DesiredInstanceCount"
    val `custom-resource:ResourceType:Property`        = "custom-resource:ResourceType:Property"

    val values = js.Object.freeze(
      js.Array(
        `ecs:service:DesiredCount`,
        `ec2:spot-fleet-request:TargetCapacity`,
        `elasticmapreduce:instancegroup:InstanceCount`,
        `appstream:fleet:DesiredCapacity`,
        `dynamodb:table:ReadCapacityUnits`,
        `dynamodb:table:WriteCapacityUnits`,
        `dynamodb:index:ReadCapacityUnits`,
        `dynamodb:index:WriteCapacityUnits`,
        `rds:cluster:ReadReplicaCount`,
        `sagemaker:variant:DesiredInstanceCount`,
        `custom-resource:ResourceType:Property`
      )
    )
  }

  /**
    * Represents a scalable target.
    */
  @js.native
  trait ScalableTarget extends js.Object {
    var CreationTime: TimestampType
    var MaxCapacity: ResourceCapacity
    var MinCapacity: ResourceCapacity
    var ResourceId: ResourceIdMaxLen1600
    var RoleARN: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
    var SuspendedState: js.UndefOr[SuspendedState]
  }

  object ScalableTarget {
    @inline
    def apply(
        CreationTime: TimestampType,
        MaxCapacity: ResourceCapacity,
        MinCapacity: ResourceCapacity,
        ResourceId: ResourceIdMaxLen1600,
        RoleARN: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace,
        SuspendedState: js.UndefOr[SuspendedState] = js.undefined
    ): ScalableTarget = {
      val __obj = js.Dynamic.literal(
        "CreationTime"      -> CreationTime.asInstanceOf[js.Any],
        "MaxCapacity"       -> MaxCapacity.asInstanceOf[js.Any],
        "MinCapacity"       -> MinCapacity.asInstanceOf[js.Any],
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "RoleARN"           -> RoleARN.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any]
      )

      SuspendedState.foreach(__v => __obj.updateDynamic("SuspendedState")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[ScalableTarget]
    }
  }

  /**
    * Represents the minimum and maximum capacity for a scheduled action.
    */
  @js.native
  trait ScalableTargetAction extends js.Object {
    var MaxCapacity: js.UndefOr[ResourceCapacity]
    var MinCapacity: js.UndefOr[ResourceCapacity]
  }

  object ScalableTargetAction {
    @inline
    def apply(
        MaxCapacity: js.UndefOr[ResourceCapacity] = js.undefined,
        MinCapacity: js.UndefOr[ResourceCapacity] = js.undefined
    ): ScalableTargetAction = {
      val __obj = js.Dynamic.literal()
      MaxCapacity.foreach(__v => __obj.updateDynamic("MaxCapacity")(__v.asInstanceOf[js.Any]))
      MinCapacity.foreach(__v => __obj.updateDynamic("MinCapacity")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[ScalableTargetAction]
    }
  }

  /**
    * Represents a scaling activity.
    */
  @js.native
  trait ScalingActivity extends js.Object {
    var ActivityId: ResourceId
    var Cause: XmlString
    var Description: XmlString
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
    var StartTime: TimestampType
    var StatusCode: ScalingActivityStatusCode
    var Details: js.UndefOr[XmlString]
    var EndTime: js.UndefOr[TimestampType]
    var StatusMessage: js.UndefOr[XmlString]
  }

  object ScalingActivity {
    @inline
    def apply(
        ActivityId: ResourceId,
        Cause: XmlString,
        Description: XmlString,
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace,
        StartTime: TimestampType,
        StatusCode: ScalingActivityStatusCode,
        Details: js.UndefOr[XmlString] = js.undefined,
        EndTime: js.UndefOr[TimestampType] = js.undefined,
        StatusMessage: js.UndefOr[XmlString] = js.undefined
    ): ScalingActivity = {
      val __obj = js.Dynamic.literal(
        "ActivityId"        -> ActivityId.asInstanceOf[js.Any],
        "Cause"             -> Cause.asInstanceOf[js.Any],
        "Description"       -> Description.asInstanceOf[js.Any],
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any],
        "StartTime"         -> StartTime.asInstanceOf[js.Any],
        "StatusCode"        -> StatusCode.asInstanceOf[js.Any]
      )

      Details.foreach(__v => __obj.updateDynamic("Details")(__v.asInstanceOf[js.Any]))
      EndTime.foreach(__v => __obj.updateDynamic("EndTime")(__v.asInstanceOf[js.Any]))
      StatusMessage.foreach(__v => __obj.updateDynamic("StatusMessage")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[ScalingActivity]
    }
  }

  object ScalingActivityStatusCodeEnum {
    val Pending     = "Pending"
    val InProgress  = "InProgress"
    val Successful  = "Successful"
    val Overridden  = "Overridden"
    val Unfulfilled = "Unfulfilled"
    val Failed      = "Failed"

    val values = js.Object.freeze(js.Array(Pending, InProgress, Successful, Overridden, Unfulfilled, Failed))
  }

  /**
    * Represents a scaling policy to use with Application Auto Scaling.
    */
  @js.native
  trait ScalingPolicy extends js.Object {
    var CreationTime: TimestampType
    var PolicyARN: ResourceIdMaxLen1600
    var PolicyName: PolicyName
    var PolicyType: PolicyType
    var ResourceId: ResourceIdMaxLen1600
    var ScalableDimension: ScalableDimension
    var ServiceNamespace: ServiceNamespace
    var Alarms: js.UndefOr[Alarms]
    var StepScalingPolicyConfiguration: js.UndefOr[StepScalingPolicyConfiguration]
    var TargetTrackingScalingPolicyConfiguration: js.UndefOr[TargetTrackingScalingPolicyConfiguration]
  }

  object ScalingPolicy {
    @inline
    def apply(
        CreationTime: TimestampType,
        PolicyARN: ResourceIdMaxLen1600,
        PolicyName: PolicyName,
        PolicyType: PolicyType,
        ResourceId: ResourceIdMaxLen1600,
        ScalableDimension: ScalableDimension,
        ServiceNamespace: ServiceNamespace,
        Alarms: js.UndefOr[Alarms] = js.undefined,
        StepScalingPolicyConfiguration: js.UndefOr[StepScalingPolicyConfiguration] = js.undefined,
        TargetTrackingScalingPolicyConfiguration: js.UndefOr[TargetTrackingScalingPolicyConfiguration] = js.undefined
    ): ScalingPolicy = {
      val __obj = js.Dynamic.literal(
        "CreationTime"      -> CreationTime.asInstanceOf[js.Any],
        "PolicyARN"         -> PolicyARN.asInstanceOf[js.Any],
        "PolicyName"        -> PolicyName.asInstanceOf[js.Any],
        "PolicyType"        -> PolicyType.asInstanceOf[js.Any],
        "ResourceId"        -> ResourceId.asInstanceOf[js.Any],
        "ScalableDimension" -> ScalableDimension.asInstanceOf[js.Any],
        "ServiceNamespace"  -> ServiceNamespace.asInstanceOf[js.Any]
      )

      Alarms.foreach(__v => __obj.updateDynamic("Alarms")(__v.asInstanceOf[js.Any]))
      StepScalingPolicyConfiguration.foreach(
        __v => __obj.updateDynamic("StepScalingPolicyConfiguration")(__v.asInstanceOf[js.Any])
      )
      TargetTrackingScalingPolicyConfiguration.foreach(
        __v => __obj.updateDynamic("TargetTrackingScalingPolicyConfiguration")(__v.asInstanceOf[js.Any])
      )
      __obj.asInstanceOf[ScalingPolicy]
    }
  }

  /**
    * Represents a scheduled action.
    */
  @js.native
  trait ScheduledAction extends js.Object {
    var CreationTime: TimestampType
    var ResourceId: ResourceIdMaxLen1600
    var Schedule: ResourceIdMaxLen1600
    var ScheduledActionARN: ResourceIdMaxLen1600
    var ScheduledActionName: ScheduledActionName
    var ServiceNamespace: ServiceNamespace
    var EndTime: js.UndefOr[TimestampType]
    var ScalableDimension: js.UndefOr[ScalableDimension]
    var ScalableTargetAction: js.UndefOr[ScalableTargetAction]
    var StartTime: js.UndefOr[TimestampType]
  }

  object ScheduledAction {
    @inline
    def apply(
        CreationTime: TimestampType,
        ResourceId: ResourceIdMaxLen1600,
        Schedule: ResourceIdMaxLen1600,
        ScheduledActionARN: ResourceIdMaxLen1600,
        ScheduledActionName: ScheduledActionName,
        ServiceNamespace: ServiceNamespace,
        EndTime: js.UndefOr[TimestampType] = js.undefined,
        ScalableDimension: js.UndefOr[ScalableDimension] = js.undefined,
        ScalableTargetAction: js.UndefOr[ScalableTargetAction] = js.undefined,
        StartTime: js.UndefOr[TimestampType] = js.undefined
    ): ScheduledAction = {
      val __obj = js.Dynamic.literal(
        "CreationTime"        -> CreationTime.asInstanceOf[js.Any],
        "ResourceId"          -> ResourceId.asInstanceOf[js.Any],
        "Schedule"            -> Schedule.asInstanceOf[js.Any],
        "ScheduledActionARN"  -> ScheduledActionARN.asInstanceOf[js.Any],
        "ScheduledActionName" -> ScheduledActionName.asInstanceOf[js.Any],
        "ServiceNamespace"    -> ServiceNamespace.asInstanceOf[js.Any]
      )

      EndTime.foreach(__v => __obj.updateDynamic("EndTime")(__v.asInstanceOf[js.Any]))
      ScalableDimension.foreach(__v => __obj.updateDynamic("ScalableDimension")(__v.asInstanceOf[js.Any]))
      ScalableTargetAction.foreach(__v => __obj.updateDynamic("ScalableTargetAction")(__v.asInstanceOf[js.Any]))
      StartTime.foreach(__v => __obj.updateDynamic("StartTime")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[ScheduledAction]
    }
  }

  object ServiceNamespaceEnum {
    val ecs               = "ecs"
    val elasticmapreduce  = "elasticmapreduce"
    val ec2               = "ec2"
    val appstream         = "appstream"
    val dynamodb          = "dynamodb"
    val rds               = "rds"
    val sagemaker         = "sagemaker"
    val `custom-resource` = "custom-resource"

    val values =
      js.Object.freeze(js.Array(ecs, elasticmapreduce, ec2, appstream, dynamodb, rds, sagemaker, `custom-resource`))
  }

  /**
    * Represents a step adjustment for a StepScalingPolicyConfiguration. Describes an adjustment based on the difference between the value of the aggregated CloudWatch metric and the breach threshold that you've defined for the alarm.
    *  For the following examples, suppose that you have an alarm with a breach threshold of 50:
    * * To trigger the adjustment when the metric is greater than or equal to 50 and less than 60, specify a lower bound of 0 and an upper bound of 10.
    *  * To trigger the adjustment when the metric is greater than 40 and less than or equal to 50, specify a lower bound of -10 and an upper bound of 0.
    * There are a few rules for the step adjustments for your step policy:
    * * The ranges of your step adjustments can't overlap or have a gap.
    *  * At most one step adjustment can have a null lower bound. If one step adjustment has a negative lower bound, then there must be a step adjustment with a null lower bound.
    *  * At most one step adjustment can have a null upper bound. If one step adjustment has a positive upper bound, then there must be a step adjustment with a null upper bound.
    *  * The upper and lower bound can't be null in the same step adjustment.
    */
  @js.native
  trait StepAdjustment extends js.Object {
    var ScalingAdjustment: ScalingAdjustment
    var MetricIntervalLowerBound: js.UndefOr[MetricScale]
    var MetricIntervalUpperBound: js.UndefOr[MetricScale]
  }

  object StepAdjustment {
    @inline
    def apply(
        ScalingAdjustment: ScalingAdjustment,
        MetricIntervalLowerBound: js.UndefOr[MetricScale] = js.undefined,
        MetricIntervalUpperBound: js.UndefOr[MetricScale] = js.undefined
    ): StepAdjustment = {
      val __obj = js.Dynamic.literal(
        "ScalingAdjustment" -> ScalingAdjustment.asInstanceOf[js.Any]
      )

      MetricIntervalLowerBound.foreach(__v => __obj.updateDynamic("MetricIntervalLowerBound")(__v.asInstanceOf[js.Any]))
      MetricIntervalUpperBound.foreach(__v => __obj.updateDynamic("MetricIntervalUpperBound")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[StepAdjustment]
    }
  }

  /**
    * Represents a step scaling policy configuration to use with Application Auto Scaling.
    */
  @js.native
  trait StepScalingPolicyConfiguration extends js.Object {
    var AdjustmentType: js.UndefOr[AdjustmentType]
    var Cooldown: js.UndefOr[Cooldown]
    var MetricAggregationType: js.UndefOr[MetricAggregationType]
    var MinAdjustmentMagnitude: js.UndefOr[MinAdjustmentMagnitude]
    var StepAdjustments: js.UndefOr[StepAdjustments]
  }

  object StepScalingPolicyConfiguration {
    @inline
    def apply(
        AdjustmentType: js.UndefOr[AdjustmentType] = js.undefined,
        Cooldown: js.UndefOr[Cooldown] = js.undefined,
        MetricAggregationType: js.UndefOr[MetricAggregationType] = js.undefined,
        MinAdjustmentMagnitude: js.UndefOr[MinAdjustmentMagnitude] = js.undefined,
        StepAdjustments: js.UndefOr[StepAdjustments] = js.undefined
    ): StepScalingPolicyConfiguration = {
      val __obj = js.Dynamic.literal()
      AdjustmentType.foreach(__v => __obj.updateDynamic("AdjustmentType")(__v.asInstanceOf[js.Any]))
      Cooldown.foreach(__v => __obj.updateDynamic("Cooldown")(__v.asInstanceOf[js.Any]))
      MetricAggregationType.foreach(__v => __obj.updateDynamic("MetricAggregationType")(__v.asInstanceOf[js.Any]))
      MinAdjustmentMagnitude.foreach(__v => __obj.updateDynamic("MinAdjustmentMagnitude")(__v.asInstanceOf[js.Any]))
      StepAdjustments.foreach(__v => __obj.updateDynamic("StepAdjustments")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[StepScalingPolicyConfiguration]
    }
  }

  /**
    * Specifies whether the scaling activities for a scalable target are in a suspended state.
    */
  @js.native
  trait SuspendedState extends js.Object {
    var DynamicScalingInSuspended: js.UndefOr[ScalingSuspended]
    var DynamicScalingOutSuspended: js.UndefOr[ScalingSuspended]
    var ScheduledScalingSuspended: js.UndefOr[ScalingSuspended]
  }

  object SuspendedState {
    @inline
    def apply(
        DynamicScalingInSuspended: js.UndefOr[ScalingSuspended] = js.undefined,
        DynamicScalingOutSuspended: js.UndefOr[ScalingSuspended] = js.undefined,
        ScheduledScalingSuspended: js.UndefOr[ScalingSuspended] = js.undefined
    ): SuspendedState = {
      val __obj = js.Dynamic.literal()
      DynamicScalingInSuspended.foreach(
        __v => __obj.updateDynamic("DynamicScalingInSuspended")(__v.asInstanceOf[js.Any])
      )
      DynamicScalingOutSuspended.foreach(
        __v => __obj.updateDynamic("DynamicScalingOutSuspended")(__v.asInstanceOf[js.Any])
      )
      ScheduledScalingSuspended.foreach(
        __v => __obj.updateDynamic("ScheduledScalingSuspended")(__v.asInstanceOf[js.Any])
      )
      __obj.asInstanceOf[SuspendedState]
    }
  }

  /**
    * Represents a target tracking scaling policy configuration to use with Application Auto Scaling.
    */
  @js.native
  trait TargetTrackingScalingPolicyConfiguration extends js.Object {
    var TargetValue: MetricScale
    var CustomizedMetricSpecification: js.UndefOr[CustomizedMetricSpecification]
    var DisableScaleIn: js.UndefOr[DisableScaleIn]
    var PredefinedMetricSpecification: js.UndefOr[PredefinedMetricSpecification]
    var ScaleInCooldown: js.UndefOr[Cooldown]
    var ScaleOutCooldown: js.UndefOr[Cooldown]
  }

  object TargetTrackingScalingPolicyConfiguration {
    @inline
    def apply(
        TargetValue: MetricScale,
        CustomizedMetricSpecification: js.UndefOr[CustomizedMetricSpecification] = js.undefined,
        DisableScaleIn: js.UndefOr[DisableScaleIn] = js.undefined,
        PredefinedMetricSpecification: js.UndefOr[PredefinedMetricSpecification] = js.undefined,
        ScaleInCooldown: js.UndefOr[Cooldown] = js.undefined,
        ScaleOutCooldown: js.UndefOr[Cooldown] = js.undefined
    ): TargetTrackingScalingPolicyConfiguration = {
      val __obj = js.Dynamic.literal(
        "TargetValue" -> TargetValue.asInstanceOf[js.Any]
      )

      CustomizedMetricSpecification.foreach(
        __v => __obj.updateDynamic("CustomizedMetricSpecification")(__v.asInstanceOf[js.Any])
      )
      DisableScaleIn.foreach(__v => __obj.updateDynamic("DisableScaleIn")(__v.asInstanceOf[js.Any]))
      PredefinedMetricSpecification.foreach(
        __v => __obj.updateDynamic("PredefinedMetricSpecification")(__v.asInstanceOf[js.Any])
      )
      ScaleInCooldown.foreach(__v => __obj.updateDynamic("ScaleInCooldown")(__v.asInstanceOf[js.Any]))
      ScaleOutCooldown.foreach(__v => __obj.updateDynamic("ScaleOutCooldown")(__v.asInstanceOf[js.Any]))
      __obj.asInstanceOf[TargetTrackingScalingPolicyConfiguration]
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy