Cloud Resume Challenge - A Retrospective
Tags: aws, cloud, resume, beginners
Published: 2023-03-03 21:16:15



## Overview
_(As outlined in the book)_
1. Certification
2. HTML
3. CSS
4. Static S3 Website
5. HTTPS
6. DNS
7. JavaScript
8. Database
9. API
10. Python
11. Tests
12. Infrastructure as Code
13. Source Control
14. CI/CD (Back End)
15. CI/CD (Front End)
16. Blog Post


**My Background....**
_Who am I?_
I consider myself an IT Generalist. My career has been mostly IT management and Infrastructure management. I had some experience in college with coding in VB and C++ but ultimately it did not take. But I am a quick study, in most cases.

_How did I get here?_
A few years back, during Covid, I worked on a migration project transitioning some of our on premises server into the cloud. The team that I worked with all worked from home and seemed to enjoy what they did. From that moment I devised a scheme to put myself in a position to be more remote and more challenged. 

AWS was completely new to me. I did not work with it at all for work. It was all part of a masterplan to be more of a specialist vs generalist. 

**How it works:**

1. User makes a request to the website via your domain name.
2. Route 53 routes traffic to the CloudFront distribution.
3. CloudFront then forwards request to the S3 bucket website endpoint.
4. The endpoint request the HTML from the bucket that shares its name with your domain name. 
5. The JS on the page then calls the API Gateway Endpoint which then executes the lambda code. 
6. The lambda function, written in Python (boto3 library) executes and writes. It updates and returns the current visitor count total to JS.
7. JS then presents the visitor count on the page. 

