In January 2022, I started the last semester of a cloud computing certification I signed up to do. The last semester included an infrastructure class along with a capstone project class. The goal was to learn all the skills needed to get the AWS Solutions Architect Associate certification while at the same time creating a capstone project to share with potential employers.
Enter the Cloud Resume Challenge, a cloud-based challenge created by Forrest Brazeal. Our professor thought it would make a good project for students to showcase all the skills learned during our program.
Here's a summary of the project requirements utilizing AWS Services:
Create a resume in HTML format and add CSS. Be sure to add a Cloud Practitioner certification to your credentials.
Host the website on an S3 bucket. Use Route 53 to get a domain and CloudFront to make your website secure.
Add a visitor counter to the website utilizing JavaScript and use a DynamoDB table to update and retrieve data from counter.
Set up API and Lambda functions so your JavaScript is not communicating directly with the table.
Write the functions in Python code and run tests.
Destroy all the work you've done through the console and do it all over again using the SAM template and CLI.
Implement source control through GitHub Actions and write a blog post describing all you learned.
Going into the challenge I was quite excited and was looking forward to get my hands dirty with the cloud services. At the time, I had already completed my Cloud Practitioner certification but had not done much hands-on work inside the cloud.
Setting up my resume in HTML and adding CSS was the easiest part because I was already familiar with this. Getting a domain name and actually setting up the S3 bucket with the CloudFront took a couple of days. I made it work but took a while figuring out how to create the records for the certificate. I also had to destroy my work at some point and start all over again because I did not realize the S3 buckets needed to be named with the domain name.
I spent many hours looking for JavaScript for the counter until I found something that worked. I had no previous knowledge of JavaScript and then came the Lambda functions in Python which were another nightmare because I also do not have knowledge of Python. I was able to find some scripts online and adapt to my requirements.
I was proficient creating the DynamoDB table because I had done some lab activities in preparation for SAA certification.
Setting up the API through API Gateway required several days of watching videos; I had never worked with this service and knew ahead of time I would have to enable CORS from reading blogs written by other challengers. Once the things were connected, my counter was up! But then I discovered, something was off because the API was not triggering adding the number of visitors to the table. After hours of frustration, I realized if I added the PUT method to the JavaScript all was good.
Next came the SAM CLI installation and the creation of the SAM Template. This part was all about learning how to be efficient with Infrastructure as a Code (IaC). I was able to follow steps in the AWS documentation to get this working, but the template wasn't quite functional. Although the API and the lambda functions were created, they were not working properly. At the time I am still trying to troubleshoot this template.
Setting up the CI/CD process was unexpectedly simple. I created my GitHub repository and then a CodePipeline in AWS that allowed for this integration smoothly. Every time I commit a change to my repository, the file gets uploaded to S3 and that's how my website gets updated.
This project definitely allowed me to get down and dirty with cloud services and other skills that were completely new to me. I am grateful that there are so many tutorials available on the web along with plenty of AWS documentation on all different services, but in spite of that, the process was frustrating and difficult.
I truly have a deeper understanding of cloud implementation and how to integrate services together to create real solutions. Below is the diagram of my implementation.
Comments