Query an AWS RDS Database(Mysql) through AWS API Gateway and Lambda? - amazon-web-services

So I have a RDS Database server running Mysql engine, Now I need to query into this database through my mobile app based on Flutter.
The solution after some research I came up with was to create a Lambda function and hook it up to RDS and API Gateway Service. The deployed API would be used by the app.
But I need some help on this regarding how to set this up. Any good alternatives, reference materials or videos would be helpful.
Can you help me out?

Related

Best practices when connecting to AWS RDS with Lambda + pymysql?

I'm trying to create a setup with AWS where users can hit an API endpoint -> Lambda function connects to Aurora serverless DB.
This guide https://levelup.gitconnected.com/aws-lambda-with-rds-using-pymysql-23ad3cde46c8 is suggesting I put
conn = pymysql.connect(host=rds_host,user=name,passwd=password,db=db_name,...)
at the start of the lambda function. My worry is that every API request will create a new connection to the database, not sure if that is ok? I know that when locally performing operations, there is such a thing as creating a connection pool. Is there a recommendation on how/when this is needed on AWS Lambda?
Please review article below to Demystifying Lambda functionality and how handle the request executions
https://harishkm.in/2020/06/30/demystifying-database-connection-pools-in-aws-lambda-functions/
Also links below explain you how AWS Aurora handles the connection
https://docs.aws.amazon.com/whitepapers/latest/amazon-aurora-mysql-db-admin-handbook/connection-management-and-pooling.html
https://docs.aws.amazon.com/whitepapers/latest/amazon-aurora-mysql-db-admin-handbook/connection-handling-in-aurora-mysql-and-mysql.html
Regarding pymysql, you could use boto3 AWS SDK library instead of pymysql, it provides you better integration with AWS Services like AWS Lambda,AWS IAM and AWS Secret Manager as best practices
import boto3
rds_client = boto3.client('rds-data')
Review link below.
https://aws.amazon.com/blogs/database/using-the-data-api-to-interact-with-an-amazon-aurora-serverless-mysql-database/
Finally if your API traffic will be high, consider use scalable solutions as AWS RDS Proxy to help you to manage your database connection at scale, review links below.
https://aws.amazon.com/blogs/database/scale-modern-serverless-applications-with-amazon-rds-proxy-for-sql-server/

AWS API Gateway with EC2

I have a Django Project deployed in AWS EC2 and have created all the REST APIs with DRF. Everything is working great. When I point public.ip.of.ec2:8000/myapi, I get the correct response and these APIs are used in Android application.
Now, day by day the API hits will be increased. So in order to maintain API requests I want to integrate my APIs with APIGateway. After a lot of reading and searching I still could not find any definitive tutorial or steps as of how to integrate APIGateway with EC2.
I've followed this but still could not integrate APIGateway with AWS Service i.e., EC2.
Please suggest a way to do this.
I have a Django Project deployed in AWS EC2 and have created all the
REST APIs with DRF. Everything is working great. When I point
public.ip.of.ec2:8000/myapi, I get the correct response
Integration type you are looking for is HTTP integration
Now, day by day the API hits will be increased. So in order to
maintain API requests I want to integrate my APIs with APIGateway
Although you can configure API caching, throttling, logging and monitoring, AWS API Gateway won't scale your backend integration. You will need to configure autoscaling on backend service as well.

What parts of the AWS should I use for a web portal?

I am currently working on a web portal for a foundation. Applicants for a grant will receive access data in advance independently of this portal. New applications will then be created and processed in the portal itself. Once an application is complete, it is sent off. Later the application will be approved or rejected.
There are a number of technical specifications on which I have no influence. The frontend should be implemented using Html+Javascript. The backend should use the Amazon Web Services (AWS). If there is a need to program something for the backend - then C# should be used.
I know how to implement the classic client-server solution. At the moment, however, AWS offers me an unmanageable set of services. And here I'm hoping for suggestions as to which of the services I should take a closer look at. Ideally, no complete 'server solution' should run on a virtual server. Instead, Lambda functions are mentioned again and again. So would Amazon RDS and AWS Lambda be a sensible and sufficient combination? Did I miss something?
Thank you very much for your suggestions.
One solution would be to use AWS S3 to server HTML, CSS, JS, Images and other static content. You could use AWS Lambda via AWS API Gateway to serve as a backend. AWS Lambda would then connect to AWS RDS or AWS DynamoDB if you would prefer a NoSQL solution.
Image taken from AWS Github repo
You can get a more detailed description of how to set this up at
https://github.com/aws-samples/aws-serverless-workshops/tree/master/WebApplication/

