Connecting Grails app to MongoDB through NAT instance on AWS - mongodb

I'm currently trying to setup a mongo replica set in a VPC via this quick start guide https://s3.amazonaws.com/quickstart-reference/mongodb/latest/doc/MongoDB_on_the_AWS_Cloud.pdf.
I have a grails app that runs on an AWS instance which used to also host the mongo instance. Now I want to seperate the web app from mongo. I already followed the guide above and have my replica set setup with a NAT instance that I can access via ssh. Now I'm wondering how to configure grails so that it connects to this mongo instance rather than the one on its own instance.
I used to just set the db host and everything in the DataSource.groovy file and everything was fine, but I can't seem to find how to set it up to go through the NAT to the primary replica node.
Do you guys have any idea what I should do next?
Cheers,
Tobias

Related

Openshift Spring boot docker image and Mongodb connection

I created a spring boot application (simple with database connection) and I would like to put it on a openshift. It's not a problem for me to generate docker image and put it into openshift, but I also want a mongodb database instance on openshift. I already created it on a openshift but know I have no idea how to connect to it from the spring boot application. I recently heard that I need to type a pod name as a connection string. Is that correct? How exactly should I connect to mongodb pod from the spring boot pod. Should I create some route between those two? I am new with playing around docker and openshift, so please try to give me as much info as you can.
Are you using your own OS3 vm?
I'm no expert on the matter, but on OS3 web console, once you create a database from templates already provided by OpenShift, OS3 shows a connection string at the end of the process.
I'm pretty sure OS3 creates a service for your db, the link looks like this:
mysql://servicename:3306/database

AWS + Elastic Beanstalk + MongoDB

