import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * Manages an AWS Auto Scaling scaling plan.
 * More information can be found in the [AWS Auto Scaling User Guide](https://docs.aws.amazon.com/autoscaling/plans/userguide/what-is-aws-auto-scaling.html).
 *
 * > **NOTE:** The AWS Auto Scaling service uses an AWS IAM service-linked role to manage predictive scaling of Amazon EC2 Auto Scaling groups. The service attempts to automatically create this role the first time a scaling plan with predictive scaling enabled is created.
 * An `aws.iam.ServiceLinkedRole` resource can be used to manually manage this role.
 * See the [AWS documentation](https://docs.aws.amazon.com/autoscaling/plans/userguide/aws-auto-scaling-service-linked-roles.html#create-service-linked-role-manual) for more details.
 *
 * ## Example Usage
 *
 * ### Basic Dynamic Scaling
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as aws from "@pulumi/aws";
 * import * as std from "@pulumi/std";
 *
 * const available = aws.getAvailabilityZones({});
 * const example = new aws.autoscaling.Group("example", {
 *     namePrefix: "example",
 *     launchConfiguration: exampleAwsLaunchConfiguration.name,
 *     availabilityZones: [available.then(available => available.names?.[0])],
 *     minSize: 0,
 *     maxSize: 3,
 *     tags: [{
 *         key: "application",
 *         value: "example",
 *         propagateAtLaunch: true,
 *     }],
 * });
 * const exampleScalingPlan = new aws.autoscalingplans.ScalingPlan("example", {
 *     name: "example-dynamic-cost-optimization",
 *     applicationSource: {
 *         tagFilters: [{
 *             key: "application",
 *             values: ["example"],
 *         }],
 *     },
 *     scalingInstructions: [{
 *         maxCapacity: 3,
 *         minCapacity: 0,
 *         resourceId: std.format({
 *             input: "autoScalingGroup/%s",
 *             args: [example.name],
 *         }).then(invoke => invoke.result),
 *         scalableDimension: "autoscaling:autoScalingGroup:DesiredCapacity",
 *         serviceNamespace: "autoscaling",
 *         targetTrackingConfigurations: [{
 *             predefinedScalingMetricSpecification: {
 *                 predefinedScalingMetricType: "ASGAverageCPUUtilization",
 *             },
 *             targetValue: 70,
 *         }],
 *     }],
 * });
 * ```
 *
 * ### Basic Predictive Scaling
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as aws from "@pulumi/aws";
 * import * as std from "@pulumi/std";
 *
 * const available = aws.getAvailabilityZones({});
 * const example = new aws.autoscaling.Group("example", {
 *     namePrefix: "example",
 *     launchConfiguration: exampleAwsLaunchConfiguration.name,
 *     availabilityZones: [available.then(available => available.names?.[0])],
 *     minSize: 0,
 *     maxSize: 3,
 *     tags: [{
 *         key: "application",
 *         value: "example",
 *         propagateAtLaunch: true,
 *     }],
 * });
 * const exampleScalingPlan = new aws.autoscalingplans.ScalingPlan("example", {
 *     name: "example-predictive-cost-optimization",
 *     applicationSource: {
 *         tagFilters: [{
 *             key: "application",
 *             values: ["example"],
 *         }],
 *     },
 *     scalingInstructions: [{
 *         disableDynamicScaling: true,
 *         maxCapacity: 3,
 *         minCapacity: 0,
 *         resourceId: std.format({
 *             input: "autoScalingGroup/%s",
 *             args: [example.name],
 *         }).then(invoke => invoke.result),
 *         scalableDimension: "autoscaling:autoScalingGroup:DesiredCapacity",
 *         serviceNamespace: "autoscaling",
 *         targetTrackingConfigurations: [{
 *             predefinedScalingMetricSpecification: {
 *                 predefinedScalingMetricType: "ASGAverageCPUUtilization",
 *             },
 *             targetValue: 70,
 *         }],
 *         predictiveScalingMaxCapacityBehavior: "SetForecastCapacityToMaxCapacity",
 *         predictiveScalingMode: "ForecastAndScale",
 *         predefinedLoadMetricSpecification: {
 *             predefinedLoadMetricType: "ASGTotalCPUUtilization",
 *         },
 *     }],
 * });
 * ```
 *
 * ## Import
 *
 * Using `pulumi import`, import Auto Scaling scaling plans using the `name`. For example:
 *
 * ```sh
 * $ pulumi import aws:autoscalingplans/scalingPlan:ScalingPlan example MyScale1
 * ```
 */
export declare class ScalingPlan extends pulumi.CustomResource {
    /**
     * Get an existing ScalingPlan resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: ScalingPlanState, opts?: pulumi.CustomResourceOptions): ScalingPlan;
    /**
     * Returns true if the given object is an instance of ScalingPlan.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is ScalingPlan;
    /**
     * CloudFormation stack or set of tags. You can create one scaling plan per application source.
     */
    readonly applicationSource: pulumi.Output<outputs.autoscalingplans.ScalingPlanApplicationSource>;
    /**
     * Name of the scaling plan. Names cannot contain vertical bars, colons, or forward slashes.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
     */
    readonly region: pulumi.Output<string>;
    /**
     * Scaling instructions. More details can be found in the [AWS Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/plans/APIReference/API_ScalingInstruction.html).
     */
    readonly scalingInstructions: pulumi.Output<outputs.autoscalingplans.ScalingPlanScalingInstruction[]>;
    /**
     * The version number of the scaling plan. This value is always 1.
     */
    readonly scalingPlanVersion: pulumi.Output<number>;
    /**
     * Create a ScalingPlan resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: ScalingPlanArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering ScalingPlan resources.
 */
export interface ScalingPlanState {
    /**
     * CloudFormation stack or set of tags. You can create one scaling plan per application source.
     */
    applicationSource?: pulumi.Input<inputs.autoscalingplans.ScalingPlanApplicationSource>;
    /**
     * Name of the scaling plan. Names cannot contain vertical bars, colons, or forward slashes.
     */
    name?: pulumi.Input<string>;
    /**
     * Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
     */
    region?: pulumi.Input<string>;
    /**
     * Scaling instructions. More details can be found in the [AWS Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/plans/APIReference/API_ScalingInstruction.html).
     */
    scalingInstructions?: pulumi.Input<pulumi.Input<inputs.autoscalingplans.ScalingPlanScalingInstruction>[]>;
    /**
     * The version number of the scaling plan. This value is always 1.
     */
    scalingPlanVersion?: pulumi.Input<number>;
}
/**
 * The set of arguments for constructing a ScalingPlan resource.
 */
export interface ScalingPlanArgs {
    /**
     * CloudFormation stack or set of tags. You can create one scaling plan per application source.
     */
    applicationSource: pulumi.Input<inputs.autoscalingplans.ScalingPlanApplicationSource>;
    /**
     * Name of the scaling plan. Names cannot contain vertical bars, colons, or forward slashes.
     */
    name?: pulumi.Input<string>;
    /**
     * Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
     */
    region?: pulumi.Input<string>;
    /**
     * Scaling instructions. More details can be found in the [AWS Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/plans/APIReference/API_ScalingInstruction.html).
     */
    scalingInstructions: pulumi.Input<pulumi.Input<inputs.autoscalingplans.ScalingPlanScalingInstruction>[]>;
}
