5 Projects To Get You Started In The Cloud: AWS Edition

HLki...diwp
11 Jan 2024
116

Introduction

Three months ago I embarked on a quest to enter the cloud. I had studied Mechanical Engineering, worked for seven years, and wanted to transition to the digital industry. Three months later I had successfully passed 2x AWS Certifications (the Cloud Practitioner and Solutions Architect Associate, yay!) but I still didn’t know how to create an S3 bucket. Sad, right?
This is where hands-on projects came in. Over the next few weeks I scavenged the internet for cloud projects that were simple, cost-effective, and fun, yet educational and valuable in the real world. I wanted projects with diversity but also ones that covered a variety of architectural principles within the cloud, such as microservices, serverless, containerization, and infrastructure as code.
In this article I summarize 5 hands-on projects for beginners that not only introduce you to the cloud, but will give you a solid breadth, depth and foundation to further build your cloud skills on. I’ve built these projects personally and can confirm it has taken my knowledge to the next level! Lastly, I will be explaining WHY these projects are relevant, by demonstrating the learning outcomes, and providing resource links to get you started. Enjoy!

Project 1: Host your Resume in the Cloud

Overview:
We begin with a project you have likely heard of over and over again. In fact, it may be border lining on cliché. But do it anyway. For you. This is a beginner friendly project, and the intention is simply to get you from Zero to One. You get to use simple and easy-to-provision resources to achieve the following:

  • Create an S3 bucket to host your resume
  • Distribute the content to an edge location for improved latency and security
  • Set up a custom domain name using Route53 for better accessibility.

Learning Outcomes:
This beginner friendly project has a low barrier to entry, providing you with hands-on experience in utilizing cloud infrastructure services, enabling you to understand the fundamental concepts of cloud computing and how various AWS services work together. By setting up an S3 bucket to store your resume, you learn how to manage object storage and make it accessible over the web. CloudFront, AWS’s content delivery network (CDN), helps you enhance the performance and availability of your resume by caching its content globally. Additionally, configuring Route 53, AWS’s scalable DNS service, enables you to assign a custom domain name to your resume, making it easily accessible and professionally branded. Overall, this beginner project allows you to grasp the basics of cloud hosting, storage, content delivery, and DNS management, building a solid foundation for further exploration of cloud technologies and services.
Resources to get you started:

  • There are several free resources on the internet to help you get started. This YouTube tutorial, for example, provides an excellent demonstration.
  • If you’re serious and want to take things to the next level, you can always take “The Cloud Resume Challenge”. Through this project, you get to dive deeper into not one, but several steps, such as adding JavaScript for a visitor count, a database for storing the count data, creating APIs to communicate between these various services, and much more. I’ve taken it myself and can assure you it was worth the money.

So what are you waiting for? Take your first step in the cloud!

Project 2: Build a Serverless Web Application

Overview:
Serverless computing is a popular cloud computing model where developers can build and run applications without the need to manage or provision underlying infrastructure. Getting some hands-on experience with common AWS serverless tools and functions, such as AWS Lambda, Amplify and API Gateway will expose you to a wider possibility of architectural designs and solutions in the future. In particular, this second project will help you create the following:

  • Configure AWS Amplify to host static resources for the web application (with continuous deployment built in)
  • Creating a Cognito user pool to manage user’s accounts
  • Build a backend process for handling requests for the web application by creating a Lambda function
  • Deploying a RESTful API by using API Gateway to expose the Lambda function built in the previous step

Learning Outcomes:
Creating this particular beginner project in AWS to explore serverless computing offers valuable cloud skills. By configuring AWS Amplify for hosting static resources, you gain experience in setting up and managing a scalable and secure infrastructure for web applications. Leveraging Cognito user pools helps you understand the process of user authentication and managing user accounts in a serverless environment. Building a Lambda function for backend processing familiarizes you with serverless functions, event triggers, and serverless architectures. Lastly, deploying a RESTful API using API Gateway enables you to expose your Lambda function and learn about API management and security. By completing this project, you gain practical knowledge in serverless computing, application deployment, authentication, and API development, all of which are valuable skills in the cloud computing landscape.
Resources to get you started:

  • AWS has an extensive library of free hands-on projects that guide you in creating a variety of solutions, including the project above. In this tutorial, they walk you through creating the aforementioned Serverless Web Application.

