Why AWS Lambda is slow when calling EC2 service from it? - mongodb

I am using trial version of AWS instance and have free EC2 server of 1GB RAM.
I have Mongo DB installed in EC2 and written one simple AWS Lambda function in Java(tried in Node js too). Both are in same region.
When I am trying to save one simple JSON in DB of EC2 byLambda function, its taking too long time around 30 seconds and then getting time out.
I also tried to put a message in Kafka queue which is installed on simillar kind of EC2 server using Lambda function, its taking almost a minute to put that message in Kafka queue.
Why this is sooooooo slow? Am I missing something or shall we blame the 1GB Ubuntu/Linux EC2 server? Or something fishy about AWS Lambda? Tried with both Java and Node JS?

Worked when I create Security group in EC2 console for my DB and provide DB port in port range. Check attached image.

Related

mongo atlas or aws - Internal or External connection

i am working on my next project currently which works 100% on mongo,
my past projects worked on SQL + Mongo on which i used AWS RDS + AWS EC2 and could connect them both in AWS internal IP which result me with much faster connection.
Now in mongo there is alot of fancy cloud servers like MLab and MongoDB Atlas which is actually cheaper then AWS.
My concern is that moving back to external DB connection will be slower and more network consuming then the internal connection in RDS
Have anyone experienced in such issue? maybe the different isn't that big as i make it but i need it to be optimized
This depends on your setup. Many of the "fancy" services also host stuff on AWS, so latency is minimal. Some even offer "private environments" or such, so you can hide your databases from public view.
The only thing left to care about is the amount of network traffic. But this will be your problem regardless of your database host. You can test this relatively easily (e.g. get a trial from one of the providers and test for throughput, or raise your own MongoDB docker cluster to use as a test etc) just to get an idea of the performance range you'll be in.

How to execute Amazon Lambda functions on dedicated EC2 server?

I am currently developing the backend for my app based on Amazon Web Services. I pretended to use DynamoDB to store the user's data, but finally opted for MongoDB, which I have already installed in my EC2 instance.
I have some code written in Python to update/query... the DB, so that when a Cognito event triggers my lambda function, this code is directly executed on my instance so I can access my DB. Any ideas how can I accomplish this?
As mentioned by Gustavo Tavares, "the whole point of lambda is to run code without the need to deploy EC2 instances". And you do not have to put your EC2 with database to "public" subnets for Lambda to access them. Actually, you should never do that.
When creating/editing Lambda configuration you may select to run it in any of you VPCs (Configuration -> Advanced Settings -> VPC). Then select Subnet(s) to run your Lambda in. This will create ENIs (Elastic Network Interface) for the virtual machines you Lambdas will run on.
Your subnets must have Routing/ACL configured to access the subnets where Database resides. At least one of the SecurityGroups associated with Lambda must also have Outbound traffic allowed to the Database subnet on appropriate ports (27017).
Since you mentioned that your Lambdas are "back-end" then you should probably put them in the same "private" subnets as your MongoDB and avoid any access/routing headache.
One way to accomplish this is to give the Lambda a SAM Template, then use sam local invoke inside of the EC2 instance to execute locally.
OK BUT WHY OH WHY WOULD ANYONE DO THIS?
If your Lambda requires access to both a VPC and the Internet, and doesn't use a lot of memory and doesn't really require scalability, and you already wrote the code (*), it's actually 10x cheaper(**) and higher-performing to launch a t3.nano EC2 Spot Instance on a public subnet than to add a NAT Gateway to the Lambda function.
(*) if you have not written the code yet, don't even bother to make it a Lambda.
(**) 10x cheaper as in $3 vs $30, so this really only applies to hobbyist projects on a shoestring budget. Don't do this at work, because the cost of engineers' time to manage and maintain an EC2 instance will far exceed $30/month over the long term.
If you want Lambda to execute code on your ec2-instances you'll need to use the SDK for the language you're writing your lambda in. Then you can simply use the AWS API to run commands on your EC2 instance.
See: http://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html
I think you misunderstood the idea of AWS lambda.
The whole point of lambda is to run code without the need to deploy EC2 instances. You upload the code and the infrastructure is provisioned on the fly. If your application does not need the infrastructure anymore (after a brief period), it vanishes and you will not be charged for the idle time. If you need it again a new infrastructure is provisioned.
If you have a service, like your MongoDB, running in EC2 instances your lambda functions can access it like any other code. You just need configure your lambda code to connect to the EC2 instance, like you would be doing if your database were installed in any other internet faced server.
For example: You can put your MongoDB server in a public subnet of your VPC and assign an elastic IP for your server. In your Python lambda code you configure your driver to connect to this elastic IP and update the database.
It will work like every service were deployed in different servers across internet: Cognito connect to Lambda functions across internet and then the python code deployed in lambda connect to your MongoDB across internet.
If I can give you an advice, try DynamoDB a little more. With DynamoDB it will be even more simple to make all this work, because you will not need to configure a public subnet and request an elastic IP. And the API for DynamoDB is not very different of the MongDB API.

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-)

AMI for EC2 instance with a MongoDB?

I am running an Amazon EC2 instance with a MongoDB running on it.
Since I will need to use it only for some time, I was wondering if it is possible to keep only image of the system for the usage time with Amazon Machine Image. Any idea?
You can actually create an AMI from your server and then terminate the server when you don't need it.
When you need it again you can relaunch a new server based on the AMI you created. The downside to this is that your latest data may not be up to date. So I recommend creating the AMI right before you terminate the server.
Another alternative is to just use EBS backed storage/instances and just shutdown the instance when you don't need it. You can just start the instance when you need it. There's little cost associated with keeping an EBS volume around. Certainly much less than keeping your EC2 instance running all the time.
Hope this helps.
A machine stopped it´s a machine that Amazon don´t charge you.
You get charged for:
Online time
Storage space (assumably you store the image on S3 [EBS])
Elastic IP addresses
Bandwidth
But Amazon charge you for your AMI´s created.
So you can stop your machine and just start it when you need to use it.