Esempio n. 1
0
    def _connect_to_region(self, **kwargs):
        if self._isRegionInfo:
            return RDSConnection(aws_access_key_id=self.aws_access_key_id,
                                 aws_secret_access_key=self.aws_secret_access_key,
                                 **kwargs)
        for region in self.all_region(self.name):
            if region.name == self.region:
                self.region = region

        return RDSConnection(aws_access_key_id=self.aws_access_key_id,
                             aws_secret_access_key=self.aws_secret_access_key,
                             region=self.region, **kwargs)
def snapshot_rds():
    """
    dumb script that cleans up all the duplicate ebs snapshots our two cron servers
    create while backing up redis
    """

    (key, secret) = aws
    conn = RDSConnection(key, secret)

    for db in conn.get_all_dbinstances():
        print "backing up rds", db.id, "..."
        now = datetime.datetime.now()
        conn.create_dbsnapshot("snapshot-backup-{0}".format(now.strftime("%Y-%m-%d")), db.id)
Esempio n. 3
0
def snapshot_rds():
    """
    dumb script that cleans up all the duplicate ebs snapshots our two cron servers
    create while backing up redis
    """

    (key, secret) = aws
    conn = RDSConnection(key, secret)

    for db in conn.get_all_dbinstances():
        print "backing up rds", db.id, "..."
        now = datetime.datetime.now()
        conn.create_dbsnapshot(
            "snapshot-backup-{0}".format(now.strftime("%Y-%m-%d")), db.id)
