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

com.pulumi.awsnative.applicationautoscaling.kotlin.inputs.ScalingPolicyCustomizedMetricSpecificationArgs.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.awsnative.applicationautoscaling.kotlin.inputs

import com.pulumi.awsnative.applicationautoscaling.inputs.ScalingPolicyCustomizedMetricSpecificationArgs.builder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmName

/**
 * Contains customized metric specification information for a target tracking scaling policy for Application Auto Scaling.
 *  For information about the available metrics for a service, see [services that publish CloudWatch metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) in the *Amazon CloudWatch User Guide*.
 *  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 [Publish custom metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) 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, and increase when capacity decreases.
 *  For an example of how creating new metrics can be useful, see [Scaling based on Amazon SQS](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-using-sqs-queue.html) in the *Amazon EC2 Auto Scaling User Guide*. This topic mentions Auto Scaling groups, but the same scenario for Amazon SQS can apply to the target tracking scaling policies that you create for a Spot Fleet by using Application Auto Scaling.
 *  For more information about the CloudWatch terminology below, see [Amazon CloudWatch concepts](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html).
 *   ``CustomizedMetricSpecification`` is a property of the [AWS::ApplicationAutoScaling::ScalingPolicy TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-targettrackingscalingpolicyconfiguration.html) property type.
 * @property dimensions The dimensions of the metric.
 *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
 * @property metricName The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the [Metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that's returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html).
 * @property metrics The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
 * @property namespace The namespace of the metric.
 * @property statistic The statistic of the metric.
 * @property unit The unit of the metric. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference*.
 */
