@fiftyten/db-toolkit
Version:
Complete database toolkit: connections, migration, and operations via AWS Session Manager
132 lines • 3.89 kB
TypeScript
import { ChildProcess } from 'child_process';
export interface PgMigrationConfig {
environment: string;
sourceDatabase: string;
targetDatabase: string;
sourceEndpoint?: string;
sourceUsername?: string;
sourcePassword?: string;
dataOnly?: boolean;
skipTables?: string[];
includeTables?: string[];
}
export interface DatabaseConnection {
endpoint: string;
port: number;
database: string;
username: string;
password: string;
type: 'rds' | 'external' | 'tunnel';
securityGroupIds?: string[];
}
export interface TunnelInfo extends DatabaseConnection {
tunnelProcess: ChildProcess;
localPort: number;
bastionInstanceId: string;
}
export declare class PgMigrationManager {
private dbConnector;
private cfnManager;
private migrationManager;
private mfaAuth;
private ec2Client;
private ssmClient;
private region;
private mfaAuthenticated;
private activeTunnels;
private addedSecurityGroupRules;
constructor(region?: string);
/**
* Handle AWS API calls with automatic MFA authentication
*/
private callWithMfaRetry;
/**
* Discover database connection info using existing proven patterns
*/
discoverDatabase(config: {
type: 'aws-managed' | 'external';
environment?: string;
database?: string;
endpoint?: string;
username?: string;
password?: string;
}): Promise<DatabaseConnection>;
/**
* Discover database from SSM parameter (handles both legacy and CDK patterns)
*/
private discoverFromSSMParameter;
/**
* Get password from AWS Secrets Manager
*/
private getSecretPassword;
/**
* Setup tunnel with automatic security group configuration
*/
setupTunnel(database: DatabaseConnection, localPort: number, environment: string): Promise<TunnelInfo>;
/**
* Configure security groups for tunnel access using existing patterns
*/
private configureTunnelAccess;
/**
* Get bastion instance ID for the given environment using CDK-first discovery
*
* Discovery Strategy:
* 1. Primary: CDK bastion pattern (indicator-bastion-{env}-host)
* 2. Fallback: Multiple naming patterns for compatibility
* 3. All bastions use Session Manager for secure access
*/
private getBastionInstanceId;
/**
* Get bastion security group
*/
private getBastionSecurityGroup;
/**
* Create tunnel process
*/
private createTunnelProcess;
/**
* Perform PostgreSQL dump and restore migration using universal approach
*/
performPgMigration(config: PgMigrationConfig): Promise<void>;
/**
* Execute sequential migration to avoid concurrent tunnel conflicts
*/
private executeSequentialMigration;
/**
* Execute pg_dump and psql restore using sequential approach to avoid concurrent tunnel issues
*/
private executePgDumpRestore;
/**
* Dump source database to a temporary file
*/
private dumpToFile;
/**
* Restore from temporary file to target database
*/
private restoreFromFile;
/**
* Test connection to both databases using universal approach
*/
testConnections(config: PgMigrationConfig): Promise<void>;
/**
* Test a single database connection
*/
private testConnection;
/**
* Cleanup all tunnels and security group rules using existing patterns
*/
cleanup(): Promise<void>;
/**
* Get migration statistics by comparing row counts
*/
getMigrationStats(config: PgMigrationConfig): Promise<void>;
/**
* Get list of tables from database
*/
private getTableList;
/**
* Get row count for a specific table
*/
private getTableRowCount;
}
//# sourceMappingURL=pg-migration-manager.d.ts.map