Esempio n. 4
0
def connect_rds(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
    """
    :type aws_access_key_id: string
    :param aws_access_key_id: Your AWS Access Key ID

    :type aws_secret_access_key: string
    :param aws_secret_access_key: Your AWS Secret Access Key

    :rtype: :class:`boto.rds.RDSConnection`
    :return: A connection to RDS
    """
    from boto.rds import RDSConnection
    return RDSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
    def test_db_subnet_group(self):
        vpc_api = VPCConnection()
        rds_api = RDSConnection()
        vpc = vpc_api.create_vpc('10.0.0.0/16')

        az_list = vpc_api.get_all_zones(filters={'state': 'available'})
        subnet = list()
        n = 0
        for az in az_list:
            try:
                subnet.append(
                    vpc_api.create_subnet(vpc.id,
                                          '10.0.' + str(n) + '.0/24',
                                          availability_zone=az.name))
                n = n + 1
            except:
                pass

        grp_name = 'db_subnet_group' + str(int(time.time()))
        subnet_group = rds_api.create_db_subnet_group(
            grp_name, grp_name, [subnet[0].id, subnet[1].id])
        if not _is_ok(subnet_group, vpc.id, grp_name,
                      [subnet[0].id, subnet[1].id]):
            raise Exception("create_db_subnet_group returned bad values")

        rds_api.modify_db_subnet_group(grp_name, description='new description')
        subnet_grps = rds_api.get_all_db_subnet_groups(name=grp_name)
        if not _is_ok(subnet_grps[0], vpc.id, 'new description',
                      [subnet[0].id, subnet[1].id]):
            raise Exception(
                "modifying the subnet group desciption returned bad values")

        rds_api.modify_db_subnet_group(grp_name,
                                       subnet_ids=[subnet[1].id, subnet[2].id])
        subnet_grps = rds_api.get_all_db_subnet_groups(name=grp_name)
        if not _is_ok(subnet_grps[0], vpc.id, 'new description',
                      [subnet[1].id, subnet[2].id]):
            raise Exception(
                "modifying the subnet group subnets returned bad values")

        rds_api.delete_db_subnet_group(subnet_group.name)
        try:
            rds_api.get_all_db_subnet_groups(name=grp_name)
            raise Exception(subnet_group.name +
                            " still accessible after delete_db_subnet_group")
        except:
            pass

        while n > 0:
            n = n - 1
            vpc_api.delete_subnet(subnet[n].id)
        vpc_api.delete_vpc(vpc.id)
Esempio n. 6
0
@author: Puneeth U Bharadwaj
'''

import time
from boto.s3.key import Key
from boto.s3.connection import S3Connection
from boto.rds import RDSConnection

# AWS ACCESS DETAILS
AWSAccessKeyId = AWSAccessKeyId
AWSSecretKey = AWSSecretKey
DefaultRegionName = DefaultRegionName

s3_conn = S3Connection(AWSAccessKeyId, AWSSecretKey)
rds_conn = RDSConnection(AWSAccessKeyId, AWSSecretKey)


def s3_stuff():
    # Create a new bucket. Buckets must have a globally unique name (not just
    # unique to your account).
    bucket = s3_conn.create_bucket('your-bucket-name')

    k = Key(bucket)
    k.key = 'all_month.csv'
    start = time.time()
    k.set_contents_from_filename('all_month.csv')
    k.make_public()
    # k.get_contents_to_filename('testdl.txt')

    end = time.time()
 def setUp(self):
     self.conn = RDSConnection()
     self.masterDB_name = "boto-db-%s" % str(int(time.time()))
     self.replicaDB_name = "replica-%s" % self.masterDB_name
     self.renamedDB_name = "renamed-replica-%s" % self.masterDB_name
class PromoteReadReplicaTest(unittest.TestCase):
    rds = True

    def setUp(self):
        self.conn = RDSConnection()
        self.masterDB_name = "boto-db-%s" % str(int(time.time()))
        self.replicaDB_name = "replica-%s" % self.masterDB_name
        self.renamedDB_name = "renamed-replica-%s" % self.masterDB_name

    def tearDown(self):
        instances = self.conn.get_all_dbinstances()
        for db in [
                self.masterDB_name, self.replicaDB_name, self.renamedDB_name
        ]:
            for i in instances:
                if i.id == db:
                    self.conn.delete_dbinstance(db, skip_final_snapshot=True)

    def test_promote(self):
        print '--- running RDS promotion & renaming tests ---'
        self.masterDB = self.conn.create_dbinstance(self.masterDB_name, 5,
                                                    'db.t1.micro', 'root',
                                                    'bototestpw')

        # Wait up to 15 minutes for the masterDB to become available
        print '--- waiting for "%s" to become available  ---' % self.masterDB_name
        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)

        instances = self.conn.get_all_dbinstances(self.masterDB_name)
        inst = instances[0]

        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.masterDB_name)
            inst = instances[0]

        self.assertTrue(inst.status == 'available')

        self.replicaDB = self.conn.create_dbinstance_read_replica(
            self.replicaDB_name, self.masterDB_name)

        # Wait up to 15 minutes for the replicaDB to become available
        print '--- waiting for "%s" to become available  ---' % self.replicaDB_name
        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)

        instances = self.conn.get_all_dbinstances(self.replicaDB_name)
        inst = instances[0]

        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.replicaDB_name)
            inst = instances[0]

        self.assertTrue(inst.status == 'available')

        # Promote the replicaDB and wait for it to become available
        self.replicaDB = self.conn.promote_read_replica(self.replicaDB_name)

        # Wait up to 15 minutes for the replicaDB to become available
        print '--- waiting for "%s" to be promoted and available  ---' % self.replicaDB_name
        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)

        instances = self.conn.get_all_dbinstances(self.replicaDB_name)
        inst = instances[0]

        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.replicaDB_name)
            inst = instances[0]

        # Verify that the replica is now a standalone instance and no longer
        # functioning as a read replica
        self.assertTrue(inst)
        self.assertTrue(inst.status == 'available')
        self.assertFalse(inst.status_infos)

        # Verify that the master no longer has any read replicas
        instances = self.conn.get_all_dbinstances(self.masterDB_name)
        inst = instances[0]
        self.assertFalse(inst.read_replica_dbinstance_identifiers)

        print '--- renaming "%s" to "%s" ---' % (self.replicaDB_name,
                                                 self.renamedDB_name)

        self.renamedDB = self.conn.modify_dbinstance(
            self.replicaDB_name,
            new_instance_id=self.renamedDB_name,
            apply_immediately=True)

        # Wait up to 15 minutes for the masterDB to become available
        print '--- waiting for "%s" to exist  ---' % self.renamedDB_name

        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)

        # Wait up to 15 minutes until the new name shows up in the instance table
        found = False
        while found == False and wait_timeout > time.time():
            instances = self.conn.get_all_dbinstances()
            for i in instances:
                if i.id == self.renamedDB_name:
                    found = True
            if found == False:
                time.sleep(15)

        self.assertTrue(found)

        print '--- waiting for "%s" to become available ---' % self.renamedDB_name

        instances = self.conn.get_all_dbinstances(self.renamedDB_name)
        inst = instances[0]

        # Now wait for the renamed instance to become available
        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.renamedDB_name)
            inst = instances[0]

        self.assertTrue(inst.status == 'available')

        # Since the replica DB was renamed...
        self.replicaDB = None

        print '--- tests completed ---'
Esempio n. 9
0
@author: Puneeth U Bharadwaj
'''

import time
from boto.s3.key import Key
from boto.s3.connection import S3Connection
from boto.rds import RDSConnection

# AWS ACCESS DETAILS
AWSAccessKeyId = AWSAccessKeyId
AWSSecretKey = AWSSecretKey
DefaultRegionName = DefaultRegionName

s3_conn = S3Connection(AWSAccessKeyId, AWSSecretKey)
rds_conn = RDSConnection(AWSAccessKeyId, AWSSecretKey)

def s3_stuff():
    # Create a new bucket. Buckets must have a globally unique name (not just
    # unique to your account).
    bucket = s3_conn.create_bucket('your-bucket-name')
    
    k = Key(bucket)
    k.key = 'all_month.csv'
    start = time.time()
    k.set_contents_from_filename('all_month.csv')
    k.make_public()
    # k.get_contents_to_filename('testdl.txt')
    
    end = time.time()
    
Esempio n. 10
0
 def setUp(self):
     self.conn = RDSConnection()
     self.masterDB_name = "boto-db-%s" % str(int(time.time()))
     self.replicaDB_name = "replica-%s" % self.masterDB_name
     self.renamedDB_name = "renamed-replica-%s" % self.masterDB_name
Esempio n. 11
0
class PromoteReadReplicaTest(unittest.TestCase):
    rds = True

    def setUp(self):
        self.conn = RDSConnection()
        self.masterDB_name = "boto-db-%s" % str(int(time.time()))
        self.replicaDB_name = "replica-%s" % self.masterDB_name
        self.renamedDB_name = "renamed-replica-%s" % self.masterDB_name

  
    def tearDown(self):
        instances = self.conn.get_all_dbinstances()
        for db in [self.masterDB_name, self.replicaDB_name, self.renamedDB_name]:
            for i in instances:
                if i.id == db:
                    self.conn.delete_dbinstance(db, skip_final_snapshot=True)

    def test_promote(self):
        print '--- running RDS promotion & renaming tests ---'
        self.masterDB = self.conn.create_dbinstance(self.masterDB_name, 5, 'db.t1.micro', 'root', 'bototestpw')
        
        # Wait up to 15 minutes for the masterDB to become available
        print '--- waiting for "%s" to become available  ---' % self.masterDB_name
        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)
 
        instances = self.conn.get_all_dbinstances(self.masterDB_name)
        inst = instances[0]

        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.masterDB_name)
            inst = instances[0]

        self.assertTrue(inst.status == 'available')

        self.replicaDB = self.conn.create_dbinstance_read_replica(self.replicaDB_name, self.masterDB_name)

        # Wait up to 15 minutes for the replicaDB to become available
        print '--- waiting for "%s" to become available  ---' % self.replicaDB_name
        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)
        
        instances = self.conn.get_all_dbinstances(self.replicaDB_name)
        inst = instances[0]

        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.replicaDB_name)
            inst = instances[0]

        self.assertTrue(inst.status == 'available')
        
        # Promote the replicaDB and wait for it to become available
        self.replicaDB = self.conn.promote_read_replica(self.replicaDB_name)

        # Wait up to 15 minutes for the replicaDB to become available
        print '--- waiting for "%s" to be promoted and available  ---' % self.replicaDB_name
        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)
        
        instances = self.conn.get_all_dbinstances(self.replicaDB_name)
        inst = instances[0]

        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15)
            instances = self.conn.get_all_dbinstances(self.replicaDB_name)
            inst = instances[0]

        # Verify that the replica is now a standalone instance and no longer
        # functioning as a read replica
        self.assertTrue(inst)
        self.assertTrue(inst.status == 'available')
        self.assertFalse(inst.status_infos)

        # Verify that the master no longer has any read replicas
        instances = self.conn.get_all_dbinstances(self.masterDB_name)
        inst = instances[0]
        self.assertFalse(inst.read_replica_dbinstance_identifiers)

        print '--- renaming "%s" to "%s" ---' % ( self.replicaDB_name, self.renamedDB_name )

        self.renamedDB = self.conn.modify_dbinstance(self.replicaDB_name, new_instance_id=self.renamedDB_name, apply_immediately=True)

        # Wait up to 15 minutes for the masterDB to become available
        print '--- waiting for "%s" to exist  ---' % self.renamedDB_name

        wait_timeout = time.time() + (15 * 60)
        time.sleep(60)

        # Wait up to 15 minutes until the new name shows up in the instance table
        found = False
        while found == False and wait_timeout > time.time():
          instances = self.conn.get_all_dbinstances()
          for i in instances:
              if i.id == self.renamedDB_name:
                  found = True
          if found == False:
              time.sleep(15)

        self.assertTrue(found)

        print '--- waiting for "%s" to become available ---' % self.renamedDB_name

        instances = self.conn.get_all_dbinstances(self.renamedDB_name)
        inst = instances[0]

        # Now wait for the renamed instance to become available
        while wait_timeout > time.time() and inst.status != 'available':
            time.sleep(15) 
            instances = self.conn.get_all_dbinstances(self.renamedDB_name)
            inst = instances[0]

        self.assertTrue(inst.status == 'available')

        # Since the replica DB was renamed...
        self.replicaDB = None

        print '--- tests completed ---'
