Microservices on AWS Compute Using Containers and Serverless
Deploying microservices-based applications can be complex. First, it requires setting up your basic compute, storage, and networking capabilities. You’re also going to need some simple developer tools, application integration, logging, distributed tracing, and monitoring.
AWS offers a wide variety of choices in each of these areas. In compute, you can create your own custom stack using your choice of EC2 instances. This gives you extreme flexibility for designing your application stack but… “with great power comes great responsibility” – if you do this, you will also need to manage all the various layers of your stack. For example, for a Java-based microservices application, you will need to manage operating system upgrades, JDK, application libraries, and of course the upstack components. There are other ways to manage application packaging, but this is where containers and serverless applications really shine: the entire application is packaged as a single deployment bundle, with all the dependencies included.
Once the packaging problem is solved, you need to think about local dev/test of your application. The seamless integration of a Docker image or a serverless distribution bundle (that you create) into your application development lifecycle reduces the barrier to the adoption of microservices. Then you need to address the other developer tooling you need…
This tutorial is open sourced; the repo is here: github.com/aws-samples/aws-microservices-deploy-options. Feel free to file issues on what you’d like to see more of in this project. And of course, we’d love to see Pull Requests!