Add target tracking auto scale to your aws ecs service
This cloudformation snippet will add auto scale to your existing cloudformation based ecs service.
To connect it to your service you may need to edit the folowing vars ServiceScalingTarget:
- Service This is the name of the cloudformation block that defines your ecs service
- Ref: ContainerCluster This should pull in the ecs cluster name I define this in a param: ContainerCluster
ApplicationAutoScalingRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [application-autoscaling.amazonaws.com]
Action: ['sts:AssumeRole']
Path: /
Policies:
-
PolicyName: ECSBlogScalingRole
PolicyDocument:
Statement:
- Effect: Allow
Action:
- ecs:UpdateService
- ecs:DescribeServices
- application-autoscaling:*
- cloudwatch:DescribeAlarms
- cloudwatch:GetMetricStatistics
Resource: "*"
ServiceScalingTarget:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 20
MinCapacity: 1
ResourceId:
Fn::Join:
- ''
- - service/
- Ref: ContainerCluster
- "/"
- Fn::GetAtt:
- Service
- Name
RoleARN:
Fn::GetAtt:
- ApplicationAutoScalingRole
- Arn
ScalableDimension: ecs:service:DesiredCount
ServiceNamespace: ecs
ServiceScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Sub ${AWS::StackName}
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref ServiceScalingTarget
TargetTrackingScalingPolicyConfiguration:
TargetValue: 50.0
ScaleInCooldown: 60
ScaleOutCooldown: 60
PredefinedMetricSpecification:
PredefinedMetricType: ECSServiceAverageCPUUtilization