I have been meaning to write a series of blog posts about building applications using containers on AWS for a while. This is the first of — what I believe will be — a long journey into modern application development.
First of all, I joined the AWS Container team back in August 2020 to lead the Developer Advocate team so that’s part of my job to talk about our services.
Second, containers are really hot on the market and I don’t necessarily say that in terms of hype in the tech space but mainly because of the adoption we are seeing. And there are very good reasons for this. There are a powerful way for developers to package and deploy their applications. They are lightweight and provide a consistent, portable software environment for applications to easily run at scale anywhere.
Third -and in fact probably the most important to me- I could not find materials that could guide someone through the process of creating a complex application (i.e. not just a simple
'hello-world' demo app but something real, something that would solve real business challenges), navigating through the different options, evaluating trade-offs and deciding the tools to go with. Not everyone needs that type of guidance, nevertheless, I have found enough evidence of Twitter from people looking for that type of content. This is an attempt to fill a gap.
One of our team’s tenets is We stand in the customer’s shoes. It means that we are practitioners and we experiment on behalf of our customers. For this exercise, I will put myself in the shoes of a developer in a startup or in an incubator of a larger company whose mission is to build a large scalable logistic application. There will be phases of exploration and testing but rapidly I want to move to build a real product and iterate to deliver value to our fictious customers.
Disclaimer: I’ll do my best to make the application and the infrastructure as close to a real environment as possible taking in account some of the good practices in the domain. However, the information contained on this blog is for general information purposes only. More details on the Disclaimer page. Be aware of possible costs that would result from following along. Be mindful of the limits of the AWS free tier. Also please add your comments if you believe that something is odd or incorrect, my goal is to help and make it useful.
For this blog series, I will embrace the following guiding principles:
- ‘Serverless’ first: I’ll use managed services as much as a I can so to be able to focus on the business logic and iterate quickly.
- Use the ‘best tool’: By that, I mean I don’t want to be dogmatic but pragmatic. For example, when using a Lambda function is appropriate, I will not force myself to run a container.
- Make it realistic: Part of the exercise is to be in the customer’ shoes so I’ll build the solution accordingly.
- Meet you where you are: Although this is not a course, I will start from a beginner level and add pointers to additional content. As we progress, we will grow together to become more proficient and eventually experts!
- Community friendy: I’d love to get your feedback, incorporate it to make this series more exciting and will welcome your contributions during that journey.
In this series, we will cover many aspects of building a Cloud Native Application with AWS Container services.
Learning by doing
This Blog series is not a course and it is not designed to pass a certification. I believe that along the way, you will be skilled and experienced to take a certification but that’s not the goal.
I won’t explain everything, I’ll assume that you have some level of experience with containers. For example, I won’t explain the details of the Dockerfiles I’ll share. We will build a cool application using AWS Container services (and others) and this way, we will learn a lot. I’ll share the code so you can reproduce it in your environment.
If you want an introduction to Docker, I suggest you watch this episode of Containers From the Couch, a live show that my team is driving.
Interested to dive deeper on Containers? Nigel Poulton’s Docker Deep Dive is a reference.
Navigating through the portfolio
There are several options to run containers on AWS:
- Do-It-Yourself with EC2: install Docker or containerd for example. Since we want to use managed services, we won’t implement that option.
- Amazon Lightsail
- Amazon ECS and Amazon ECS Anywhere
- Amazon EKS and Amazon EKS Anywhere
There are also different tools and services (like AWS Fargate, AWS Copilot, AWS Amplify, Amazon ECR, AWS Proton…) that we will cover and use.
We will review and discuss some limitations of the services and the options to work around or use other options.
Containers but not only
As we build a Cloud Native Application, we will need other adjacent technologies to containers: observability, service mesh, databases… Again, the goal is to build something close to reality.
As said earlier, we want to build a logistic app. More precisely, we aim at reinventing the delivery of goods in the industry. This application will enable customers to ship packages and track their delivery. We will have a fleet of vehicles operated by the company but also a fleet of ride-share car drivers that we will leverage to have more capilarity. We will use maps with real-time tracking thanks to IoT technologies. We will offer a web gui and APIs as well as a mobile app for the drivers.
Ready for high-scale
As we intend to go big and be successful with our business intiative, we need the application (and the infrastructure) to scale to meet the demand. We will build a resilient infrastructure that can scale. We will stress test the application to validate it works as expected.
The journey of a thousand miles begins with a single step
This is the beginning of an exciting exploration in the Cloud Native world. I hope you will learn interesting things — I will for sure. I am looking forward to our discussions. See you soon to start with Amazon Lightsail.