Esempio n. 12
0
    def test_db_subnet_group(self):
        vpc_api  = VPCConnection()
        rds_api  = RDSConnection()
        vpc      = vpc_api.create_vpc('10.0.0.0/16')

        az_list = vpc_api.get_all_zones(filters={'state':'available'})
        subnet = list()
        n      = 0;
        for az in az_list:
            try:
                subnet.append(vpc_api.create_subnet(vpc.id, '10.0.'+str(n)+'.0/24',availability_zone=az.name))
                n = n+1
            except:
                pass

        grp_name     = 'db_subnet_group'+str(int(time.time()))
        subnet_group = rds_api.create_db_subnet_group(grp_name, grp_name, [subnet[0].id,subnet[1].id])
        if not _is_ok(subnet_group, vpc.id, grp_name, [subnet[0].id,subnet[1].id]):
            raise Exception("create_db_subnet_group returned bad values")

        rds_api.modify_db_subnet_group(grp_name, description='new description')
        subnet_grps = rds_api.get_all_db_subnet_groups(name=grp_name)
        if not _is_ok(subnet_grps[0], vpc.id, 'new description', [subnet[0].id,subnet[1].id]):
            raise Exception("modifying the subnet group desciption returned bad values")

        rds_api.modify_db_subnet_group(grp_name, subnet_ids=[subnet[1].id,subnet[2].id])
        subnet_grps = rds_api.get_all_db_subnet_groups(name=grp_name)
        if not _is_ok(subnet_grps[0], vpc.id, 'new description', [subnet[1].id,subnet[2].id]):
            raise Exception("modifying the subnet group subnets returned bad values")

        rds_api.delete_db_subnet_group(subnet_group.name)
        try:
            rds_api.get_all_db_subnet_groups(name=grp_name)
            raise Exception(subnet_group.name+" still accessible after delete_db_subnet_group")
        except:
            pass
            
        while n > 0:
            n = n-1
            vpc_api.delete_subnet(subnet[n].id)
        vpc_api.delete_vpc(vpc.id)