Project 3: Create your own VPC and 3-Tier Application

Overview:
The AWS cloud, like any provider, is essentially a network of remote servers that are hosted on the internet to store, manage and process data. Networking therefore is a core principle and can often be quite difficult to grasp. To begin with, there are just so many terms — VPC, Public Subnets, Private Subnets, Internet Gateways, NAT Gateways, Route Tables, Security Groups, just to name a few. If only there were projects where you could build these from scratch. Well, we are in luck, because there are!
In this project, you get to build a classic 3-Tier Application deployed in your very own, custom built VPC. In particular, you will get to:

  • Create a custom VPC from scratch, with public and private subnets in 2 availability zones
  • Enhance the architecture by adding NAT Gateways, Application Load Balances and Auto Scaling Groups
  • Creating a MySQL RDS database for the data tier
  • Using Amazon EFS for the web servers to have access to shared files
  • Using ECS Instances to host the website, as part of the app tier
  • Using ALBs and ASGs to distribute the traffic as well as making the website highly scalable, fault tolerant and elastic
  • Use Route 53 and AWS Certificate Manager to customize DNS route and secure the website

Learning Outcomes:
This project will solidify your grasp on core AWS networking concepts, and also expose you to a common architectural design pattern in the cloud known as “N-Tier Architecture”, also known as “Layered Architecture”. By deploying this project, especially from scratch, you gain a deeper understanding of networking and infrastructure setup in AWS.
Creating a custom VPC with public and private subnets in multiple availability zones helps you grasp the concept of high availability, as well as isolating and securing different tiers of an application. Enhancing the architecture with NAT Gateways, Application Load Balancers (ALBs), and Auto Scaling Groups (ASGs) allows you to learn about fault tolerance, and scalability. Deploying a MySQL RDS database for the data tier familiarizes you with managed database services and the considerations for data persistence. Utilizing Amazon EFS for shared file access provides insights into shared storage solutions. Leveraging EC2 Instances for hosting the website as part of the application tier introduces you to the power and agility of on-demand compute services. Utilizing Route 53 and AWS Certificate Manager for DNS customization and website security teaches you about domain management and SSL certificate integration.
Overall, this project equips you with a comprehensive skill set in networking, infrastructure design, database management, storage solutions, compute services, scalability, and security, equipping you with an order-of-magnitude increase in cloud proficiency, from the previous 2 projects.
Resources to get you started:

  • As mentioned in Project 2, AWS offers an extensive library of hands-on guides. If you’re intimidated, or more likely overwhelmed, by this project, you can check out their beginner friendly version, to get started.
  • If you’re serious, willing to spend a few dollars, and want to take things to the next level, you can follow along with clear step-by-step instructions from a course created by Azeez Salu, a cloud engineer, on his website (I’ve taken it myself and highly recommend it. And no, he did not sponsor me to promote his material!).

Project 4: Build a Web Application through Docker and learn Containerization

Overview: Containers and containerization offer a lightweight and portable approach to software package and deployment. They allow applications and their dependencies to be packaged into a single, self-contained unit that can run consistently across different computing environments. Docker is one of the most popular containerization platforms, whereas Amazon Elastic Container Registry (ECR) and Elastic Container Service (ECS) are AWS native cloud tools serving as fully managed container registry and container orchestration services respectively. In this particular project, you will get to:

  • Create a Docker file
  • Build the Container Image
  • Push the image to your Docker Hub account
  • Create an Amazon ECR Repository to store your image
  • Push the Image to your ECR Repository
  • Creating a custom VPC in AWS (including Public/Private Subnets, NAT Gateways, Application Load Balancer, and Security Groups)
  • Create an ECS Cluster
  • Deploy the ECS Cluster within the VPC
  • Use Route 53 and AWS Certificate Manager to customize DNS route and secure the website

