def create_autoscaling_group(autoscale, cluster_name, master_node, opts, slave_group): lclist = autoscale.get_all_launch_configurations( names=[cluster_name + "-lc"]) if lclist: lc = lclist[0] else: lc = LaunchConfiguration( name=cluster_name + "-lc", image_id=opts.ami, key_name=opts.key_pair, security_groups=[slave_group.id], instance_type=opts.instance_type, user_data="SPARK_MASTER=" + master_node.private_dns_name + "\n", instance_monitoring=True, spot_price=opts.spot_price) autoscale.create_launch_configuration(lc) aglist = autoscale.get_all_groups(names=[cluster_name + "-ag"]) if aglist: ag = aglist[0] else: ag = AutoScalingGroup(group_name=cluster_name + "-ag", launch_config=lc, min_size=2, max_size=8, connection=autoscale, vpc_zone_identifier=opts.subnet_id, availability_zones=[opts.zone]) autoscale.create_auto_scaling_group(ag) as_tag = boto.ec2.autoscale.Tag(key='Name', value=cluster_name + '-worker', propagate_at_launch=True, resource_id=cluster_name + "-ag") autoscale.create_or_update_tags([as_tag])
def create_autoscaling_group(autoscale, cluster_name, master_node, opts, slave_group): lclist = autoscale.get_all_launch_configurations( names=[cluster_name + "-lc"]) if lclist: lc = lclist[0] else: lc = LaunchConfiguration(name=cluster_name + "-lc", image_id=opts.ami, key_name=opts.key_pair, security_groups=[slave_group.id], instance_type=opts.instance_type, user_data="SPARK_MASTER=" + master_node.private_dns_name + "\n", instance_monitoring=True, spot_price=opts.max_spot_price) autoscale.create_launch_configuration(lc) aglist = autoscale.get_all_groups(names=[cluster_name + "-ag"]) if aglist: ag = aglist[0] else: ag = AutoScalingGroup(group_name=cluster_name + "-ag", launch_config=lc, min_size=opts.min_instances, max_size=opts.max_instances, connection=autoscale, vpc_zone_identifier=opts.subnet_id, availability_zones=[opts.zone]) autoscale.create_auto_scaling_group(ag) as_tag = boto.ec2.autoscale.Tag(key='Name', value=cluster_name + '-worker', propagate_at_launch=True, resource_id=cluster_name + "-ag") autoscale.create_or_update_tags([as_tag])
def update_asg(ami, name='proxxy', region='us-east-1'): """Update Proxxy autoscaling group with a fresh AMI""" if ami is None: print "AMI not specified" exit(1) ec2 = boto.ec2.connect_to_region(region) autoscale = boto.ec2.autoscale.connect_to_region(region, use_block_device_types=True) # get AMI metadata ami = ec2.get_all_images(image_ids=[ami])[0] new_launch_config_name = 'proxxy-'+ami.id # get autoscaling group autoscale_group = autoscale.get_all_groups(names=[name])[0] # get old launch configuration old_launch_config_name = autoscale_group.launch_config_name if old_launch_config_name == new_launch_config_name: print "Autoscale Group '%s' already uses launch config '%s'" % (name, new_launch_config_name) exit(0) old_launch_config = autoscale.get_all_launch_configurations(names=[old_launch_config_name])[0] print "Old Launch Configuration: %s" % old_launch_config # create new launch configuration based on the old one new_launch_config = _copy_launch_config(old_launch_config) new_launch_config.name = new_launch_config_name new_launch_config.image_id = ami.id autoscale.create_launch_configuration(new_launch_config) print "New Launch Configuration: %s" % new_launch_config # switch autoscaling group from old LC to new LC autoscale_group.launch_config_name = new_launch_config_name result = autoscale_group.update() print vars(result) # delete old launch configuration old_launch_config.delete() print "Done"
except IndexError: print ("Couldn't found AutoScaling Launch Configuration") sys.exit(1) try: as_group = autoscale.get_all_groups(names=[args.autoscale_group_name])[0] except IndexError: print("Couldn't found autoscale group '{0}'".format(args.autoscale_group_name)) sys.exit(1) as_launch_config_tmp = copy(as_launch_config) as_launch_config_new = copy(as_launch_config) as_launch_config_tmp.name = "{0}-tmp".format(as_launch_config.name) print("Creating temporary AutoScaling Launch Config named: {0}".format(as_launch_config_tmp.name)) autoscale.create_launch_configuration(as_launch_config_tmp) print("Setting AutoScaling Group Launch Configuration to {0}".format(as_launch_config_tmp.name)) setattr(as_group, 'launch_config_name', as_launch_config_tmp.name) as_group.update() # Delete old AutoScale Launch Configuration print("Deleting old AutoScaling Launch Config named: {0}".format(as_launch_config.name)) as_launch_config.delete() if args.image_id != None and as_launch_config_new.image_id != args.image_id: as_launch_config_new.image_id = args.image_id if args.instance_type != None and as_launch_config_new.instance_type != args.instance_type: as_launch_config_new.instance_type = args.instance_type autoscale.create_launch_configuration(as_launch_config_new)
hc=HealthCheck(interval=5,healthy_threshold=2,timeout=2,unhealthy_threshold=2,target='HTTP:80/heartbeat?username=jianj') zones=['us-east-1a'] ports=[(80,80,'http')] lb=elb.create_load_balancer('jianLb',zones,ports) lb.configure_health_check(hc) lbdns=lb.dns_name print 'load banlancer dns name:%s'%(lbdns) #Create a Launch Configuration for the instances that will become part of the auto scaling group, with the following parameters: #AMI ID: ami-ec14ba84 #Instance Type: m3.medium #Detailed Monitoring: enabled autoscale=boto.ec2.autoscale.connect_to_region('us-east-1') #the client #lc lc=LaunchConfiguration(name='jianLaunchConfig',image_id='ami-3c8f3a54',key_name='jj',security_groups=['http'],instance_type='m3.medium',instance_monitoring=True) autoscale.create_launch_configuration(lc) print 'launch cofig created' #ag ag=AutoScalingGroup(group_name='jianGroup',load_balancers=['jianLb'],availability_zones=['us-east-1a'],launch_config=lc,min_size=2,max_size=4,connection=autoscale) autoscale.create_auto_scaling_group(ag) ag.put_notification_configuration(topic="arn:aws:sns:us-east-1:683895670525:launch",notification_types=['autoscaling:EC2_INSTANCE_LAUNCH', 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR']) ag.put_notification_configuration(topic="arn:aws:sns:us-east-1:683895670525:terminate",notification_types=['autoscaling:EC2_INSTANCE_TERMINATE','autoscaling:EC2_INSTANCE_TERMINATE_ERROR']) print 'aotuscaling group createc' #scaling policy scale_up_policy=ScalingPolicy(name='jianScaleUp',adjustment_type='ChangeInCapacity',as_name='jianGroup',scaling_adjustment=2,cooldown=60) scale_down_policy=ScalingPolicy(name='jianScaleDown',adjustment_type='ChangeInCapacity',as_name='jianGroup',scaling_adjustment=-2,cooldown=120) #submit to aws autoscale.create_scaling_policy(scale_up_policy) autoscale.create_scaling_policy(scale_down_policy) #request back again scale_up_policy=autoscale.get_all_policies(as_group='jianGroup',policy_names=['jianScaleUp'])[0]
sys.exit(1) try: as_group = autoscale.get_all_groups(names=[args.autoscale_group_name])[0] except IndexError: print("Couldn't found autoscale group '{0}'".format( args.autoscale_group_name)) sys.exit(1) as_launch_config_tmp = copy(as_launch_config) as_launch_config_new = copy(as_launch_config) as_launch_config_tmp.name = "{0}-tmp".format(as_launch_config.name) print("Creating temporary AutoScaling Launch Config named: {0}".format( as_launch_config_tmp.name)) autoscale.create_launch_configuration(as_launch_config_tmp) print("Setting AutoScaling Group Launch Configuration to {0}".format( as_launch_config_tmp.name)) setattr(as_group, 'launch_config_name', as_launch_config_tmp.name) as_group.update() # Delete old AutoScale Launch Configuration print("Deleting old AutoScaling Launch Config named: {0}".format( as_launch_config.name)) as_launch_config.delete() if args.image_id != None and as_launch_config_new.image_id != args.image_id: as_launch_config_new.image_id = args.image_id if args.instance_type != None and as_launch_config_new.instance_type != args.instance_type: as_launch_config_new.instance_type = args.instance_type