UNPKG

@fiftyten/db-toolkit

Version:

Complete database toolkit: connections, migration, and operations via AWS Session Manager

132 lines 3.89 kB
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