UNPKG

cdk-rds-sql

Version:

A CDK construct that allows creating roles or users and databases an on Aurora Serverless Postgresql or Mysql/MariaDB cluster.

98 lines (88 loc) 2.66 kB
import { ConnectionOptions } from "tls" import { SecretsManagerClient, GetSecretValueCommand, } from "@aws-sdk/client-secrets-manager" import { EngineDatabaseProperties, EngineRoleProperties, EngineSchemaProperties, EngineSqlProperties, } from "./types" export interface EngineConnectionConfig { host: string port: number user: string password: string database: string ssl?: boolean | ConnectionOptions } export abstract class AbstractEngine { protected log: (message?: any, ...optionalParams: any[]) => void constructor() { this.log = process.env.LOGGER === "true" ? console.debug : (_message?: any, ..._optionalParams: any[]) => {} } abstract createDatabase( resourceId: string, props: EngineDatabaseProperties ): string | string[] abstract updateDatabase( resourceId: string, oldResourceId: string, props: EngineDatabaseProperties ): string | string[] abstract deleteDatabase(resourceId: string, masterUser: string): string | string[] abstract createRole( resourceId: string, props: EngineRoleProperties ): Promise<string | string[]> abstract updateRole( resourceId: string, oldResourceId: string, props: EngineRoleProperties, oldProps: EngineRoleProperties ): Promise<string | string[]> abstract deleteRole(resourceId: string, props: EngineRoleProperties): string | string[] abstract createSchema( resourceId: string, props: EngineSchemaProperties ): string | string[] abstract updateSchema( resourceId: string, oldResourceId: string, props: EngineSchemaProperties ): string | string[] abstract deleteSchema( resourceId: string, props: EngineSchemaProperties ): string | string[] abstract createSql(resourceId: string, props: EngineSqlProperties): string | string[] abstract updateSql( resourceId: string, oldResourceId: string, props: EngineSqlProperties ): string | string[] abstract deleteSql(resourceId: string, props: EngineSqlProperties): string | string[] abstract executeSQL( sql: string | string[], config: EngineConnectionConfig ): Promise<any> /** * Parse password field from secret. Returns void on error or if no password field exists. */ protected async getPassword(arn: string): Promise<string | void> { if (!arn) return const secrets_client = new SecretsManagerClient({}) const command = new GetSecretValueCommand({ SecretId: arn, }) const secret = await secrets_client.send(command) if (secret.SecretString) { const json = JSON.parse(secret.SecretString) return json.password } } }