def lambda_delete_dbcluster(event, context):
    """Handles deletion of a DB cluster and its corresponding readers and writers"""
    region = os.environ['Region']
    rds = boto3.client('rds', region)
    result = {}
    cluster_id = event['identifier'] + constants.TEMP_POSTFIX
    try:
        describe_db_response = rds.describe_db_clusters(
            DBClusterIdentifier=cluster_id)
        for db_cluster_member in describe_db_response['DBClusters'][0][
                'DBClusterMembers']:
            rds.delete_db_instance(
                DBInstanceIdentifier=db_cluster_member['DBInstanceIdentifier'],
                SkipFinalSnapshot=True)
        rds.delete_db_cluster(DBClusterIdentifier=cluster_id,
                              SkipFinalSnapshot=True)
        result['taskname'] = constants.DELETE
        result['identifier'] = cluster_id
        return result
    except Exception as error:
        error_message = util.get_error_message(cluster_id, error)
        if constants.RATE_EXCEEDED in str(error):
            raise custom_exceptions.RateExceededException(error_message)
        else:
            raise custom_exceptions.DeletionException(error_message)
 def setUp(self):
     self.event = {'identifier': 'database-1'}
     self.cluster_id = self.event['identifier'] + constants.TEMP_POSTFIX
     self.mocked_rate_exceeded_exception = custom_exceptions.RateExceededException(
         "Identifier:database-1-temp \nthrottling error: Rate exceeded")
     self.mocked_cluster_not_found_exception = custom_exceptions.DeletionException(
         "Identifier:database-1-temp \nDBClusterNotFound")
     self.mocked_instance_not_found_exception = custom_exceptions.DeletionException(
         "Identifier:database-1-temp \nInstanceDeletionFailure")
     self.mocked_describe_db_clusters = {
         'ResponseMetadata': {
             'HTTPStatusCode': 200
         },
         'DBClusters': [{
             "DBClusterIdentifier":
             "database-1-temp",
             "DBClusterMembers": [{
                 "DBInstanceIdentifier": "database-1-instance-1-temp",
                 "IsClusterWriter": True,
                 "PromotionTier": 123
             }]
         }]
     }
예제 #3
0
def lambda_delete_dbinstance(event, context):
    """Handles deletion of a RDS db instance"""
    region = os.environ['Region']
    rds = boto3.client('rds', region)
    result = {}
    instance_id = event['identifier'] + constants.TEMP_POSTFIX
    try:
        rds.delete_db_instance(DBInstanceIdentifier=instance_id,
                               SkipFinalSnapshot=True)
        result['taskname'] = constants.DELETE
        result['identifier'] = instance_id
        return result
    except Exception as error:
        error_message = util.get_error_message(instance_id, error)
        if constants.RATE_EXCEEDED in str(error):
            raise custom_exceptions.RateExceededException(error_message)
        else:
            raise custom_exceptions.DeletionException(error_message)