![Serverless Architecture](https://s3.amazonaws.com/witherspoononline.com/image/Diagram.avif)

**Tools**
Visual Studio Code
PyCharm
Bash

**1. Certification**
It took me nearly 2 years (off and on) to study and pass the AWS SAA. Finding time to study was my biggest hinderance in the beginning. Responsibilities as a father, husband, etc was a constraint on my time. 

Once I figured out a regular schedule it took about 5 months of studying. I watched videos on managing time, studying techniques, and finding resources to prepare for the test. A bulk of my training was using ACloudGuru, followed by Whizlabs, and supplemented with some youtube videos and AWS documentation. 

I went through all the lectures on ACloudGuru. I did all relevant labs on Whizlabs...and boom! I PASSED. 

**2. HTML**
I had some experience with HTML from an internship more than 20 years ago, but none since. And I am not a person who phones it in so I took a refresher for HTML. I found an HTML/CSS template that I liked. But I wanted to understand how it worked. I reverse engineered it with the help of the Youtube videos I just mentioned. Javascript is used to invoke the lambda function. This cost me some time. 

**3. CSS**
I watched some videos and read some articles to under CSS. Even though this was included in the template I found for my resume. I wanted to understand how and why CSS does what it does. Another straightforward endeavor.

**4. Host Static Website (S3)**
There were a number of ways to complete this part of the task. I ultimately chose to register a domain with AWS via _Route 53_. In order to host a static website on S3 it has to be the same name as the domain you register for example example.com. You will need 2 buckets for redirect to work. This was a straightforward exercise.

**5. HTTPS (AWS Certificate Manager [ACM] )**
This is where it started to get difficult for me. The next part of this challenge required the use of HTTPS for security. I used _ACM_ to create a certificate to enable HTTPS. Your certificate should include the name of your bucket and something else (but you will need to figure that out on your own)… I then created a _CloudFront_ Distribution for the website and then associated the certificate to the distribution. This will force all request to use HTTPS. Mistakes were made, there was some documentation that called for 2 separate distributions which turned out to be an incorrect time suck. 

**6. DNS (Route 53)** 
Creating the records was mostly handled by ACM. In the certificate verification process there is an option to have the DNS records needed propagated over to _Route 53_. All the examples of how to use this that I found at the time used the old AWS interface to demonstrate this step. It did not look the same, regardless of this, this was also a straight forward endeavor. 

_The next 4 steps were the most difficult part of the challenge. And I did this out of sequence from the book._

**7. JavaScript (page counter)**
This part was difficult for me. I found a tutorial on how to create a page counter. Read numerous examples of how others have achieved this on their Cloud Resume Challenge journeys. Again, I had to deconstruct why the page counter works. Which meant I had to learn a little _JavaScript_. The _JavaScript_ code is used to invoke the _API Gateway_ call. 

**8. Database (DynamoDB)** 
I had done some classes in the past dealing with databases, SQL in particular, and normalizing databases. But _DynamoDB_ was a different animal all together. This required a lot of research of past resume challengers. Setting up the table was straight forward but required a lot of reading to understand for the context of the challenge. One Partition key is needed that all. _DynamoDB_ holds the page count.

**9. API (API Gateway)**
This next task was not too difficult. Luckily the AWS Solutions Architect course walked me through this with a lab. So I was familiar with this task. In order for the invocation to work properly. You will need the API endpoint and JS for this.  

**10. Python (Lambda)**
It is the most challenging part ever. I had to learn Python and boto3 in order to interact with the DynamoDB table. I stopped the challenge and spent a number of weeks in the Coursera [Python for Everyone](https://www.py4e.com/) course by Charles Severance. There is also a free version of this course on Youtube. My only programming experience was in college and I had to relearn some things. The course was worth it, I have a decent understanding of Python now and confidence to take on tougher coding challenges. 

**11. Tests**
Having only just learned Python I leaned heavily on [Getting Started With Testing in Python](https://realpython.com/python-testing/) and a couple of coder friends. Ultimately it took a lot of trial and error. 

**12. Infrastructure as Code (Serverless Application Model [SAM] )**
I did a version of this part of the challenge in _Cloudformation, SAM_, and _Terraform_. Ultimately I decided on SAM. It creates any AWS services for me instead of manually. _SAM_ guide is easy to google. _SAM_ makes it very easy but I will rebuild in _Terraform_ at some point. 

**13. Source Control**
Behind the learning Python this was the toughest for me. Once again I found a [Git and GitHub for Beginners - Crash Course] (https://youtu.be/RGOj5yH7evk) on Youtube. I have no experience using Git or any other source control, due mostly to the fact that I do not deal with code in my day to day. But now I use GitHub everyday. But the course goes over source control and CI/CD so well worth the time. 

**14/15. CI/CD (Back End and Front End)**
I set up GitHub Actions for the frontend and backend to automate code and AWS resources to set them up. Once again I found a [Git and GitHub for Beginners - Crash Course] (https://youtu.be/RGOj5yH7evk) to be very helpful. I repeated this course a number of times and destroyed several repos to get this to work but it did. I created several iterations of the Cloud Resume Challenge to test GitHub actions. My reaction to using Git in general is it saves a lot of my time. GitHub Action is easy to use because many tools as AWS in GitHub Marketplace, can improve workflows and save time. I ran into some issues and broke down the problem to the basics. I tried commands first in the CLI to prove that it worked and copied those scripts longform into the Yaml. It was only after I proved that it worked longform to I strive for efficiency utilizing GitHub secrets and stuff. Never put AWS credentials in any code! Voila, there it is. 

**16. Blog Post**
If you have made it this far you are experiencing #16. 

**What's Next** 
More projects. More Terraform. More Python. In the book there are a few more projects that can be done and I have jotted down some other project ideas from watching Youtubers during this journey. 

**Conclusion**
I passed the certification exam which validates the theoretical knowledge of AWS. But I needed something to differentiate myself in the job market. As a new Cloud Engineer with little work experience, The Cloud Resume Challenge did just that. It improved my skills, increased my knowledge, and gave me actual projects to speak to during interviews...and it worked. Besides that I am more confident with my improved skills for the future. If I wasn't so stringent about knowing things I could have completed the project in some weeks. But it was the journey that made it worthwhile. Stopping to learn Python, Git, JS, and strengthening my skills in AWS. Highly recommend this project for all those who want to work with cloud tech. 

Resources:
[My Resume Challenge site](www.witherspoononline.com)
[A Cloud Guru](www.acloudguru.com)
[Whizlabs](www.whizlabs.com)
Linkedin Learning
[Study schedule help](https://www.youtube.com/watch?v=jypuayQpvao)
[Open Up The Cloud] (https://www.youtube.com/watch?v=e7vZe7qZFmE&list=PLEk97Q5Nj5oesA1WNk7DzaUpZUnCsQFVQ)
[Getting Started With Testing in Python](https://realpython.com/python-testing/)
[Python for Everyone](https://www.py4e.com/)
[Git and GitHub for Beginners - Crash Course] (https://youtu.be/RGOj5yH7evk)