1.0.0-alpha.30 • Published 5 years ago

mongoose-aws-documentdb-tunneling v1.0.0-alpha.30

Weekly downloads
63
License
ISC
Repository
github
Last release
5 years ago

Mongoose with AWS DocumentDB

lerna

Mongoose wich allow SSH tunneling into a AWS DocumentDB VPC by going through a EC2 instance hosted in the same VPC while also allowing local MongoDB in local environment.

Installation

npm install mongoose-aws-documentdb-tunneling --save

Usage Example

To use this SDK, call the init function as early as possible in the entry modules after registering your models.

Models

In your models, use mongoose from the mongoose-aws-documentdb-tunneling SDK:

User.model.js

const MONGOOSE = require('mongoose-aws-documentdb-tunneling')

const UserSchema = new MONGOOSE.Schema({
    ...
})

MONGOOSE.model('User', UserSchema)

Connection

In the app entry module:

app.js

const MONGOOSE = require('mongoose-aws-documentdb-tunneling')
const MODELS = PATH.join(__dirname, 'databases/mongodb/models')

/**
 * 1. Register your models by requiring them. Here's an example to dynamicly
 * add all models within a folder.
 */
FS.readdirSync(MODELS) .filter(
        file => ~file.search(/^[^\.].*\.js$/)
    )
    .forEach(
        file => require(PATH.join(MODELS, file))
    )

/**
 * 2. Initiate the module with required options.
 */
MONGOOSE.init({
    env: process.env.ENV === 'dev'
        ? 'local'
        : 'remote',
    makeTunnel: process.env.IN_VPC === 'false'
        ? false
        : true,
    sslCA: FS.readFileSync(
        PATH.join(__dirname, 'keys', process.env.VPC_TUNNEL_EC2_RDS_SSL_CA_KEY), 'utf8'
    ),
    vpcTunnelEC2Username: process.env.VPC_TUNNEL_EC2_USERNAME,
    vpcTunnelEC2Host: process.env.VPC_TUNNEL_EC2_HOST,
    vpcTunnelEC2Port: +process.env.VPC_TUNNEL_EC2_PORT,
    vpcTunnelEC2PortLocal: +process.env.VPC_TUNNEL_EC2_PORT_LOCAL,
    vpcTunnelEC2PrivateKey: FS.readFileSync(
        PATH.join(__dirname, `keys/${process.env.VPC_TUNNEL_EC2_PRIVATE_KEY}`), 'utf8'
    ),
    documentdbClusterEndpoint: process.env.DOCUMENTDB_CLUSTER_ENDPOINT,
    documentdbClusterPort: +process.env.DOCUMENTDB_CLUSTER_PORT,
    documentdbClusterDbName: process.env.DOCUMENTDB_CLUSTER_DB_NAME,
    documentdbClusterUsername: process.env.DOCUMENTDB_CLUSTER_USERNAME,
    documentdbClusterPassword: process.env.DOCUMENTDB_CLUSTER_PASSWORD,
    documentdbEndpoint: process.env.DOCUMENTDB_ENDPOINT,
    documentdbPort: +process.env.DOCUMENTDB_PORT,
})
    .then(success => DEBUG(success))
    .catch(error => { throw error })

/**
 * 3. 🔥 Profit 🔥
 */

Query

users.module.js

const const { MongooseClient: MONGOOSE } = require('mongoose-aws-documentdb-tunneling')

/**
 * Get all users.
 * @returns {Promise<[<user>]>} users
 */
function getUsers() {
    return MONGOOSE
        .model('User')
        .find()
        .toArray()
}

Troubleshooting

  • ...