Мне не нравится, когда файл passwords.yml висит рядом, поэтому:
import * as AWS from “aws-sdk”; import * as path from “path”; AWS.config.update({ region: “us-east-1” }); interface IGenericType { [key: string]: string | object | number | boolean } const STAGE: string = process.env.STAGE; async function getConnection(): Promise<any> { const params: any = await storeParameters(); const debug: boolean = STAGE === “production” ? false : true; const dbValues: any = getValues(params.Parameters); const config: IGenericType = { client: “postgresql”, connection: {host: dbValues.host, user: dbValues.user, database: dbValues.database, password: dbValues.password }, debug, pool: { min: 2, max: 10 }, migrations: { tableName: “knex_migrations”, directory: path.join(__dirname, “lib”, “migrations”) }, seeds: { directory: path.join(__dirname, “lib”, “seeds”) } }; console.log(‘ >>> CONFIG: >>>> ‘ + JSON.stringify(config)); return config; } async function storeParameters(): Promise<any> { const psHost: string = `/clabe-service/${STAGE}/db/host`; // Set ParameterStore names const psUser: string = `/clabe-service/${STAGE}/db/user`; const psDatabase: string = `/clabe-service/${STAGE}/db/database`; const psPassword: string = `/clabe-service/${STAGE}/db/password`; const ssm = new AWS.SSM(); const query = { Names: [psHost, psUser, psDatabase, psPassword], WithDecryption: true }; const param: any = await ssm.getParameters(query, (err) => { if (err) { console.log(“error = %o”, err); return false; } else { return true; } }).promise(); return param; } function getValues(parameters: Array<any>): any { let name: string = “”; return parameters.reduce((result: any, filter: any) => { name = filter.Name.split(“/”).pop(); result[name] = filter.Value; return result; }, {}); } export default getConnection;