Skip to content

Commit

Permalink
Merge pull request #41 from rajikaimal/aws-rds
Browse files Browse the repository at this point in the history
Add support for AWS RDS
  • Loading branch information
rehrumesh authored Jul 31, 2017
2 parents 1b4211c + 024a2ff commit e9d1508
Show file tree
Hide file tree
Showing 5 changed files with 626 additions and 1 deletion.
187 changes: 187 additions & 0 deletions docs/database/aws-rds.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
# NodeCloud database - AWS RDS

## Configure AWS credentials

Create `config.json` as follows,

```js
{
"aws_access_key_id": "xxxxxxxxxxxx",
"aws_secret_access_key": "xxxxxxxxxxxx",
"region": "xxxxxxxxx" // eg : us-west-2
}
```

## Initialize library

```js
const nodeCloud = require("../../lib/");
const ncAWS = nodeCloud.getProvider(
"AWS",
process.env.ncconf // path to config.json
);
const options = {
apiVersion: '2016-11-15',
};
const rds = ncAWS.rdbms(options);
```

### Create DB instance

```js
const params = {
DBInstanceClass: 'db.t1.micro',
DBInstanceIdentifier: 'nodecloud',
Engine: 'mysql',
MasterUserPassword: 'supersecret',
AllocatedStorage: 5,
MasterUsername: 'rajika',
};

rds.createDBInstance(params)
.then((res) => {
console.log(res);
});
.catch((err) => {
console.error(err);
});
```

### Create Security group

```js
const params = {
DBSecurityGroupDescription: 'From NodeCloud API',
DBSecurityGroupName: 'mysecuritygroup',
Tags: [
{
Key: 'sample',
Value: 'value',
},
],
};

rds.createDBSecurityGroup(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
```

### Create DB Snapshot

```js
const params = {
DBInstanceIdentifier: 'nodecloud',
DBSnapshotIdentifier: 'nodecloud-sp2',
};

rds.createDBSnapshot(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
```

### Modify DB instance

```js
const params = {
DBInstanceIdentifier: 'nodecloud',
NewDBInstanceIdentifier: 'ncrd',
};

rds.modifyDBInstance(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
```

### Modify DB snapshot

```js
const params = {
DBSnapshotIdentifier: 'nodecloud',
EngineVersion: '5.5.0'
};

rds.modifyDBSnapshot(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
})
```

### Reboot DB instance

```js
const params = {
DBInstanceIdentifier: 'nodecloud',
};

rds.rebootDBInstance(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
```

### Delete DB security group

```js
const params = {
DBSecurityGroupName: 'mysecuritygroup',
};

rds.deleteDBSecurityGroup(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
```

### Delete DB snapshot

```js
const params = {
DBSnapshotIdentifier: 'nodecloud-sp2',
};

rds.deleteDBSnapshot(params)
.then((res) => {
conosle.log(res);
})
.catch((err) => {
console.error(err);
});
```

### Delete DB instance

```js
const params = {
DBInstanceIdentifier: 'nodecloud',
FinalDBSnapshotIdentifier: 'nodecloud',
};

rds.deleteDBInstance(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
```
26 changes: 26 additions & 0 deletions examples/database/aws-rds.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const nodeCloud = require('../../lib/');
const ncAWS = nodeCloud.getProvider('AWS', process.env.ncconf);
const options = {
apiVersion: '2016-11-15',
};

// get rdbms object for AWS
const rds = ncAWS.rdbms(options);

const params = {
DBInstanceClass: 'db.t1.micro',
DBInstanceIdentifier: 'nodecloud',
Engine: 'mysql',
MasterUserPassword: 'supersecret',
AllocatedStorage: 5,
MasterUsername: 'rajika',
};

// create DB instance
rds.createDBInstance(params)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
16 changes: 15 additions & 1 deletion lib/core/aws/provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const S3 = require('../../storage/aws-s3');
const ELB = require('../../network/aws-elb');
const Route53 = require('../../network/aws-route53');
const DirectConnect = require('../../network/aws-directconnect');
const RDS = require('../../database/aws-rds');

class AWS {
/**
Expand Down Expand Up @@ -35,7 +36,8 @@ class AWS {
loadbalancer: this.ELB,
dns: this.Route53,
peering: this.DirectConnect,
container: this.ECS
container: this.ECS,
rdbms: this.RDS,
};
}
/**
Expand Down Expand Up @@ -116,6 +118,18 @@ class AWS {
}
return new ECS(this.getSDK());
}
/**
* RDS wrapper
* @RDS
* @param {object} options - { apiVersion }
*/
RDS(options) {
if (options._apiVersion) {
this._apiVersion = options.apiVersion;
return new RDS(this.getSDK(), this.apiVersion);
}
return new RDS(this.getSDK());
}
}

module.exports = AWS;
Loading

0 comments on commit e9d1508

Please sign in to comment.