· 6 years ago · Feb 25, 2019, 02:42 AM
1#!/usr/bin/env python
2"""Determine if the instances in an autoscaling group are InService in its ELBs
3attached to that group.
4"""
5
6import sys
7import boto.ec2.elb
8import boto.ec2.autoscale
9import argparse
10
11parser = argparse.ArgumentParser(description='Given an ASG, check if its instances are InService in an ELB')
12parser.add_argument('-a', '--autoscale-group',
13 required=True,
14 help='Name of an autoscale group')
15parser.add_argument('-r', '--region',
16 required=True,
17 help='AWS region')
18parser.add_argument('-k', '--access-key',
19 required=True,
20 help='AWS Access Key')
21parser.add_argument('-s', '--secret-key',
22 required=True,
23 help='AWS Secret Key')
24args = parser.parse_args()
25
26AWS_ACCESS_KEY = args.access_key
27AWS_SECRET_KEY = args.secret_key
28AWS_REGION = args.region
29AWS_ASG = args.autoscale_group
30
31
32conn_as = boto.ec2.autoscale.connect_to_region(AWS_REGION, aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_KEY)
33asg = conn_as.get_all_groups(names=[AWS_ASG])[0]
34if asg.health_check_type != "ELB":
35 sys.exit("ASG does not use ELB health checks. Quitting.")
36instances = [i.instance_id for i in asg.instances]
37if len(instances) != asg.desired_capacity:
38 sys.exit("Number of instances do not yet match desired capacity")
39
40conn_elb = boto.ec2.elb.connect_to_region(AWS_REGION, aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_KEY)
41for lb in asg.load_balancers:
42 for i in conn_elb.describe_instance_health(lb, instances=instances):
43 if i.state != "InService":
44 sys.exit("Instance {} is not InService".format(i.instance_id))