Associate EIP for EC2 instances

 

We need associate EIP for five hundred EC2 instances。

 

If you hava five hundred EC2 instances:

#!/usr/bin/env python 
from boto.exception import BotoServerError
import boto
import boto.ec2

class Aws_Ec2_API(object):
    def __init__(self, region):
        self.region = region
        self.conn = boto.ec2.connect_to_region(self.region)

    def allocate_eip(self, instanceid):
        eip = self.conn.allocate_address()
        print instanceid, eip.public_ip
        self.conn.associate_address(instance_id=instanceid, public_ip=eip.public_ip)

    def close(self):
        self.conn.close()

if __name__ == "__main__":
    c = Aws_Ec2_API('xx-north-1') 
    ### read ec2 instances from file
    ec2_list = open('instances.txt').read().strip().split(',')
    #######associate eip for ec2
    for ec2_id in bench_list:
        ec.allocate_eip(ec2_id)
    c.close()

else:

import time
import boto
import boto.ec2.networkinterface

from settings.settings import AWS_ACCESS_GENERIC

ec2 = boto.connect_ec2(*AWS_ACCESS_GENERIC)

interface = boto.ec2.networkinterface.NetworkInterfaceSpecification(subnet_id='subnet-11d02d71',
                                                                    groups=['sg-0365c56d'],
                                                                    associate_public_ip_address=True)
interfaces = boto.ec2.networkinterface.NetworkInterfaceCollection(interface)

reservation = ec2.run_instances(image_id='ami-a1074dc8',
                                instance_type='t1.micro',

#the following two arguments are provided in the network_interface

#instead at the global level !!

#'security_group_ids': ['sg-0365c56d'],

#'subnet_id': 'subnet-11d02d71',
                                network_interfaces=interfaces,
                                key_name='keyPairName')

instance = reservation.instances[0]
instance.update()
while instance.state == "pending":
    print instance, instance.state
    time.sleep(5)
    instance.update()

instance.add_tag("Name", "some name")

print "done", instance

####

about article:

http://stackoverflow.com/questions/19029588/how-to-auto-assign-public-ip-to-ec2-instance-with-boto

http://boto.readthedocs.org/en/latest/ref/ec2.html#boto.ec2.address.Address.associate