Cloud Connections

Cloud Connections

cloud engineering, automation, devops, systems architecture and more…

15 Jun 2020

Completing the Cloud Resume Challenge

Hi there! In this post I’ll be sharing my experience attempting the Cloud Resume Challenge.

Tasks: 16 ✅

With the world temporarily shutting down due to the pandemic, things were very slow moving at work. I found myself with more time apart from work tasks, decided to make use of it and learn something new. I’ve always wanted to gain more knowledge on cloud based technologies and surprisingly saw the Twitter post by Forrest Brazeal, about this challenge and had a look at it. I made up my mind to take it on and started working on it in May.

After a month and half of long hours of researching, watching videos and coding I can proudly say I’ve been able to tick off all the tasks on the challenge!

This challenge requires us to make a simple resume website (front end) and develop a small visit counter feature (back end) using specific resources on AWS. Along with that we have to make use of infrastructure-as-code to deploy the necessary resources automatically on AWS and use CI/CD workflows on Github so that any updates to our source code (either front end or back end) are automatically pushed to AWS.

Have a look at my resume website running on AWS: muhannad.io

2023-04-08 UPDATE: The resume website link has now been replaced with this website as I want to include more technical content. You can find the source code for the backend project on GitHub

I decided to approach the challenge in phases with similar tasks together.

Phase 1: Build a resume website using HTML and CSS

Tasks: 2 ✅ 3 ✅

Web design isn’t really my strong suite, but I’m satisfied with what I could build from scratch. (Maybe a bit Web 1.0? 😅)

CSS Layout

Phase 2: Host the website on AWS S3 and enable HTTPS using CloudFront

Tasks: 4 ✅ 5 ✅ 6 ✅

Following the AWS documentation, it was pretty straightforward. AWS S3 enables static website hosting and using SSL certificates generated by Certificate Manager we can include them in CloudFront distribution to enable secure access to the website. After updating the DNS entries for the domain to point to the CloudFront distribution, the resume website was live.

S3 Static Site

Phase 3: Build a site visit counter using AWS API Gateway, Lambda Functions, DynamoDB

Tasks: 7 ✅ 8 ✅ 9 ✅ 10 ✅ 11 ✅

Honestly, this phase was the hardest part for me. I can only rate myself a beginner in software development (apart from writing simple scripts), but I’m really glad that I was able to complete it.

I learned how storing data on DynamoDB works and wrote the back end Lambda function using Python and a simple Javascript for the front end. To tie both together, I was able to expose the necessary endpoints for the front end Javascript using API Gateway, which triggers the Lambda function to update the counter value stored in DynamoDB.

DynamoDB Table Items

This is the diagram I used to figure out how I could write specific functions for each operation.

Application Sketch Diagram

It was a huge learning curve, but I think this concept of serverless applications brings a lot of value. You don’t have to worry about the underlying resources and can focus on developing the application.

Phase 4: Deploying the AWS components using Infra-as-Code

Tasks: 12 ✅

It is always good to automate what you’re doing manually. For example, rather than creating all the resources on AWS web console, we can define them in a configuration file and run a few commands to update the whole stack.

Deploy Servless Stack

I used the Serverless Framework for the back end and a CloudFormation template for the front end resources.

cfn stacks

Phase 5: Enabling CI/CD workflows on Github

Tasks: 14 ✅ 15 ✅

After checking the both components into Github repositories, I used Github actions to enable automated workflows to test the back end code and deploy it to AWS when there’s a commit to the main branch.

cicd backend

Similarly any updates to the front end are also triggered whenever there’s a commit to the main branch and the updated files are synced to the S3 bucket.

Phase 6: Get AWS Certified

Tasks: 1 ✅

I studied for about 2 weeks for the AWS Certified Cloud Practitioner exam. The material is quite easy to follow and with enough practice on the AWS platform, it is easily doable.

aws_ccp_badge

Key Takeaways

  • Coding is hard! But it’s important to keep at it consistently. Eventually you get to the a-ha moment and everything falls into place. Also, make sure to practice regularly.

  • First cloud application! It has given me a clear idea on what components would be included in developing and supporting an application. Additionally, how time can be saved by using the right resources, automating some of the tedious tasks and keeping your focus on developing the application.

  • First cloud certification! Even though it might be an introductory certificate, it gave me the confidence that I could attempt for the more advanced ones with enough experience.

I’d like to thank Forrest for writing up this challenge. Each step is well linked to the other and teaches much about how to develop applications for the cloud. I recommend anyone who’s looking to learn more about developing applications on the cloud to try this out.

Future Plans

Coming from an IT infrastructure background for the most part of my career, completing this challenge has been an eye-opener. I believe it’s important to adapt to new concepts for working with the cloud and be ready for what the future might bring. I think this is a turning point for my career and will be working on finding a role more focused on cloud engineering.

I’ve already got a few ideas to improve on my coding skills. Next I’m going to try to build a serverless notification bot for Telegram. Stay tuned, as I’ll be sharing my experience here.

It’s always going to be continous learning from here on. I’ll be exploring other areas in cloud and the tooling involved.

More Details

Feel free to reach out on Twitter or LinkedIn if you’ve got any questions.

You can find out more on each phase, in detail, in the first post about the challenge.