1

I am developing an application that monitors the instances of an Autoscaling group with the goal of work with its elasticity. If the instance CPU Load is 30% or lower (and there are more than one instance) I should scale down the autoscaling group, and it is 70% or higher I should scale up.

For scaling down it is working pretty well, I am able to monitor the instance and remove the instances, but when it comes to scaling up, I can do that but it seems the autoscaling group does not refresh, and for me have the new instance appearing when I execute the describe_auto_scaling_groups of Boto3 I have to kill my code execution and start it over.

Is there a way to do that without having to start over every time?

This is my code:

self._asg = boto3.client('autoscaling', region_name=region)
self._cloud_watch = boto3.client('cloudwatch',  region_name=region)
self._ec2 = boto3.client('ec2',  region_name=region)

self._auto_scaling_info = self._asg.describe_auto_scaling_groups(AutoScalingGroupNames=[autoscalinggroup])

After that, I loop to all instances of the current autoscaling group to check its CPU Load with get_metric_statistics of cloud watch and execute a simple if to scale

if instance.getCpuUtilization() <= 30 and len(self._instances) > 2: 
      self._autoScalingClient.set_desired_capacity(AutoScalingGroupName=self._auto_scaling_group.getAutoScalingGroupName(), DesiredCapacity=(self._auto_scaling_group.getDesiredCapacity() - 1))
        
if instance.getCpuUtilization() >= 70:         
    self._autoScalingClient.set_desired_capacity(AutoScalingGroupName=self._auto_scaling_group.getAutoScalingGroupName(), DesiredCapacity=(self._auto_scaling_group.getDesiredCapacity() + 1))

After that, I call the describe_auto_scaling_groups again, but the new instance is not shown.

So I am able to scale up and down but after I change the autoscaling desired capacity, I cannot get the new instance that was created via describe_auto_scaling_groups, but if I check on AWS console it is attached to the autoscaling group, it seems that I am missing some kind of refresh after scale it. I have also search about NextToken, but not of my boto3 calls return one.

Does anyone know how can I fix it?

Thanks, Augusto

Augusto Accorsi
  • 317
  • 5
  • 21
  • Can you show a complete example? Once you execute `set_desired_capacity` then what do you do? Its not shown in your code? – Marcin Apr 08 '21 at 12:28
  • After that, I call `describe_auto_scaling_groups` again, but the new instance just created does not appear. I have added it in the question – Augusto Accorsi Apr 08 '21 at 12:33

0 Answers0