Learning Outcome:
Building a web application through Docker, ECR and ECS will allow you to appreciate the core advantages that containers and containerization tools offer, such as portability, consistency, isolation, scalability, efficiency management, and much more. Due to this reason, the adoption of containers within organizations and their teams has skyrocketed in recent years. Companies and teams are relying more frequently on this architectural style. Completing this project and adding it to your arsenal will equip you with a relevant and in-demand skill set common in today’s cloud landscape.
Resources to get you started:

  • This YouTube video tutorial, by Sid from DevOps Directive, provides an excellent introduction to containers and containerization, from which you can follow along and build an architecture, similar to the one above.
  • If you’re serious, once again willing to spend a few dollars, and want to take things to the next level, you can follow along with clear step-by-step instructions from another course created by Azeez Salu, a cloud engineer, on his website.

Project 5: Deploy a Web Application through Terraform and learn Infrastructure as Code

Overview:
If you completed the previous four projects, you might have noticed an annoying trend. All the resources were provisioned and configured manually, by interacting graphically with the AWS Management Console. This process, although effective, can be extremely tedious and time consuming. If only there was a way to automate this process. This is where Infrastructure as Code (IaC) comes in. IaC is the process of automating the creation and deployment of IT resources and infrastructure through code, rather than manually configuring it yourself. This can produce tremendous time savings and resource efficiencies. A popular IaC tool, used across all cloud platforms today is Terraform. This project will allow you to appreciate the advantages of IaC by using Terraform to deploy a simple web application. In particular, you will complete the following steps:

  • Install and setup Terraform on your local machine
  • Set up remote backend in AWS using S3 bucket
  • Set up a GitHub profile and repository, installing Git, Visual Studio Code, and AWS CLI to ease access, management and deployment of code
  • Write Terraform syntax to create resources in AWS, which include:
  • Understanding the basic syntax of Terraform init, plan, apply and destroy
  • Creating variables and inputs which enable Terraform configurations to be flexible and composable
  • Creating a VPC (including public/private subnets in multiple Availability Zones)
  • Creating NAT Gateways
  • Creating Security Groups
  • Creating an RDS Instance
  • Creating an EC2 Instance
  • Creating Application Load Balancers and Auto Scaling Groups
  • Creating record sets in Route 53 and AWS Certificate Manager to customize DNS route and secure the website
  • Destroy resources and cleaning up the environment

Learning Outcomes:
This project is similar to Project 3 where you created a 3-Tier Application and deployed it in a custom VPC from scratch. But the difference is that you automate the entire creation process through code, instead of manually creating it through the management console. Most companies and teams in the workplace do not have the time, and cannot afford the risk of human error resulting from manually provisioning services. IaC is a process that offers several advantages over manual deployment, such as repeatability, faster deployment , faster recovery, increased security, greater control, financial savings, and much more. Therefore, by familiarizing yourself with this practice, you can demonstrate a skill that is used widely in today’s cloud industry.
Resources to get you started:

  • This YouTube video tutorial, again by Sid from DevOps Directive, provides an excellent introduction to Infrastructure as Code(IaC) and Terraform, from which you can follow along and build an architecture, similar to the one above.
  • Once again, if you’re serious, willing to spend a few dollars, and want to take things to the next level, I highly recommend the clear step-by-step instructions from yet another course created by Azeez Salu, a cloud engineer, on his website.

Conclusion

The journey into the cloud, especially in the beginning, may seem overwhelming with its seemingly never ending collection of tools, services, concepts, practices, architectural styles, three letter acronyms, and much more. But I can promise you this — the persistence is worth it. Cloud Computing is an exciting technology that is revolutionizing the digital industry by lowering the barrier of entry of digital adoption for many organizations. Building these hands-on projects will not only equip you with practical skills but also provide you with a comprehensive understanding of cloud technologies, positioning you for success in this rapidly evolving industry. That was my wish for me. It is now also my wish for you. Good luck!

Write & Read to Earn with BULB

Learn More

Enjoy this blog? Subscribe to Resistancel

17 Comments

B
No comments yet.
Most relevant comments are displayed, so some may have been filtered out.