A Pulumi provider SDK for creating and managing Amazon Web Services (AWS) cloud resources in Go, providing strongly-typed resource classes and data sources for all major AWS services.
Documentation for AWS Auto Scaling (EC2 Auto Scaling Groups) and Application Auto Scaling (appautoscaling) Pulumi resources.
autoscaling, appautoscalinggithub.com/pulumi/pulumi-aws/sdk/v7/go/aws/autoscalinggithub.com/pulumi/pulumi-aws/sdk/v7/go/aws/appautoscalingimport (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/autoscaling"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/appautoscaling"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)autoscaling: Manages EC2 Auto Scaling Groups and associated resources. Requires a launch configuration or launch template.appautoscaling: Manages Application Auto Scaling for services such as ECS, DynamoDB, Lambda, and others. Uses scalable targets and policies.Manages an EC2 Auto Scaling Group, which automatically adjusts the number of EC2 instances based on demand. Requires either LaunchConfiguration, LaunchTemplate, or MixedInstancesPolicy.
func NewGroup(ctx *pulumi.Context,
name string, args *GroupArgs, opts ...pulumi.ResourceOption) (*Group, error)
func GetGroup(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *GroupState, opts ...pulumi.ResourceOption) (*Group, error)
type Group struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput `pulumi:"arn"`
AvailabilityZoneDistribution GroupAvailabilityZoneDistributionOutput `pulumi:"availabilityZoneDistribution"`
// Conflicts with VpcZoneIdentifiers
AvailabilityZones pulumi.StringArrayOutput `pulumi:"availabilityZones"`
CapacityRebalance pulumi.BoolPtrOutput `pulumi:"capacityRebalance"`
CapacityReservationSpecification GroupCapacityReservationSpecificationOutput `pulumi:"capacityReservationSpecification"`
DefaultCooldown pulumi.IntOutput `pulumi:"defaultCooldown"`
DefaultInstanceWarmup pulumi.IntPtrOutput `pulumi:"defaultInstanceWarmup"`
DesiredCapacity pulumi.IntOutput `pulumi:"desiredCapacity"`
// Valid values: "units", "vcpu", "memory-mib"
DesiredCapacityType pulumi.StringPtrOutput `pulumi:"desiredCapacityType"`
EnabledMetrics MetricArrayOutput `pulumi:"enabledMetrics"`
ForceDelete pulumi.BoolPtrOutput `pulumi:"forceDelete"`
ForceDeleteWarmPool pulumi.BoolPtrOutput `pulumi:"forceDeleteWarmPool"`
HealthCheckGracePeriod pulumi.IntPtrOutput `pulumi:"healthCheckGracePeriod"`
// Valid values: "EC2", "ELB"
HealthCheckType pulumi.StringOutput `pulumi:"healthCheckType"`
IgnoreFailedScalingActivities pulumi.BoolPtrOutput `pulumi:"ignoreFailedScalingActivities"`
// Lifecycle hooks applied at creation time
InitialLifecycleHooks GroupInitialLifecycleHookArrayOutput `pulumi:"initialLifecycleHooks"`
InstanceMaintenancePolicy GroupInstanceMaintenancePolicyPtrOutput `pulumi:"instanceMaintenancePolicy"`
InstanceRefresh GroupInstanceRefreshPtrOutput `pulumi:"instanceRefresh"`
LaunchConfiguration pulumi.StringPtrOutput `pulumi:"launchConfiguration"`
LaunchTemplate GroupLaunchTemplateOutput `pulumi:"launchTemplate"`
// Classic load balancers only. Use TargetGroupArns for ALB/NLB.
LoadBalancers pulumi.StringArrayOutput `pulumi:"loadBalancers"`
MaxInstanceLifetime pulumi.IntPtrOutput `pulumi:"maxInstanceLifetime"`
MaxSize pulumi.IntOutput `pulumi:"maxSize"`
MetricsGranularity pulumi.StringPtrOutput `pulumi:"metricsGranularity"`
MinElbCapacity pulumi.IntPtrOutput `pulumi:"minElbCapacity"`
MinSize pulumi.IntOutput `pulumi:"minSize"`
MixedInstancesPolicy GroupMixedInstancesPolicyOutput `pulumi:"mixedInstancesPolicy"`
Name pulumi.StringOutput `pulumi:"name"`
NamePrefix pulumi.StringOutput `pulumi:"namePrefix"`
PlacementGroup pulumi.StringPtrOutput `pulumi:"placementGroup"`
PredictedCapacity pulumi.IntOutput `pulumi:"predictedCapacity"`
ProtectFromScaleIn pulumi.BoolPtrOutput `pulumi:"protectFromScaleIn"`
Region pulumi.StringOutput `pulumi:"region"`
ServiceLinkedRoleArn pulumi.StringOutput `pulumi:"serviceLinkedRoleArn"`
// Valid values: "Launch", "Terminate", "HealthCheck", "ReplaceUnhealthy",
// "AZRebalance", "AlarmNotification", "ScheduledActions", "AddToLoadBalancer", "InstanceRefresh"
SuspendedProcesses pulumi.StringArrayOutput `pulumi:"suspendedProcesses"`
Tags GroupTagArrayOutput `pulumi:"tags"`
TargetGroupArns pulumi.StringArrayOutput `pulumi:"targetGroupArns"`
// Valid values: "OldestInstance", "NewestInstance", "OldestLaunchConfiguration",
// "ClosestToNextInstanceHour", "OldestLaunchTemplate", "AllocationStrategy", "Default"
TerminationPolicies pulumi.StringArrayOutput `pulumi:"terminationPolicies"`
TrafficSources GroupTrafficSourceArrayOutput `pulumi:"trafficSources"`
// Subnet IDs. Conflicts with AvailabilityZones.
VpcZoneIdentifiers pulumi.StringArrayOutput `pulumi:"vpcZoneIdentifiers"`
WaitForCapacityTimeout pulumi.StringPtrOutput `pulumi:"waitForCapacityTimeout"`
WaitForElbCapacity pulumi.IntPtrOutput `pulumi:"waitForElbCapacity"`
WarmPool GroupWarmPoolPtrOutput `pulumi:"warmPool"`
WarmPoolSize pulumi.IntOutput `pulumi:"warmPoolSize"`
}
type GroupArgs struct {
AvailabilityZoneDistribution GroupAvailabilityZoneDistributionPtrInput
AvailabilityZones pulumi.StringArrayInput
CapacityRebalance pulumi.BoolPtrInput
CapacityReservationSpecification GroupCapacityReservationSpecificationPtrInput
DefaultCooldown pulumi.IntPtrInput
DefaultInstanceWarmup pulumi.IntPtrInput
DesiredCapacity pulumi.IntPtrInput
DesiredCapacityType pulumi.StringPtrInput
EnabledMetrics MetricArrayInput
ForceDelete pulumi.BoolPtrInput
ForceDeleteWarmPool pulumi.BoolPtrInput
HealthCheckGracePeriod pulumi.IntPtrInput
HealthCheckType pulumi.StringPtrInput
IgnoreFailedScalingActivities pulumi.BoolPtrInput
InitialLifecycleHooks GroupInitialLifecycleHookArrayInput
InstanceMaintenancePolicy GroupInstanceMaintenancePolicyPtrInput
InstanceRefresh GroupInstanceRefreshPtrInput
LaunchConfiguration pulumi.Input
LaunchTemplate GroupLaunchTemplatePtrInput
LoadBalancers pulumi.StringArrayInput
MaxInstanceLifetime pulumi.IntPtrInput
// Required
MaxSize pulumi.IntInput
MetricsGranularity pulumi.StringPtrInput
MinElbCapacity pulumi.IntPtrInput
// Required
MinSize pulumi.IntInput
MixedInstancesPolicy GroupMixedInstancesPolicyPtrInput
Name pulumi.StringPtrInput
NamePrefix pulumi.StringPtrInput
PlacementGroup pulumi.Input
ProtectFromScaleIn pulumi.BoolPtrInput
Region pulumi.StringPtrInput
ServiceLinkedRoleArn pulumi.StringPtrInput
SuspendedProcesses pulumi.StringArrayInput
Tags GroupTagArrayInput
TargetGroupArns pulumi.StringArrayInput
TerminationPolicies pulumi.StringArrayInput
TrafficSources GroupTrafficSourceArrayInput
VpcZoneIdentifiers pulumi.StringArrayInput
WaitForCapacityTimeout pulumi.StringPtrInput
WaitForElbCapacity pulumi.IntPtrInput
WarmPool GroupWarmPoolPtrInput
}Defines how an Auto Scaling Group scales. Supports SimpleScaling, StepScaling, TargetTrackingScaling, and PredictiveScaling policy types.
func NewPolicy(ctx *pulumi.Context,
name string, args *PolicyArgs, opts ...pulumi.ResourceOption) (*Policy, error)
func GetPolicy(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *PolicyState, opts ...pulumi.ResourceOption) (*Policy, error)
type Policy struct {
pulumi.CustomResourceState
// Valid values: "ChangeInCapacity", "ExactCapacity", "PercentChangeInCapacity"
AdjustmentType pulumi.StringPtrOutput `pulumi:"adjustmentType"`
Arn pulumi.StringOutput `pulumi:"arn"`
AutoscalingGroupName pulumi.StringOutput `pulumi:"autoscalingGroupName"`
Cooldown pulumi.IntPtrOutput `pulumi:"cooldown"`
Enabled pulumi.BoolPtrOutput `pulumi:"enabled"`
EstimatedInstanceWarmup pulumi.IntPtrOutput `pulumi:"estimatedInstanceWarmup"`
// Valid values: "Minimum", "Maximum", "Average"
MetricAggregationType pulumi.StringOutput `pulumi:"metricAggregationType"`
MinAdjustmentMagnitude pulumi.IntPtrOutput `pulumi:"minAdjustmentMagnitude"`
Name pulumi.StringOutput `pulumi:"name"`
// Valid values: "SimpleScaling" (default), "StepScaling", "TargetTrackingScaling", "PredictiveScaling"
PolicyType pulumi.StringPtrOutput `pulumi:"policyType"`
PredictiveScalingConfiguration PolicyPredictiveScalingConfigurationPtrOutput `pulumi:"predictiveScalingConfiguration"`
Region pulumi.StringOutput `pulumi:"region"`
// For SimpleScaling: number of instances to scale (positive = up, negative = down)
ScalingAdjustment pulumi.IntPtrOutput `pulumi:"scalingAdjustment"`
// For StepScaling
StepAdjustments PolicyStepAdjustmentArrayOutput `pulumi:"stepAdjustments"`
// For TargetTrackingScaling
TargetTrackingConfiguration PolicyTargetTrackingConfigurationPtrOutput `pulumi:"targetTrackingConfiguration"`
}Attaches lifecycle hooks to an Auto Scaling Group to perform custom actions when instances are launched or terminated.
func NewLifecycleHook(ctx *pulumi.Context,
name string, args *LifecycleHookArgs, opts ...pulumi.ResourceOption) (*LifecycleHook, error)
func GetLifecycleHook(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *LifecycleHookState, opts ...pulumi.ResourceOption) (*LifecycleHook, error)
type LifecycleHook struct {
pulumi.CustomResourceState
AutoscalingGroupName pulumi.StringOutput `pulumi:"autoscalingGroupName"`
// Action on timeout or failure. Valid values: "CONTINUE" (default is "ABANDON")
DefaultResult pulumi.StringOutput `pulumi:"defaultResult"`
// Timeout in seconds before DefaultResult is applied
HeartbeatTimeout pulumi.IntPtrOutput `pulumi:"heartbeatTimeout"`
// Valid values: "autoscaling:EC2_INSTANCE_LAUNCHING", "autoscaling:EC2_INSTANCE_TERMINATING"
LifecycleTransition pulumi.StringOutput `pulumi:"lifecycleTransition"`
Name pulumi.StringOutput `pulumi:"name"`
NotificationMetadata pulumi.StringPtrOutput `pulumi:"notificationMetadata"`
// ARN of SQS queue, SNS topic, or Lambda function for notifications
NotificationTargetArn pulumi.StringPtrOutput `pulumi:"notificationTargetArn"`
Region pulumi.StringOutput `pulumi:"region"`
// IAM role ARN allowing ASG to publish to the notification target
RoleArn pulumi.StringPtrOutput `pulumi:"roleArn"`
}
type LifecycleHookArgs struct {
AutoscalingGroupName pulumi.StringInput
// Valid values: "CONTINUE", "ABANDON". Default: "ABANDON"
DefaultResult pulumi.StringPtrInput
HeartbeatTimeout pulumi.IntPtrInput
// Valid values: "autoscaling:EC2_INSTANCE_LAUNCHING", "autoscaling:EC2_INSTANCE_TERMINATING"
LifecycleTransition pulumi.StringInput
Name pulumi.StringPtrInput
NotificationMetadata pulumi.StringPtrInput
NotificationTargetArn pulumi.StringPtrInput
Region pulumi.StringPtrInput
RoleArn pulumi.StringPtrInput
}Configures scheduled scaling actions for an Auto Scaling Group using cron expressions or one-time schedules.
func NewSchedule(ctx *pulumi.Context,
name string, args *ScheduleArgs, opts ...pulumi.ResourceOption) (*Schedule, error)
func GetSchedule(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *ScheduleState, opts ...pulumi.ResourceOption) (*Schedule, error)
type Schedule struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput `pulumi:"arn"`
AutoscalingGroupName pulumi.StringOutput `pulumi:"autoscalingGroupName"`
// -1 means no change. Default: 0
DesiredCapacity pulumi.IntOutput `pulumi:"desiredCapacity"`
// UTC format: "YYYY-MM-DDThh:mm:ssZ"
EndTime pulumi.StringOutput `pulumi:"endTime"`
// -1 means no change. Default: 0
MaxSize pulumi.IntOutput `pulumi:"maxSize"`
// -1 means no change. Default: 0
MinSize pulumi.IntOutput `pulumi:"minSize"`
// Unix cron syntax for recurring schedules
Recurrence pulumi.StringOutput `pulumi:"recurrence"`
Region pulumi.StringOutput `pulumi:"region"`
ScheduledActionName pulumi.StringOutput `pulumi:"scheduledActionName"`
// UTC format: "YYYY-MM-DDThh:mm:ssZ"
StartTime pulumi.StringOutput `pulumi:"startTime"`
// IANA timezone (e.g., "Etc/GMT+9", "Pacific/Tahiti")
TimeZone pulumi.StringOutput `pulumi:"timeZone"`
}
type ScheduleArgs struct {
// Required
AutoscalingGroupName pulumi.StringInput
DesiredCapacity pulumi.IntPtrInput
EndTime pulumi.StringPtrInput
MaxSize pulumi.IntPtrInput
MinSize pulumi.IntPtrInput
Recurrence pulumi.StringPtrInput
Region pulumi.StringPtrInput
// Required
ScheduledActionName pulumi.StringInput
StartTime pulumi.StringPtrInput
TimeZone pulumi.StringPtrInput
}// Resource constructors
func NewGroup(ctx *pulumi.Context, name string, args *GroupArgs, opts ...pulumi.ResourceOption) (*Group, error)
func NewPolicy(ctx *pulumi.Context, name string, args *PolicyArgs, opts ...pulumi.ResourceOption) (*Policy, error)
func NewLifecycleHook(ctx *pulumi.Context, name string, args *LifecycleHookArgs, opts ...pulumi.ResourceOption) (*LifecycleHook, error)
func NewSchedule(ctx *pulumi.Context, name string, args *ScheduleArgs, opts ...pulumi.ResourceOption) (*Schedule, error)
func NewNotification(ctx *pulumi.Context, name string, args *NotificationArgs, opts ...pulumi.ResourceOption) (*Notification, error)
func NewTag(ctx *pulumi.Context, name string, args *TagArgs, opts ...pulumi.ResourceOption) (*Tag, error)
func NewAttachment(ctx *pulumi.Context, name string, args *AttachmentArgs, opts ...pulumi.ResourceOption) (*Attachment, error)
func NewTrafficSourceAttachment(ctx *pulumi.Context, name string, args *TrafficSourceAttachmentArgs, opts ...pulumi.ResourceOption) (*TrafficSourceAttachment, error)
// Data source
func GetAmiIds(ctx *pulumi.Context, args *GetAmiIdsArgs, opts ...pulumi.InvokeOption) (*GetAmiIdsResult, error)
// Resource import functions
func GetGroup(ctx *pulumi.Context, name string, id pulumi.IDInput, state *GroupState, opts ...pulumi.ResourceOption) (*Group, error)
func GetAttachment(ctx *pulumi.Context, name string, id pulumi.IDInput, state *AttachmentState, opts ...pulumi.ResourceOption) (*Attachment, error)
func GetLifecycleHook(ctx *pulumi.Context, name string, id pulumi.IDInput, state *LifecycleHookState, opts ...pulumi.ResourceOption) (*LifecycleHook, error)
func GetNotification(ctx *pulumi.Context, name string, id pulumi.IDInput, state *NotificationState, opts ...pulumi.ResourceOption) (*Notification, error)
func GetPolicy(ctx *pulumi.Context, name string, id pulumi.IDInput, state *PolicyState, opts ...pulumi.ResourceOption) (*Policy, error)
func GetSchedule(ctx *pulumi.Context, name string, id pulumi.IDInput, state *ScheduleState, opts ...pulumi.ResourceOption) (*Schedule, error)
func GetTag(ctx *pulumi.Context, name string, id pulumi.IDInput, state *TagState, opts ...pulumi.ResourceOption) (*Tag, error)
func GetTrafficSourceAttachment(ctx *pulumi.Context, name string, id pulumi.IDInput, state *TrafficSourceAttachmentState, opts ...pulumi.ResourceOption) (*TrafficSourceAttachment, error)Registers a scalable target with Application Auto Scaling. Supports services such as DynamoDB, ECS, Lambda, RDS, SageMaker, and others.
func NewTarget(ctx *pulumi.Context,
name string, args *TargetArgs, opts ...pulumi.ResourceOption) (*Target, error)
func GetTarget(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *TargetState, opts ...pulumi.ResourceOption) (*Target, error)
type Target struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput `pulumi:"arn"`
MaxCapacity pulumi.IntOutput `pulumi:"maxCapacity"`
MinCapacity pulumi.IntOutput `pulumi:"minCapacity"`
Region pulumi.StringOutput `pulumi:"region"`
// Resource ID format depends on service. e.g., "table/tableName" for DynamoDB,
// "service/clusterName/serviceName" for ECS
ResourceId pulumi.StringOutput `pulumi:"resourceId"`
RoleArn pulumi.StringOutput `pulumi:"roleArn"`
// e.g., "dynamodb:table:ReadCapacityUnits", "ecs:service:DesiredCount"
ScalableDimension pulumi.StringOutput `pulumi:"scalableDimension"`
// e.g., "dynamodb", "ecs", "lambda", "rds", "sagemaker"
ServiceNamespace pulumi.StringOutput `pulumi:"serviceNamespace"`
SuspendedState TargetSuspendedStateOutput `pulumi:"suspendedState"`
Tags pulumi.StringMapOutput `pulumi:"tags"`
TagsAll pulumi.StringMapOutput `pulumi:"tagsAll"`
}
type TargetArgs struct {
// Required
MaxCapacity pulumi.IntInput
// Required
MinCapacity pulumi.IntInput
Region pulumi.StringPtrInput
// Required
ResourceId pulumi.StringInput
RoleArn pulumi.StringPtrInput
// Required
ScalableDimension pulumi.StringInput
// Required
ServiceNamespace pulumi.StringInput
SuspendedState TargetSuspendedStatePtrInput
Tags pulumi.StringMapInput
}Attaches a scaling policy to an Application Auto Scaling target. Supports StepScaling, TargetTrackingScaling, and PredictiveScaling policy types.
func NewPolicy(ctx *pulumi.Context,
name string, args *PolicyArgs, opts ...pulumi.ResourceOption) (*Policy, error)
func GetPolicy(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *PolicyState, opts ...pulumi.ResourceOption) (*Policy, error)
type Policy struct {
pulumi.CustomResourceState
AlarmArns pulumi.StringArrayOutput `pulumi:"alarmArns"`
Arn pulumi.StringOutput `pulumi:"arn"`
Name pulumi.StringOutput `pulumi:"name"`
// Valid values: "StepScaling", "TargetTrackingScaling" (default), "PredictiveScaling"
PolicyType pulumi.StringPtrOutput `pulumi:"policyType"`
// Requires PolicyType = "PredictiveScaling"
PredictiveScalingPolicyConfiguration PolicyPredictiveScalingPolicyConfigurationPtrOutput `pulumi:"predictiveScalingPolicyConfiguration"`
Region pulumi.StringOutput `pulumi:"region"`
ResourceId pulumi.StringOutput `pulumi:"resourceId"`
ScalableDimension pulumi.StringOutput `pulumi:"scalableDimension"`
ServiceNamespace pulumi.StringOutput `pulumi:"serviceNamespace"`
// Requires PolicyType = "StepScaling"
StepScalingPolicyConfiguration PolicyStepScalingPolicyConfigurationPtrOutput `pulumi:"stepScalingPolicyConfiguration"`
// Requires PolicyType = "TargetTrackingScaling"
TargetTrackingScalingPolicyConfiguration PolicyTargetTrackingScalingPolicyConfigurationPtrOutput `pulumi:"targetTrackingScalingPolicyConfiguration"`
}
type PolicyArgs struct {
// Required: must be 1-255 characters
Name pulumi.StringInput
// Valid values: "StepScaling", "TargetTrackingScaling", "PredictiveScaling". Default: "StepScaling"
PolicyType pulumi.StringPtrInput
PredictiveScalingPolicyConfiguration PolicyPredictiveScalingPolicyConfigurationPtrInput
Region pulumi.StringPtrInput
// Required: must match the registered scalable target
ResourceId pulumi.StringInput
// Required: must match the registered scalable target
ScalableDimension pulumi.StringInput
// Required: must match the registered scalable target
ServiceNamespace pulumi.StringInput
StepScalingPolicyConfiguration PolicyStepScalingPolicyConfigurationPtrInput
TargetTrackingScalingPolicyConfiguration PolicyTargetTrackingScalingPolicyConfigurationPtrInput
}package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/autoscaling"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/ec2"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
lt, err := ec2.NewLaunchTemplate(ctx, "example", &ec2.LaunchTemplateArgs{
Name: pulumi.String("example"),
ImageId: pulumi.String("ami-0c55b159cbfafe1f0"),
InstanceType: pulumi.String("t3.micro"),
})
if err != nil {
return err
}
_, err = autoscaling.NewGroup(ctx, "example", &autoscaling.GroupArgs{
Name: pulumi.String("example-asg"),
MinSize: pulumi.Int(1),
MaxSize: pulumi.Int(5),
DesiredCapacity: pulumi.Int(2),
VpcZoneIdentifiers: pulumi.StringArray{
pulumi.String("subnet-abc123"),
pulumi.String("subnet-def456"),
},
LaunchTemplate: &autoscaling.GroupLaunchTemplateArgs{
Id: lt.ID(),
Version: pulumi.String("$Latest"),
},
HealthCheckType: pulumi.String("ELB"),
HealthCheckGracePeriod: pulumi.Int(300),
Tags: autoscaling.GroupTagArray{
&autoscaling.GroupTagArgs{
Key: pulumi.String("Name"),
Value: pulumi.String("example-instance"),
PropagateAtLaunch: pulumi.Bool(true),
},
},
})
return err
})
}// EC2 Auto Scaling - Target Tracking
_, err = autoscaling.NewPolicy(ctx, "cpuPolicy", &autoscaling.PolicyArgs{
AutoscalingGroupName: asg.Name,
Name: pulumi.String("cpu-target-tracking"),
PolicyType: pulumi.String("TargetTrackingScaling"),
TargetTrackingConfiguration: &autoscaling.PolicyTargetTrackingConfigurationArgs{
PredefinedMetricSpecification: &autoscaling.PolicyTargetTrackingConfigurationPredefinedMetricSpecificationArgs{
PredefinedMetricType: pulumi.String("ASGAverageCPUUtilization"),
},
TargetValue: pulumi.Float64(50.0),
},
})_, err = autoscaling.NewLifecycleHook(ctx, "terminationHook", &autoscaling.LifecycleHookArgs{
AutoscalingGroupName: asg.Name,
Name: pulumi.String("drain-instance"),
LifecycleTransition: pulumi.String("autoscaling:EC2_INSTANCE_TERMINATING"),
DefaultResult: pulumi.String("CONTINUE"),
HeartbeatTimeout: pulumi.Int(300),
NotificationTargetArn: snsTopic.Arn,
RoleArn: iamRole.Arn,
})_, err = autoscaling.NewSchedule(ctx, "scaleDown", &autoscaling.ScheduleArgs{
AutoscalingGroupName: asg.Name,
ScheduledActionName: pulumi.String("scale-down-nights"),
MinSize: pulumi.Int(0),
MaxSize: pulumi.Int(2),
DesiredCapacity: pulumi.Int(0),
Recurrence: pulumi.String("0 20 * * *"), // 8 PM UTC daily
TimeZone: pulumi.String("UTC"),
})package main
import (
"fmt"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/appautoscaling"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
target, err := appautoscaling.NewTarget(ctx, "ecsTarget", &appautoscaling.TargetArgs{
MaxCapacity: pulumi.Int(10),
MinCapacity: pulumi.Int(1),
ResourceId: pulumi.Sprintf("service/%v/%v",
ecsCluster.Name, ecsService.Name),
ScalableDimension: pulumi.String("ecs:service:DesiredCount"),
ServiceNamespace: pulumi.String("ecs"),
})
if err != nil {
return err
}
_, err = appautoscaling.NewPolicy(ctx, "ecsCpuPolicy", &appautoscaling.PolicyArgs{
Name: target.ResourceId.ApplyT(func(id string) (string, error) {
return fmt.Sprintf("cpu-tracking:%v", id), nil
}).(pulumi.StringOutput),
PolicyType: pulumi.String("TargetTrackingScaling"),
ResourceId: target.ResourceId,
ScalableDimension: target.ScalableDimension,
ServiceNamespace: target.ServiceNamespace,
TargetTrackingScalingPolicyConfiguration: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationArgs{
PredefinedMetricSpecification: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecificationArgs{
PredefinedMetricType: pulumi.String("ECSServiceAverageCPUUtilization"),
},
TargetValue: pulumi.Float64(70),
ScaleInCooldown: pulumi.Int(300),
ScaleOutCooldown: pulumi.Int(60),
},
})
return err
})
}target, err := appautoscaling.NewTarget(ctx, "dynamoReadTarget", &appautoscaling.TargetArgs{
MaxCapacity: pulumi.Int(100),
MinCapacity: pulumi.Int(5),
ResourceId: pulumi.Sprintf("table/%v", table.Name),
ScalableDimension: pulumi.String("dynamodb:table:ReadCapacityUnits"),
ServiceNamespace: pulumi.String("dynamodb"),
})
_, err = appautoscaling.NewPolicy(ctx, "dynamoReadPolicy", &appautoscaling.PolicyArgs{
Name: target.ResourceId.ApplyT(func(id string) (string, error) {
return fmt.Sprintf("DynamoDBReadCapacityUtilization:%v", id), nil
}).(pulumi.StringOutput),
PolicyType: pulumi.String("TargetTrackingScaling"),
ResourceId: target.ResourceId,
ScalableDimension: target.ScalableDimension,
ServiceNamespace: target.ServiceNamespace,
TargetTrackingScalingPolicyConfiguration: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationArgs{
PredefinedMetricSpecification: &appautoscaling.PolicyTargetTrackingScalingPolicyConfigurationPredefinedMetricSpecificationArgs{
PredefinedMetricType: pulumi.String("DynamoDBReadCapacityUtilization"),
},
TargetValue: pulumi.Float64(70),
},
})Install with Tessl CLI
npx tessl i tessl/golang-github-com-pulumi-pulumi-aws-sdk-v7@7.16.1docs