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 }] }] }
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)