Cloud Resume Challenge
Published: 2023-08-23 00:35:30


#####Tavaris Hooks#####
#####[Linkedin](https://www.linkedin.com/in/tavarishooks/)#####

---

####Introduction####
My journey with AWS started a lot of learning, challenges, and pure fascination. I went from casually watching courses and studying for exams to craving some hands-on action, I wanted to dive into building actual infrastructure in the cloud. Sure, I had my share of AWS projects with a consulting firm and a capstone project, but I was hungry for more. That's when I decided to take on the Cloud Resume Challenge.

Now, this challenge was no small task. It pushed me to step up my game and put my skills to the test. The goal? Build a website to host my resume, and power it all using the tools AWS has to offer. This includes object storage with S3, CloudFront's content delivery network, server-less functions using Lambda, sorting out the domain with Route 53's DNS, and DynamoDB's NoSQL database.

Let's just say, I was diving into a whole new world of tools and ideas. Some were familiar, but others were not, that did not stop me from taking on this challenge. Troubleshooting became one of my most improved skills through it all. Each challenge was a chance to improve – as a cloud engineer and as someone who loves tackling tech head-on.

Looking back, taking on the Cloud Resume Challenge wasn't just about a resume or a website. It was about embracing the challenge, learning by doing, and growing in ways I hadn't imagined. So now, with a bunch of new skills and a fresh perspective, I'm ready to take on whatever exciting projects come my way in this ever-evolving cloud landscape.

####Tech-Stack####
* HTML, CSS, JavaScript
* AWS- Lambda, S3, Route53, CloudFront, DynamoDB, SNS
* Scripting- Python(boto3)
* Version Control- GitHub
* CI/CD- GitHub Actions
* IaC(Infrastructure as Code)- Terraform

####High-Level Architecture####

![Architecture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6t6n910apbpwbzpkfyxw.png)

####Steps####
1. Certification: This step involves getting the AWS Cloud Practitioner Certification. Since I am AWS SAA Certified, this step was not necessary.

2. HTML and CSS: My skills in this department were very weak. Luckily for me there are endless resources on the internet that teach and show how to write in HTML and style it with CSS. This allowed me to write and style my resume how I wanted. 

3. Static Website Hosting: For this step I stored my files in an S3 Bucket and fronted it with a CloudFront distribution. Through this I was also able to redirect traffic from http to https, a certificate was needed from AWS Certificate Manager to achieve this step.

4. DNS: Registered my own domain inside of a Route53 Hosted Zone. Then used the domain I created for my CloudFront distribution.

5. Javascript: This was used to code a visitor tracker on the webpage.

6. DynamoDB: I created two DynamoDB tables. The first one was to keep track of the visitor count, the second one was used to lock my Terraform state file (preventing more than one person for updating the infrastructure at the same time.)

7. API: Normally API gateway is used in this project, but AWS has since released lambda function URLs which give us the same functionality but with less overhead. 

8. Lambda: I used Python 3.11 as my runtime for my two Lambda functions. The library I worked with was Boto3 which is the AWS SDK for Python. The first Lambda triggers through the function URL that is coded into the website, it then adds a one to the viewer count in the DynamoDB table, this effectively keeps a count of how many visitors the website got. The second Lambda triggers when CloudWatch receives the log saying that the "viewer count" Lambda function has been triggered, it then publishes a message to an SNS topic, which will send me an email every time someone views the resume. 

9. IaC: Everything that I have mentioned is being managed in a Terraform back-end that is being hosted in another S3 bucket. 

10. CI/CD: I chose to create two pipelines in using GitHub Actions. I took this approach to decouple the workflow jobs to better see where failures are occurring. The first pipeline is for the front-end, which updates any changes I make in the HTML or CSS immediately to the file in the S3 bucket. The second is for the Terraform managed infrastructure to be either deleted, created, or configured. Any changes that I push in my local code editor updates my front-end and or the back-end automatically.

11. SNS: Created a topic to receive notifications of new viewers.

####Challenges####
This section could be as long as a novel, but here are a couple of tough situations that I ran into.

1. Back-end Pipeline- Setting this up for the most part was not the hardest task in the world, but I began to have issues due to the script not running in the proper directory. I fixed this by making sure I targeted the correct directory. 

2. AWS Certificate Manager- I had an issue getting a certificate to be issued for my distribution. To overcome this, I had to make sure that all my records were set straight in Route 53.

It was very challenging but in the end through pure perseverance I was able to overcome these obstacles. 

####Conclusion####

I absolutely had a blast doing this project. In the end it took me about 3-4 weeks of working on it to actually have everything finalized. I am also thankful for the people who have helped me along the way whenever I had a question about something. 

This was a great way to get experience with multiple AWS services as well as working with concepts such as DevOps automation, IaC, and version control. This further excited me in cloud computing and there is a high chance I will be attempting a new project after completing this one. 

My journey so far has been nothing short of extraordinary. Every step I've taken has fueled my passion for Cloud Engineering and DevOps. The knowledge and skills I've gained have ignited a fire within me to keep reaching for new heights. As I stand at the precipice of what's to come, I'm brimming with enthusiasm to conquer the challenges ahead. Here's to embracing the next challenge with unwavering excitement and determination!

[Click here to check out my resume!](https://tavarishooks.com/)