public data class ScalingPolicyCustomizedMetricSpecificationArgs(
    public val dimensions: Output>? = null,
    public val metricName: Output? = null,
    public val metrics: Output>? = null,
    public val namespace: Output? = null,
    public val statistic: Output? = null,
    public val unit: Output? = null,
) :
    ConvertibleToJava {
    override fun toJava(): com.pulumi.awsnative.applicationautoscaling.inputs.ScalingPolicyCustomizedMetricSpecificationArgs =
        com.pulumi.awsnative.applicationautoscaling.inputs.ScalingPolicyCustomizedMetricSpecificationArgs.builder()
            .dimensions(
                dimensions?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .metricName(metricName?.applyValue({ args0 -> args0 }))
            .metrics(
                metrics?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .namespace(namespace?.applyValue({ args0 -> args0 }))
            .statistic(statistic?.applyValue({ args0 -> args0 }))
            .unit(unit?.applyValue({ args0 -> args0 })).build()
}

/**
 * Builder for [ScalingPolicyCustomizedMetricSpecificationArgs].
 */
@PulumiTagMarker
public class ScalingPolicyCustomizedMetricSpecificationArgsBuilder internal constructor() {
    private var dimensions: Output>? = null

    private var metricName: Output? = null

    private var metrics: Output>? = null

    private var namespace: Output? = null

    private var statistic: Output? = null

    private var unit: Output? = null

    /**
     * @param value The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("vevqoekbhuaxrmnq")
    public suspend fun dimensions(`value`: Output>) {
        this.dimensions = value
    }

    @JvmName("cdwsncecjrtxmavs")
    public suspend fun dimensions(vararg values: Output) {
        this.dimensions = Output.all(values.asList())
    }

    /**
     * @param values The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("oxpddchdpfkoopko")
    public suspend fun dimensions(values: List>) {
        this.dimensions = Output.all(values)
    }

    /**
     * @param value The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the [Metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that's returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html).
     */
    @JvmName("yntyuxlgmndagcbc")
    public suspend fun metricName(`value`: Output) {
        this.metricName = value
    }

    /**
     * @param value The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("dldgehcdtiidanbq")
    public suspend fun metrics(`value`: Output>) {
        this.metrics = value
    }

    @JvmName("qxmwyntribuouyfa")
    public suspend fun metrics(vararg values: Output) {
        this.metrics = Output.all(values.asList())
    }

    /**
     * @param values The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("ffgfimnqxniiyxqy")
    public suspend fun metrics(values: List>) {
        this.metrics = Output.all(values)
    }

    /**
     * @param value The namespace of the metric.
     */
    @JvmName("ivrpyhvtjsakqgpm")
    public suspend fun namespace(`value`: Output) {
        this.namespace = value
    }

    /**
     * @param value The statistic of the metric.
     */
    @JvmName("qhddvcawalofxixk")
    public suspend fun statistic(`value`: Output) {
        this.statistic = value
    }

    /**
     * @param value The unit of the metric. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference*.
     */
    @JvmName("urhbuqvjnuijphuk")
    public suspend fun unit(`value`: Output) {
        this.unit = value
    }

    /**
     * @param value The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("llffbvmfcxowjrwp")
    public suspend fun dimensions(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.dimensions = mapped
    }

    /**
     * @param argument The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("jobldysjafdetlnv")
    public suspend fun dimensions(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScalingPolicyMetricDimensionArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.dimensions = mapped
    }

    /**
     * @param argument The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("ssamvqephecbckjo")
    public suspend fun dimensions(vararg argument: suspend ScalingPolicyMetricDimensionArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ScalingPolicyMetricDimensionArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.dimensions = mapped
    }

    /**
     * @param argument The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("waxqvedrqakouyix")
    public suspend fun dimensions(argument: suspend ScalingPolicyMetricDimensionArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ScalingPolicyMetricDimensionArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.dimensions = mapped
    }

    /**
     * @param values The dimensions of the metric.
     *  Conditional: If you published your metric with dimensions, you must specify the same dimensions in your scaling policy.
     */
    @JvmName("hicevabngasgaxvn")
    public suspend fun dimensions(vararg values: ScalingPolicyMetricDimensionArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.dimensions = mapped
    }

    /**
     * @param value The name of the metric. To get the exact metric name, namespace, and dimensions, inspect the [Metric](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html) object that's returned by a call to [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html).
     */
    @JvmName("wijqdruvftlxxbop")
    public suspend fun metricName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.metricName = mapped
    }

    /**
     * @param value The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("iktowswegpwuuhgw")
    public suspend fun metrics(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.metrics = mapped
    }

    /**
     * @param argument The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("vxqeiraecsyggwlh")
    public suspend fun metrics(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScalingPolicyTargetTrackingMetricDataQueryArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.metrics = mapped
    }

    /**
     * @param argument The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("jyjwkdykruvlxoif")
    public suspend fun metrics(vararg argument: suspend ScalingPolicyTargetTrackingMetricDataQueryArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ScalingPolicyTargetTrackingMetricDataQueryArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.metrics = mapped
    }

    /**
     * @param argument The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("rroitxgplltlacjt")
    public suspend fun metrics(argument: suspend ScalingPolicyTargetTrackingMetricDataQueryArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ScalingPolicyTargetTrackingMetricDataQueryArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.metrics = mapped
    }

    /**
     * @param values The metrics to include in the target tracking scaling policy, as a metric data query. This can include both raw metric and metric math expressions.
     */
    @JvmName("upcccahnonfjywbh")
    public suspend fun metrics(vararg values: ScalingPolicyTargetTrackingMetricDataQueryArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.metrics = mapped
    }

    /**
     * @param value The namespace of the metric.
     */
    @JvmName("vedffeoymlgfwybk")
    public suspend fun namespace(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.namespace = mapped
    }

    /**
     * @param value The statistic of the metric.
     */
    @JvmName("enyencrymxfvelsm")
    public suspend fun statistic(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.statistic = mapped
    }

    /**
     * @param value The unit of the metric. For a complete list of the units that CloudWatch supports, see the [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) data type in the *Amazon CloudWatch API Reference*.
     */
    @JvmName("heuelcuroiepupyy")
    public suspend fun unit(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.unit = mapped
    }

    internal fun build(): ScalingPolicyCustomizedMetricSpecificationArgs =
        ScalingPolicyCustomizedMetricSpecificationArgs(
            dimensions = dimensions,
            metricName = metricName,
            metrics = metrics,
            namespace = namespace,
            statistic = statistic,
            unit = unit,
        )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy