AutoScalingRole: Metadata: 'aws:copilot:description': 'An IAM role for container auto scaling' Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: ecs-tasks.amazonaws.com Action: 'sts:AssumeRole' ManagedPolicyArns: - !Sub 'arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2ContainerServiceAutoscaleRole' AutoScalingTarget: Metadata: 'aws:copilot:description': "An autoscaling target to scale your service's desired count" Type: AWS::ApplicationAutoScaling::ScalableTarget Properties: MinCapacity: 1 MaxCapacity: 10 ResourceId: Fn::Join: - '/' - - 'service' - Fn::ImportValue: !Sub '${AppName}-${EnvName}-ClusterId' - !GetAtt Service.Name ScalableDimension: ecs:service:DesiredCount ServiceNamespace: ecs RoleARN: !GetAtt AutoScalingRole.Arn AutoScalingPolicyECSServiceAverageCPUUtilization: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: !Join ['-', [!Ref WorkloadName, ECSServiceAverageCPUUtilization, ScalingPolicy]] PolicyType: TargetTrackingScaling ScalingTargetId: !Ref AutoScalingTarget TargetTrackingScalingPolicyConfiguration: PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageCPUUtilization ScaleInCooldown: 120 ScaleOutCooldown: 60 TargetValue: 70 AutoScalingPolicyECSServiceAverageMemoryUtilization: Type: AWS::ApplicationAutoScaling::ScalingPolicy Properties: PolicyName: !Join ['-', [!Ref WorkloadName, ECSServiceAverageMemoryUtilization, ScalingPolicy]] PolicyType: TargetTrackingScaling ScalingTargetId: !Ref AutoScalingTarget TargetTrackingScalingPolicyConfiguration: PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageMemoryUtilization ScaleInCooldown: 120 ScaleOutCooldown: 60 TargetValue: 80