3

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

Dee
  • 151
  • 1
  • 14

1 Answers1

2

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.

  1. 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.
  2. 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.

Community
  • 1
  • 1
Lakshman Diwaakar
  • 6,002
  • 4
  • 40
  • 73
  • thank you very much for the detailed answer :) i will go through the tutorials and attempt it. Also is there any simplified guide on writing a Lambda function? preferably in java or php is that is possible? – Dee Nov 20 '16 at 13:21
  • Ya Lambda functions can be written in java but not in php for the moment. Look into serverless framework for getting started. – Lakshman Diwaakar Nov 20 '16 at 13:25