I am trying to setup my microservices architecture using AWS Elastic Beanstalk and Docker. That is very easy to do, but when I launch the environment, it launches into the default VPC, thus giving public IP's to the instances. Right now, that's not too much of a concern.
What I am having a problem with is how to set up the MongoDB architecture. I have read: recommended way to install mongodb on elastic beanstalk but still remain unsure on how to set this up.
So far I have tried:
Using the CloudFormation template from AWS here: http://docs.aws.amazon.com/quickstart/latest/mongodb/step2b.html to launch a primary with 2 replica node setup into the default VPC, but this gives and assigns public access to the Mongo nodes. I also am not sure how to connect my application since this does not add a NAT instance - do I simply connect directly to the primary node? In case of failure for this node, will the secondary node's IP become the same as that of the primary node so that all connections remain consistent? Or do I need to add my own NAT instance?
I have also tried launching MongoDB into its own VPC (https://docs.aws.amazon.com/quickstart/latest/mongodb/step2a.html) and giving access via the NAT, but this means having two different VPCs (one for my EB instances and one for the MongoDB). In this case would I connect to the NAT from my EB VPC in order to route requests to the databases?
I have also tried launching a new VPC for the MongoDB architecture first and then trying to launch EB into this VPC. For some reason, the load balancing setup won't let me add into the subnets, giving me the error: "Custom Availability Zones option not supported for VPC environments".
I am trying to launch all this in us-west-1. It's been two days now and I have no idea where to go or what the right way is to tackle this issue. I want the databases to be private (no public access) with a NAT gateway, so ideally my third method seems what I want, but I cannot seem to add the new EB instances/load balancer into the newly-created MongoDB VPC. This is the setup I'm going for: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/images/default-vpc-diagram.png but I am trying to use the templates to do this.
What am I doing wrong here? Any help would be much, much appreciated. I have read up a lot about this but still am not sure where to go from here.
Thanks a lot in advance!
Im having this same issue. There seems to be a complete lack of documentation on how to connect an Elastic Beanstalk node.js / express app with the aws Quickstart mongodb cluster set up documentation.
When I run the aws mongo quickstart though it launches a NAT which is public and also a private primary node... maybe this is part of your issue?

How to interface Mongodb database with web application running on AWS EC2 instance

I have installed Mongodb 3.0 database instance on AWS EC2 using AWS CloudFormation.
I have following 2 queries :-
During the installation, I chose the instance type as 't2.micro'
and if I'm not wrong, this should be covered up under AWS Free-Tier
usage for evaluation purpose. But may I know where exactly, I can
see and confirm that my instance is running under free-tier usage?
I have deployed a web application too using Elastic Beanstalk
services and it is running fine with one of the EC2 instances. I can
test my application on cloud very well with static data (means no DB
interface yet). I want to open the port between my Web App on 1 EC2
instance and MongoDB (which I installed recently) running on another
EC2 instance. Can somebody advise on this?
Thank you

MongoDB Amazon Web Service - Do I actually have it installed?

I really want to use mongoDB as my server backend for my android application/ web app that im hosting on the cloud. I ( think ) I installed it on my instance but Im confused as when I run my app its not showing up.
I ssh'd into my EC2 instance ( I am running Elastic Beanstalk on ssh) and I installed mongoDb and created all my tables and when I exit and ssh back into it the same tables are there however after reading up on it, I think the process is a little more complicated than that and more expensive.
Can anyone tell me if what I did was correct and if there actually a way to get mongoDb for free like this on Elastic Beanstalk? Its for my Computer Science masters.
EDIT:
I have now used Cloud Formation and installed mongo DB but now have no idea how to deploy my app without elastic beanstalk as my app runs on apache.
Thank you
No, keypoints to keep in mind:
When you SSH to your Elastic Beanstalk EC2 instances you can see a big message that says that any change that you make directly to your EC2 instances won't be saved anywhere. What I mean, you don't make ANY changes in your EC2s if you are using Elastic Beanstalk.
AWS has a MongoDB on the AWS Cloud: Quick Start Reference Deployment Guide. This document guides you through the process of installing MongoDB (includes a nice CloudFormation template -and it takes only about 15 mins to be ready-)

deploying mongodb on google cloud platform?

Hello all actually for my startup i am using google cloud platform, now i am using app engine with node.js this part is working fine but now for database, as i am mongoDB i saw this for mongoDB https://console.cloud.google.com/launcher/details/click-to-deploy-images/mongodb?q=mongo now when i launched it on my server now it created three instances in my compute engine but now i don't know which is primary instance and which is secondary, also one more thing as i read that primary instance should be used for writing data and secondary for reading, now when i will query my database should i provide secondary instance url and for updating/inserting data in my mongodb database should i provide primary instance url otherwise which url should i use for CRUD operations on my mongodb database ?? also after launcing this do i have to make any changes in any conf file or in any file manually or they already done that for me ?? Also do i have to make instance groups of all three instances or not ??
Please if any one of you think i have not done any research on this or its not a valid stackoverflow question then i am so sorry google cloud platform is very much new that's why there is not much documentation on it also this is my first time here in deploying my code on servers that's why i am completely noob in this field Thanks Anyways please help me ut of here guys.
but now i don't know which is primary instance and which is secondary,
Generally the Cloud Launcher will name the primary with suffix -1 (dash one). For example by default it would create mongodb-1-server-1 instance as the primary.
Although you can also discover which one is the primary by running rs.status() on any of the instances via the mongo shell. As an example:
mongo --host <External instance IP> --port <Port Number>
You can get the list of external IPs of the instances using gcloud. For example:
gcloud compute instances list
By default you won't be able to connect straight away, you need to create a firewall rule for the compute engines to open port(s). For example:
gcloud compute firewall-rules create default-allow-mongo --allow tcp:<PORT NUMBER> --source-ranges 0.0.0.0/0 --target-tags mongodb --description "Allow mongodb access to all IPs"
Insert a sensible port number, please avoid using the default value. You may also want to limit the source IP ranges. i.e. your office IP. See also Cloud Platform: Networking
i read that primary instance should be used for writing data and secondary for reading,
Generally replication is to provide redundancy and high availability. Where the primary instance is being used to read and write, and secondaries act as replicas to provide a level of fault tolerance. i.e. the loss of primary server.
See also:
MongoDB Replication.
Replication Read Preference.
MongoDB Sharding.
now when i will query my database should i provide secondary instance url and for updating/inserting data in my mongodb database should i provide primary instance url otherwise which url should i use for CRUD operations on my mongodb database
You can provide both in MongoDB URI and the driver will figure out where to read/write. For example in your Node.js you could have:
mongodb://<instance 1>:<port 1>,<instance 2>:<port 2>/<database name>?replicaSet=<replica set name>
The default replica set name set by Cloud Launcher is rs0. Also see:
Node Driver: URI.
Node Driver: Read Preference.
also after launcing this do i have to make any changes in any conf file or in any file manually or they already done that for me ?? Also do i have to make instance groups of all three instances or not ??
This depends on your application use case, but if you are launching through click and deploy the MongoDB config should all be taken care of.
For a complete guide please follow tutorial : Deploy MongoDB with Node.js. I would also recommend to check out MongoDB security checklist.
Hope that helps.