github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/appautoscaling/policy.go (about)

     1  // Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT.
     2  // *** WARNING: Do not edit by hand unless you're certain you know what you are doing! ***
     3  
     4  package appautoscaling
     5  
     6  import (
     7  	"context"
     8  	"reflect"
     9  
    10  	"errors"
    11  	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/internal"
    12  	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    13  )
    14  
    15  // Provides an Application AutoScaling Policy resource.
    16  //
    17  // ## Example Usage
    18  //
    19  // ### DynamoDB Table Autoscaling
    20  //
    21  // <!--Start PulumiCodeChooser -->
    22  // ```go
    23  // package main
    24  //
    25  // import (
    26  //
    27  //	"fmt"
    28  //
    29  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/appautoscaling"
    30  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    31  //
    32  // )
    33  //
    34  //	func main() {
    35  //		pulumi.Run(func(ctx *pulumi.Context) error {
    36  //			dynamodbTableReadTarget, err := appautoscaling.NewTarget(ctx, "dynamodb_table_read_target", &appautoscaling.TargetArgs{
    37  //				MaxCapacity:       pulumi.Int(100),
    38  //				MinCapacity:       pulumi.Int(5),
    39  //				ResourceId:        pulumi.String("table/tableName"),
    40  //				ScalableDimension: pulumi.String("dynamodb:table:ReadCapacityUnits"),
    41  //				ServiceNamespace:  pulumi.String("dynamodb"),
    42  //			})
    43  //			if err != nil {
    44  //				return err
    45  //			}
    46  //			_, err = appautoscaling.NewPolicy(ctx, "dynamodb_table_read_policy", &appautoscaling.PolicyArgs{
    47  //				Name: dynamodbTableReadTarget.ResourceId.ApplyT(func(resourceId string) (string, error) {
    48  //					return fmt.Sprintf("DynamoDBReadCapacityUtilization:%v", resourceId), nil
    49  //				}).(pulumi.StringOutput),
    50  //				PolicyType:        pulumi.String("TargetTrackingScaling"),
    51  //				ResourceId:        dynamodbTableReadTarget.ResourceId,
    52  //				ScalableDimension: dynamodbTableReadTarget.ScalableDimension,
    53  //				ServiceNamespace:  dynamodbTableReadTarget.ServiceNamespace,
    54  //				TargetTrackingScalingPolicyConfiguration: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationArgs{
    55  //					PredefinedMetricSpecification: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecificationArgs{
    56  //						PredefinedMetricType: pulumi.String("DynamoDBReadCapacityUtilization"),
    57  //					},
    58  //					TargetValue: pulumi.Float64(70),
    59  //				},
    60  //			})
    61  //			if err != nil {
    62  //				return err
    63  //			}
    64  //			return nil
    65  //		})
    66  //	}
    67  //
    68  // ```
    69  // <!--End PulumiCodeChooser -->
    70  //
    71  // ### ECS Service Autoscaling
    72  //
    73  // <!--Start PulumiCodeChooser -->
    74  // ```go
    75  // package main
    76  //
    77  // import (
    78  //
    79  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/appautoscaling"
    80  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    81  //
    82  // )
    83  //
    84  //	func main() {
    85  //		pulumi.Run(func(ctx *pulumi.Context) error {
    86  //			ecsTarget, err := appautoscaling.NewTarget(ctx, "ecs_target", &appautoscaling.TargetArgs{
    87  //				MaxCapacity:       pulumi.Int(4),
    88  //				MinCapacity:       pulumi.Int(1),
    89  //				ResourceId:        pulumi.String("service/clusterName/serviceName"),
    90  //				ScalableDimension: pulumi.String("ecs:service:DesiredCount"),
    91  //				ServiceNamespace:  pulumi.String("ecs"),
    92  //			})
    93  //			if err != nil {
    94  //				return err
    95  //			}
    96  //			_, err = appautoscaling.NewPolicy(ctx, "ecs_policy", &appautoscaling.PolicyArgs{
    97  //				Name:              pulumi.String("scale-down"),
    98  //				PolicyType:        pulumi.String("StepScaling"),
    99  //				ResourceId:        ecsTarget.ResourceId,
   100  //				ScalableDimension: ecsTarget.ScalableDimension,
   101  //				ServiceNamespace:  ecsTarget.ServiceNamespace,
   102  //				StepScalingPolicyConfiguration: &appautoscaling.PolicyStepScalingPolicyConfigurationArgs{
   103  //					AdjustmentType:        pulumi.String("ChangeInCapacity"),
   104  //					Cooldown:              pulumi.Int(60),
   105  //					MetricAggregationType: pulumi.String("Maximum"),
   106  //					StepAdjustments: appautoscaling.PolicyStepScalingPolicyConfigurationStepAdjustmentArray{
   107  //						&appautoscaling.PolicyStepScalingPolicyConfigurationStepAdjustmentArgs{
   108  //							MetricIntervalUpperBound: pulumi.String("0"),
   109  //							ScalingAdjustment:        -1,
   110  //						},
   111  //					},
   112  //				},
   113  //			})
   114  //			if err != nil {
   115  //				return err
   116  //			}
   117  //			return nil
   118  //		})
   119  //	}
   120  //
   121  // ```
   122  // <!--End PulumiCodeChooser -->
   123  //
   124  // ### Preserve desired count when updating an autoscaled ECS Service
   125  //
   126  // <!--Start PulumiCodeChooser -->
   127  // ```go
   128  // package main
   129  //
   130  // import (
   131  //
   132  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecs"
   133  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   134  //
   135  // )
   136  //
   137  //	func main() {
   138  //		pulumi.Run(func(ctx *pulumi.Context) error {
   139  //			_, err := ecs.NewService(ctx, "ecs_service", &ecs.ServiceArgs{
   140  //				Name:           pulumi.String("serviceName"),
   141  //				Cluster:        pulumi.String("clusterName"),
   142  //				TaskDefinition: pulumi.String("taskDefinitionFamily:1"),
   143  //				DesiredCount:   pulumi.Int(2),
   144  //			})
   145  //			if err != nil {
   146  //				return err
   147  //			}
   148  //			return nil
   149  //		})
   150  //	}
   151  //
   152  // ```
   153  // <!--End PulumiCodeChooser -->
   154  //
   155  // ### Aurora Read Replica Autoscaling
   156  //
   157  // <!--Start PulumiCodeChooser -->
   158  // ```go
   159  // package main
   160  //
   161  // import (
   162  //
   163  //	"fmt"
   164  //
   165  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/appautoscaling"
   166  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   167  //
   168  // )
   169  //
   170  //	func main() {
   171  //		pulumi.Run(func(ctx *pulumi.Context) error {
   172  //			replicas, err := appautoscaling.NewTarget(ctx, "replicas", &appautoscaling.TargetArgs{
   173  //				ServiceNamespace:  pulumi.String("rds"),
   174  //				ScalableDimension: pulumi.String("rds:cluster:ReadReplicaCount"),
   175  //				ResourceId:        pulumi.String(fmt.Sprintf("cluster:%v", example.Id)),
   176  //				MinCapacity:       pulumi.Int(1),
   177  //				MaxCapacity:       pulumi.Int(15),
   178  //			})
   179  //			if err != nil {
   180  //				return err
   181  //			}
   182  //			_, err = appautoscaling.NewPolicy(ctx, "replicas", &appautoscaling.PolicyArgs{
   183  //				Name:              pulumi.String("cpu-auto-scaling"),
   184  //				ServiceNamespace:  replicas.ServiceNamespace,
   185  //				ScalableDimension: replicas.ScalableDimension,
   186  //				ResourceId:        replicas.ResourceId,
   187  //				PolicyType:        pulumi.String("TargetTrackingScaling"),
   188  //				TargetTrackingScalingPolicyConfiguration: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationArgs{
   189  //					PredefinedMetricSpecification: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecificationArgs{
   190  //						PredefinedMetricType: pulumi.String("RDSReaderAverageCPUUtilization"),
   191  //					},
   192  //					TargetValue:      pulumi.Float64(75),
   193  //					ScaleInCooldown:  pulumi.Int(300),
   194  //					ScaleOutCooldown: pulumi.Int(300),
   195  //				},
   196  //			})
   197  //			if err != nil {
   198  //				return err
   199  //			}
   200  //			return nil
   201  //		})
   202  //	}
   203  //
   204  // ```
   205  // <!--End PulumiCodeChooser -->
   206  //
   207  // ### Create target tracking scaling policy using metric math
   208  //
   209  // <!--Start PulumiCodeChooser -->
   210  // ```go
   211  // package main
   212  //
   213  // import (
   214  //
   215  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/appautoscaling"
   216  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   217  //
   218  // )
   219  //
   220  //	func main() {
   221  //		pulumi.Run(func(ctx *pulumi.Context) error {
   222  //			ecsTarget, err := appautoscaling.NewTarget(ctx, "ecs_target", &appautoscaling.TargetArgs{
   223  //				MaxCapacity:       pulumi.Int(4),
   224  //				MinCapacity:       pulumi.Int(1),
   225  //				ResourceId:        pulumi.String("service/clusterName/serviceName"),
   226  //				ScalableDimension: pulumi.String("ecs:service:DesiredCount"),
   227  //				ServiceNamespace:  pulumi.String("ecs"),
   228  //			})
   229  //			if err != nil {
   230  //				return err
   231  //			}
   232  //			_, err = appautoscaling.NewPolicy(ctx, "example", &appautoscaling.PolicyArgs{
   233  //				Name:              pulumi.String("foo"),
   234  //				PolicyType:        pulumi.String("TargetTrackingScaling"),
   235  //				ResourceId:        ecsTarget.ResourceId,
   236  //				ScalableDimension: ecsTarget.ScalableDimension,
   237  //				ServiceNamespace:  ecsTarget.ServiceNamespace,
   238  //				TargetTrackingScalingPolicyConfiguration: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationArgs{
   239  //					TargetValue: pulumi.Float64(100),
   240  //					CustomizedMetricSpecification: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationArgs{
   241  //						Metrics: appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricArray{
   242  //							&appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricArgs{
   243  //								Label: pulumi.String("Get the queue size (the number of messages waiting to be processed)"),
   244  //								Id:    pulumi.String("m1"),
   245  //								MetricStat: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatArgs{
   246  //									Metric: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricArgs{
   247  //										MetricName: pulumi.String("ApproximateNumberOfMessagesVisible"),
   248  //										Namespace:  pulumi.String("AWS/SQS"),
   249  //										Dimensions: appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricDimensionArray{
   250  //											&appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricDimensionArgs{
   251  //												Name:  pulumi.String("QueueName"),
   252  //												Value: pulumi.String("my-queue"),
   253  //											},
   254  //										},
   255  //									},
   256  //									Stat: pulumi.String("Sum"),
   257  //								},
   258  //								ReturnData: pulumi.Bool(false),
   259  //							},
   260  //							&appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricArgs{
   261  //								Label: pulumi.String("Get the ECS running task count (the number of currently running tasks)"),
   262  //								Id:    pulumi.String("m2"),
   263  //								MetricStat: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatArgs{
   264  //									Metric: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricArgs{
   265  //										MetricName: pulumi.String("RunningTaskCount"),
   266  //										Namespace:  pulumi.String("ECS/ContainerInsights"),
   267  //										Dimensions: appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricDimensionArray{
   268  //											&appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricDimensionArgs{
   269  //												Name:  pulumi.String("ClusterName"),
   270  //												Value: pulumi.String("default"),
   271  //											},
   272  //											&appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricMetricStatMetricDimensionArgs{
   273  //												Name:  pulumi.String("ServiceName"),
   274  //												Value: pulumi.String("web-app"),
   275  //											},
   276  //										},
   277  //									},
   278  //									Stat: pulumi.String("Average"),
   279  //								},
   280  //								ReturnData: pulumi.Bool(false),
   281  //							},
   282  //							&appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationCustomizedMetricSpecificationMetricArgs{
   283  //								Label:      pulumi.String("Calculate the backlog per instance"),
   284  //								Id:         pulumi.String("e1"),
   285  //								Expression: pulumi.String("m1 / m2"),
   286  //								ReturnData: pulumi.Bool(true),
   287  //							},
   288  //						},
   289  //					},
   290  //				},
   291  //			})
   292  //			if err != nil {
   293  //				return err
   294  //			}
   295  //			return nil
   296  //		})
   297  //	}
   298  //
   299  // ```
   300  // <!--End PulumiCodeChooser -->
   301  //
   302  // ### MSK / Kafka Autoscaling
   303  //
   304  // <!--Start PulumiCodeChooser -->
   305  // ```go
   306  // package main
   307  //
   308  // import (
   309  //
   310  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/appautoscaling"
   311  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   312  //
   313  // )
   314  //
   315  //	func main() {
   316  //		pulumi.Run(func(ctx *pulumi.Context) error {
   317  //			mskTarget, err := appautoscaling.NewTarget(ctx, "msk_target", &appautoscaling.TargetArgs{
   318  //				ServiceNamespace:  pulumi.String("kafka"),
   319  //				ScalableDimension: pulumi.String("kafka:broker-storage:VolumeSize"),
   320  //				ResourceId:        pulumi.Any(example.Arn),
   321  //				MinCapacity:       pulumi.Int(1),
   322  //				MaxCapacity:       pulumi.Int(8),
   323  //			})
   324  //			if err != nil {
   325  //				return err
   326  //			}
   327  //			_, err = appautoscaling.NewPolicy(ctx, "targets", &appautoscaling.PolicyArgs{
   328  //				Name:              pulumi.String("storage-size-auto-scaling"),
   329  //				ServiceNamespace:  mskTarget.ServiceNamespace,
   330  //				ScalableDimension: mskTarget.ScalableDimension,
   331  //				ResourceId:        mskTarget.ResourceId,
   332  //				PolicyType:        pulumi.String("TargetTrackingScaling"),
   333  //				TargetTrackingScalingPolicyConfiguration: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationArgs{
   334  //					PredefinedMetricSpecification: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecificationArgs{
   335  //						PredefinedMetricType: pulumi.String("KafkaBrokerStorageUtilization"),
   336  //					},
   337  //					TargetValue: pulumi.Float64(55),
   338  //				},
   339  //			})
   340  //			if err != nil {
   341  //				return err
   342  //			}
   343  //			return nil
   344  //		})
   345  //	}
   346  //
   347  // ```
   348  // <!--End PulumiCodeChooser -->
   349  //
   350  // ## Import
   351  //
   352  // Using `pulumi import`, import Application AutoScaling Policy using the `service-namespace` , `resource-id`, `scalable-dimension` and `policy-name` separated by `/`. For example:
   353  //
   354  // ```sh
   355  // $ pulumi import aws:appautoscaling/policy:Policy test-policy service-namespace/resource-id/scalable-dimension/policy-name
   356  // ```
   357  type Policy struct {
   358  	pulumi.CustomResourceState
   359  
   360  	// List of CloudWatch alarm ARNs associated with the scaling policy.
   361  	AlarmArns pulumi.StringArrayOutput `pulumi:"alarmArns"`
   362  	// ARN assigned by AWS to the scaling policy.
   363  	Arn pulumi.StringOutput `pulumi:"arn"`
   364  	// Name of the policy. Must be between 1 and 255 characters in length.
   365  	Name pulumi.StringOutput `pulumi:"name"`
   366  	// Policy type. Valid values are `StepScaling` and `TargetTrackingScaling`. Defaults to `StepScaling`. Certain services only support only one policy type. For more information see the [Target Tracking Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) documentation.
   367  	PolicyType pulumi.StringPtrOutput `pulumi:"policyType"`
   368  	// Resource type and unique identifier string for the resource associated with the scaling policy. Documentation can be found in the `ResourceId` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   369  	ResourceId pulumi.StringOutput `pulumi:"resourceId"`
   370  	// Scalable dimension of the scalable target. Documentation can be found in the `ScalableDimension` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   371  	ScalableDimension pulumi.StringOutput `pulumi:"scalableDimension"`
   372  	// AWS service namespace of the scalable target. Documentation can be found in the `ServiceNamespace` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   373  	ServiceNamespace pulumi.StringOutput `pulumi:"serviceNamespace"`
   374  	// Step scaling policy configuration, requires `policyType = "StepScaling"` (default). See supported fields below.
   375  	StepScalingPolicyConfiguration PolicyStepScalingPolicyConfigurationPtrOutput `pulumi:"stepScalingPolicyConfiguration"`
   376  	// Target tracking policy, requires `policyType = "TargetTrackingScaling"`. See supported fields below.
   377  	TargetTrackingScalingPolicyConfiguration PolicyTargetTrackingScalingPolicyConfigurationPtrOutput `pulumi:"targetTrackingScalingPolicyConfiguration"`
   378  }
   379  
   380  // NewPolicy registers a new resource with the given unique name, arguments, and options.
   381  func NewPolicy(ctx *pulumi.Context,
   382  	name string, args *PolicyArgs, opts ...pulumi.ResourceOption) (*Policy, error) {
   383  	if args == nil {
   384  		return nil, errors.New("missing one or more required arguments")
   385  	}
   386  
   387  	if args.ResourceId == nil {
   388  		return nil, errors.New("invalid value for required argument 'ResourceId'")
   389  	}
   390  	if args.ScalableDimension == nil {
   391  		return nil, errors.New("invalid value for required argument 'ScalableDimension'")
   392  	}
   393  	if args.ServiceNamespace == nil {
   394  		return nil, errors.New("invalid value for required argument 'ServiceNamespace'")
   395  	}
   396  	opts = internal.PkgResourceDefaultOpts(opts)
   397  	var resource Policy
   398  	err := ctx.RegisterResource("aws:appautoscaling/policy:Policy", name, args, &resource, opts...)
   399  	if err != nil {
   400  		return nil, err
   401  	}
   402  	return &resource, nil
   403  }
   404  
   405  // GetPolicy gets an existing Policy resource's state with the given name, ID, and optional
   406  // state properties that are used to uniquely qualify the lookup (nil if not required).
   407  func GetPolicy(ctx *pulumi.Context,
   408  	name string, id pulumi.IDInput, state *PolicyState, opts ...pulumi.ResourceOption) (*Policy, error) {
   409  	var resource Policy
   410  	err := ctx.ReadResource("aws:appautoscaling/policy:Policy", name, id, state, &resource, opts...)
   411  	if err != nil {
   412  		return nil, err
   413  	}
   414  	return &resource, nil
   415  }
   416  
   417  // Input properties used for looking up and filtering Policy resources.
   418  type policyState struct {
   419  	// List of CloudWatch alarm ARNs associated with the scaling policy.
   420  	AlarmArns []string `pulumi:"alarmArns"`
   421  	// ARN assigned by AWS to the scaling policy.
   422  	Arn *string `pulumi:"arn"`
   423  	// Name of the policy. Must be between 1 and 255 characters in length.
   424  	Name *string `pulumi:"name"`
   425  	// Policy type. Valid values are `StepScaling` and `TargetTrackingScaling`. Defaults to `StepScaling`. Certain services only support only one policy type. For more information see the [Target Tracking Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) documentation.
   426  	PolicyType *string `pulumi:"policyType"`
   427  	// Resource type and unique identifier string for the resource associated with the scaling policy. Documentation can be found in the `ResourceId` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   428  	ResourceId *string `pulumi:"resourceId"`
   429  	// Scalable dimension of the scalable target. Documentation can be found in the `ScalableDimension` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   430  	ScalableDimension *string `pulumi:"scalableDimension"`
   431  	// AWS service namespace of the scalable target. Documentation can be found in the `ServiceNamespace` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   432  	ServiceNamespace *string `pulumi:"serviceNamespace"`
   433  	// Step scaling policy configuration, requires `policyType = "StepScaling"` (default). See supported fields below.
   434  	StepScalingPolicyConfiguration *PolicyStepScalingPolicyConfiguration `pulumi:"stepScalingPolicyConfiguration"`
   435  	// Target tracking policy, requires `policyType = "TargetTrackingScaling"`. See supported fields below.
   436  	TargetTrackingScalingPolicyConfiguration *PolicyTargetTrackingScalingPolicyConfiguration `pulumi:"targetTrackingScalingPolicyConfiguration"`
   437  }
   438  
   439  type PolicyState struct {
   440  	// List of CloudWatch alarm ARNs associated with the scaling policy.
   441  	AlarmArns pulumi.StringArrayInput
   442  	// ARN assigned by AWS to the scaling policy.
   443  	Arn pulumi.StringPtrInput
   444  	// Name of the policy. Must be between 1 and 255 characters in length.
   445  	Name pulumi.StringPtrInput
   446  	// Policy type. Valid values are `StepScaling` and `TargetTrackingScaling`. Defaults to `StepScaling`. Certain services only support only one policy type. For more information see the [Target Tracking Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) documentation.
   447  	PolicyType pulumi.StringPtrInput
   448  	// Resource type and unique identifier string for the resource associated with the scaling policy. Documentation can be found in the `ResourceId` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   449  	ResourceId pulumi.StringPtrInput
   450  	// Scalable dimension of the scalable target. Documentation can be found in the `ScalableDimension` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   451  	ScalableDimension pulumi.StringPtrInput
   452  	// AWS service namespace of the scalable target. Documentation can be found in the `ServiceNamespace` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   453  	ServiceNamespace pulumi.StringPtrInput
   454  	// Step scaling policy configuration, requires `policyType = "StepScaling"` (default). See supported fields below.
   455  	StepScalingPolicyConfiguration PolicyStepScalingPolicyConfigurationPtrInput
   456  	// Target tracking policy, requires `policyType = "TargetTrackingScaling"`. See supported fields below.
   457  	TargetTrackingScalingPolicyConfiguration PolicyTargetTrackingScalingPolicyConfigurationPtrInput
   458  }
   459  
   460  func (PolicyState) ElementType() reflect.Type {
   461  	return reflect.TypeOf((*policyState)(nil)).Elem()
   462  }
   463  
   464  type policyArgs struct {
   465  	// Name of the policy. Must be between 1 and 255 characters in length.
   466  	Name *string `pulumi:"name"`
   467  	// Policy type. Valid values are `StepScaling` and `TargetTrackingScaling`. Defaults to `StepScaling`. Certain services only support only one policy type. For more information see the [Target Tracking Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) documentation.
   468  	PolicyType *string `pulumi:"policyType"`
   469  	// Resource type and unique identifier string for the resource associated with the scaling policy. Documentation can be found in the `ResourceId` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   470  	ResourceId string `pulumi:"resourceId"`
   471  	// Scalable dimension of the scalable target. Documentation can be found in the `ScalableDimension` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   472  	ScalableDimension string `pulumi:"scalableDimension"`
   473  	// AWS service namespace of the scalable target. Documentation can be found in the `ServiceNamespace` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   474  	ServiceNamespace string `pulumi:"serviceNamespace"`
   475  	// Step scaling policy configuration, requires `policyType = "StepScaling"` (default). See supported fields below.
   476  	StepScalingPolicyConfiguration *PolicyStepScalingPolicyConfiguration `pulumi:"stepScalingPolicyConfiguration"`
   477  	// Target tracking policy, requires `policyType = "TargetTrackingScaling"`. See supported fields below.
   478  	TargetTrackingScalingPolicyConfiguration *PolicyTargetTrackingScalingPolicyConfiguration `pulumi:"targetTrackingScalingPolicyConfiguration"`
   479  }
   480  
   481  // The set of arguments for constructing a Policy resource.
   482  type PolicyArgs struct {
   483  	// Name of the policy. Must be between 1 and 255 characters in length.
   484  	Name pulumi.StringPtrInput
   485  	// Policy type. Valid values are `StepScaling` and `TargetTrackingScaling`. Defaults to `StepScaling`. Certain services only support only one policy type. For more information see the [Target Tracking Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) documentation.
   486  	PolicyType pulumi.StringPtrInput
   487  	// Resource type and unique identifier string for the resource associated with the scaling policy. Documentation can be found in the `ResourceId` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   488  	ResourceId pulumi.StringInput
   489  	// Scalable dimension of the scalable target. Documentation can be found in the `ScalableDimension` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   490  	ScalableDimension pulumi.StringInput
   491  	// AWS service namespace of the scalable target. Documentation can be found in the `ServiceNamespace` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   492  	ServiceNamespace pulumi.StringInput
   493  	// Step scaling policy configuration, requires `policyType = "StepScaling"` (default). See supported fields below.
   494  	StepScalingPolicyConfiguration PolicyStepScalingPolicyConfigurationPtrInput
   495  	// Target tracking policy, requires `policyType = "TargetTrackingScaling"`. See supported fields below.
   496  	TargetTrackingScalingPolicyConfiguration PolicyTargetTrackingScalingPolicyConfigurationPtrInput
   497  }
   498  
   499  func (PolicyArgs) ElementType() reflect.Type {
   500  	return reflect.TypeOf((*policyArgs)(nil)).Elem()
   501  }
   502  
   503  type PolicyInput interface {
   504  	pulumi.Input
   505  
   506  	ToPolicyOutput() PolicyOutput
   507  	ToPolicyOutputWithContext(ctx context.Context) PolicyOutput
   508  }
   509  
   510  func (*Policy) ElementType() reflect.Type {
   511  	return reflect.TypeOf((**Policy)(nil)).Elem()
   512  }
   513  
   514  func (i *Policy) ToPolicyOutput() PolicyOutput {
   515  	return i.ToPolicyOutputWithContext(context.Background())
   516  }
   517  
   518  func (i *Policy) ToPolicyOutputWithContext(ctx context.Context) PolicyOutput {
   519  	return pulumi.ToOutputWithContext(ctx, i).(PolicyOutput)
   520  }
   521  
   522  // PolicyArrayInput is an input type that accepts PolicyArray and PolicyArrayOutput values.
   523  // You can construct a concrete instance of `PolicyArrayInput` via:
   524  //
   525  //	PolicyArray{ PolicyArgs{...} }
   526  type PolicyArrayInput interface {
   527  	pulumi.Input
   528  
   529  	ToPolicyArrayOutput() PolicyArrayOutput
   530  	ToPolicyArrayOutputWithContext(context.Context) PolicyArrayOutput
   531  }
   532  
   533  type PolicyArray []PolicyInput
   534  
   535  func (PolicyArray) ElementType() reflect.Type {
   536  	return reflect.TypeOf((*[]*Policy)(nil)).Elem()
   537  }
   538  
   539  func (i PolicyArray) ToPolicyArrayOutput() PolicyArrayOutput {
   540  	return i.ToPolicyArrayOutputWithContext(context.Background())
   541  }
   542  
   543  func (i PolicyArray) ToPolicyArrayOutputWithContext(ctx context.Context) PolicyArrayOutput {
   544  	return pulumi.ToOutputWithContext(ctx, i).(PolicyArrayOutput)
   545  }
   546  
   547  // PolicyMapInput is an input type that accepts PolicyMap and PolicyMapOutput values.
   548  // You can construct a concrete instance of `PolicyMapInput` via:
   549  //
   550  //	PolicyMap{ "key": PolicyArgs{...} }
   551  type PolicyMapInput interface {
   552  	pulumi.Input
   553  
   554  	ToPolicyMapOutput() PolicyMapOutput
   555  	ToPolicyMapOutputWithContext(context.Context) PolicyMapOutput
   556  }
   557  
   558  type PolicyMap map[string]PolicyInput
   559  
   560  func (PolicyMap) ElementType() reflect.Type {
   561  	return reflect.TypeOf((*map[string]*Policy)(nil)).Elem()
   562  }
   563  
   564  func (i PolicyMap) ToPolicyMapOutput() PolicyMapOutput {
   565  	return i.ToPolicyMapOutputWithContext(context.Background())
   566  }
   567  
   568  func (i PolicyMap) ToPolicyMapOutputWithContext(ctx context.Context) PolicyMapOutput {
   569  	return pulumi.ToOutputWithContext(ctx, i).(PolicyMapOutput)
   570  }
   571  
   572  type PolicyOutput struct{ *pulumi.OutputState }
   573  
   574  func (PolicyOutput) ElementType() reflect.Type {
   575  	return reflect.TypeOf((**Policy)(nil)).Elem()
   576  }
   577  
   578  func (o PolicyOutput) ToPolicyOutput() PolicyOutput {
   579  	return o
   580  }
   581  
   582  func (o PolicyOutput) ToPolicyOutputWithContext(ctx context.Context) PolicyOutput {
   583  	return o
   584  }
   585  
   586  // List of CloudWatch alarm ARNs associated with the scaling policy.
   587  func (o PolicyOutput) AlarmArns() pulumi.StringArrayOutput {
   588  	return o.ApplyT(func(v *Policy) pulumi.StringArrayOutput { return v.AlarmArns }).(pulumi.StringArrayOutput)
   589  }
   590  
   591  // ARN assigned by AWS to the scaling policy.
   592  func (o PolicyOutput) Arn() pulumi.StringOutput {
   593  	return o.ApplyT(func(v *Policy) pulumi.StringOutput { return v.Arn }).(pulumi.StringOutput)
   594  }
   595  
   596  // Name of the policy. Must be between 1 and 255 characters in length.
   597  func (o PolicyOutput) Name() pulumi.StringOutput {
   598  	return o.ApplyT(func(v *Policy) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput)
   599  }
   600  
   601  // Policy type. Valid values are `StepScaling` and `TargetTrackingScaling`. Defaults to `StepScaling`. Certain services only support only one policy type. For more information see the [Target Tracking Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) and [Step Scaling Policies](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) documentation.
   602  func (o PolicyOutput) PolicyType() pulumi.StringPtrOutput {
   603  	return o.ApplyT(func(v *Policy) pulumi.StringPtrOutput { return v.PolicyType }).(pulumi.StringPtrOutput)
   604  }
   605  
   606  // Resource type and unique identifier string for the resource associated with the scaling policy. Documentation can be found in the `ResourceId` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   607  func (o PolicyOutput) ResourceId() pulumi.StringOutput {
   608  	return o.ApplyT(func(v *Policy) pulumi.StringOutput { return v.ResourceId }).(pulumi.StringOutput)
   609  }
   610  
   611  // Scalable dimension of the scalable target. Documentation can be found in the `ScalableDimension` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   612  func (o PolicyOutput) ScalableDimension() pulumi.StringOutput {
   613  	return o.ApplyT(func(v *Policy) pulumi.StringOutput { return v.ScalableDimension }).(pulumi.StringOutput)
   614  }
   615  
   616  // AWS service namespace of the scalable target. Documentation can be found in the `ServiceNamespace` parameter at: [AWS Application Auto Scaling API Reference](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)
   617  func (o PolicyOutput) ServiceNamespace() pulumi.StringOutput {
   618  	return o.ApplyT(func(v *Policy) pulumi.StringOutput { return v.ServiceNamespace }).(pulumi.StringOutput)
   619  }
   620  
   621  // Step scaling policy configuration, requires `policyType = "StepScaling"` (default). See supported fields below.
   622  func (o PolicyOutput) StepScalingPolicyConfiguration() PolicyStepScalingPolicyConfigurationPtrOutput {
   623  	return o.ApplyT(func(v *Policy) PolicyStepScalingPolicyConfigurationPtrOutput { return v.StepScalingPolicyConfiguration }).(PolicyStepScalingPolicyConfigurationPtrOutput)
   624  }
   625  
   626  // Target tracking policy, requires `policyType = "TargetTrackingScaling"`. See supported fields below.
   627  func (o PolicyOutput) TargetTrackingScalingPolicyConfiguration() PolicyTargetTrackingScalingPolicyConfigurationPtrOutput {
   628  	return o.ApplyT(func(v *Policy) PolicyTargetTrackingScalingPolicyConfigurationPtrOutput {
   629  		return v.TargetTrackingScalingPolicyConfiguration
   630  	}).(PolicyTargetTrackingScalingPolicyConfigurationPtrOutput)
   631  }
   632  
   633  type PolicyArrayOutput struct{ *pulumi.OutputState }
   634  
   635  func (PolicyArrayOutput) ElementType() reflect.Type {
   636  	return reflect.TypeOf((*[]*Policy)(nil)).Elem()
   637  }
   638  
   639  func (o PolicyArrayOutput) ToPolicyArrayOutput() PolicyArrayOutput {
   640  	return o
   641  }
   642  
   643  func (o PolicyArrayOutput) ToPolicyArrayOutputWithContext(ctx context.Context) PolicyArrayOutput {
   644  	return o
   645  }
   646  
   647  func (o PolicyArrayOutput) Index(i pulumi.IntInput) PolicyOutput {
   648  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Policy {
   649  		return vs[0].([]*Policy)[vs[1].(int)]
   650  	}).(PolicyOutput)
   651  }
   652  
   653  type PolicyMapOutput struct{ *pulumi.OutputState }
   654  
   655  func (PolicyMapOutput) ElementType() reflect.Type {
   656  	return reflect.TypeOf((*map[string]*Policy)(nil)).Elem()
   657  }
   658  
   659  func (o PolicyMapOutput) ToPolicyMapOutput() PolicyMapOutput {
   660  	return o
   661  }
   662  
   663  func (o PolicyMapOutput) ToPolicyMapOutputWithContext(ctx context.Context) PolicyMapOutput {
   664  	return o
   665  }
   666  
   667  func (o PolicyMapOutput) MapIndex(k pulumi.StringInput) PolicyOutput {
   668  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Policy {
   669  		return vs[0].(map[string]*Policy)[vs[1].(string)]
   670  	}).(PolicyOutput)
   671  }
   672  
   673  func init() {
   674  	pulumi.RegisterInputType(reflect.TypeOf((*PolicyInput)(nil)).Elem(), &Policy{})
   675  	pulumi.RegisterInputType(reflect.TypeOf((*PolicyArrayInput)(nil)).Elem(), PolicyArray{})
   676  	pulumi.RegisterInputType(reflect.TypeOf((*PolicyMapInput)(nil)).Elem(), PolicyMap{})
   677  	pulumi.RegisterOutputType(PolicyOutput{})
   678  	pulumi.RegisterOutputType(PolicyArrayOutput{})
   679  	pulumi.RegisterOutputType(PolicyMapOutput{})
   680  }