micro service web app with AWS

I am developing a web application for image upload and retrieval with AWS cloud services using a micro service architecture.
I am new to AWS and micro service architecture, please help me map the components of the architecture to AWS components.
Do i consider each micro service to run on one EC2 instance with auto scaling and load balancing?
Or do I run each micro service on one EC2 cluster?
If i put my static html files in an S3, how can i call database methods to load the html pages with content?
Is it by calling am API gateway from the client?
I have searched the web, but was unable to find a tutorial which implements multiple services as micro services using AWS EC2 / ECS.
Please help me figure out how to map my requirements and if there are any tutorials on implementing a similar app, will be very helpful.
Thank you in advance! :)
In short, you could use the serverless architecture i.e (with AWS's APIGateway and Lambda services) to build robust micro service based web applications.
Since you said that you were new to micro services architecture, I am listing down the best approaches.
Frontend/client
Single page applications(SPA) work well in the front-end and as they are a static site, they could be easily deployed to S3. This is the most cost efficient approach for SPAs. Here is a video deploying SPA on S3. This video will guide you through step by step instructions for deploying your SPA.
In case, you use react and redux in the front end, check out these steps for deploying react app to S3.
Backend
AWS EC2 is a good option. But there are many more alternatives available. As you said, you were new to backend, setting up EC2, VPC's and Elastic-ip is a little difficult process.
Nowadays, SPA's cover a lot of business logic, routing, etc., We need our backend only as API's for performing CRUD operations with database. I would like to suggest a bleeding edge technology called serverless. Here is the tutorial for launching your backend within 5 minutes. AWS lambda is a service that is called as function as service. You can build your backend using AWS lambda + API gateway + DynamoDB.
For eg: say you want to register some details in backend, you will POST all the data from client to your backend with url and proper path. In AWS lambda, you write your logic for POST as a function, which contains the logic to parse the data from request and send to dynamoDB. Now, this function can be exposed to world by connecting this function with API gateway( an another service in AWS). At the end we get an API, which can be used in your angular 2 APP. SO, on invoking the POST, angular 2 -> API gateway -> Lambda(extract request and send to DB) -> dynamoDB.
Benefits of using serverless compared to EC2.
You don't need to manage your server(EC2) from updating the new security patch to auto-scaling, everything is taken care by lambda. Serverless is a fully managed service.
You only pay when your lambda functions are invoked. On the contrast, even though your web app doesn't receive traffic for a given day, you have to pay the day-tariff for the given day.
Here is my github repo which could be a boiler plate for reactJS + Serverless + graphQL web app.
Having said, try serverless when compared to traditional backend approach. Any questions on this would be welcomed.

Working with Amazon Web Services

I have to build an online bookstore using AWS using SQS, SES and RDS services as homework but Im at a standstill. I read through the documentations about these services provided by Amazon but I cannot figure out how to make them communicate with each other and how to set up instances with the named services. SQS should be the backbone of this store. RDS should contain users and products in stock and SES is used to notification for the customer. I search google as thoroughly as I could but could not find anything related to my problem. If anyone could give me some pointers or lead me to some reading I may have missed I would be most grateful.
These services talk to each other, but they are functionally separate. You connect to and populate an RDS database the same way you'd connect to and populate any remote MySQL database. SQS and SES both are driven through the AWS API, which you tap into using the Amazon API tools:
http://aws.amazon.com/developertools?_encoding=UTF8&jiveRedirect=1
You just create your Amazon AWS account, get your access credentials, put them into the environment variables (read the READMEs in the tools downloads) and start using them.
hope that helps.