This post is in continuation of my previous post, in which I discussed automation techniques to start EC2 instances along with ELB etc.
Scenario
We have been able to setup an EC2 machine , which only receives request from a ELB. This is done by making a security group.
Next, we created a Launching configuration and an AutoScaling group.
What do we want now?
Now I will try to delete the instance programatically. Here is the code -
def delete_this_instance(*args): conn_reg = CONN_REG(region_name) conn_as = CONN_AS(region_name) conn_elb = CONN_ELB(region_name) # delete auto scaling group asg = conn_as.get_all_groups(names=[auto_scaling_group])[0] asg.shutdown_instances() while asg.instances: time.sleep(2) asg = conn_as.get_all_groups(names=[auto_scaling_group])[0] # check all activities of asg loop_var = True while loop_var: all_activities = conn_as.get_all_activities(asg) print 'all_activities-', all_activities, 'inside' loop_var = False for activity in all_activities: if activity.progress != '100': print 'activity id-%s, progress-%s'%(activity.activity_id, activity.progress) loop_var = True time.sleep(5) asg.delete() # delete load balancer lb = conn_elb.get_all_load_balancers([loadbalancer_name])[0] lb.delete() # delete launch config lc = conn_as.get_all_launch_configurations(names=[launch_configuration])[0] lc.delete() # wait for network interfaces to die sg = conn_reg.get_all_security_groups(groupnames=[security_group])[0] ni = conn_reg.get_all_network_interfaces(filters={'group-id':sg.id}) while ni: time.sleep(2) ni = conn_reg.get_all_network_interfaces(filters={'group-id':sg.id}) # delete ec2 sg first sg1 = conn_reg.get_all_security_groups(groupnames=['%s1'%security_group])[0] sg1.delete() # delete security group for elb sg.delete()
Important thing to note here is the sequence of deleting the instance. We deleted in the following sequence -
- Shutdown EC2 Instances
- Delete AutoScaling Group
- Then the launch configuration
- Then all network interfaces
- Atlast delete the Security Groups
Difficulties
Deleting the instances programitically is not as straightforward as it looks.
- Issues -
- There is a dependency of one type of instance on other. So you cant delete ELB until ASG groups have been deleted.
- Also, each type of instance takes its own time, so we have to recursively check and then proceed.
- For deleting AutoScaling Groups i.e EC2 instances-
- Recursively check for groups after 2 secs.
- Once the groups are down, check for any other pending activites. Recursively wait for this as well. This is the slowest of all steps.
- Deleting ELB and Launch Configs is easy
- Before Deleting all security groups, we will have to wait for all network interfaces to die.
- Done!!.