I Completed the Cloud Resume Challenge
Published: 2020-06-24 12:25:57

I stumbled across the Cloud Resume Challenge while on Reddit. I recently passed the AWS Solutions Architect Associate exam, and I was looking for an AWS Project to test my skills. I can absolutely say that the Cloud Resume Challenge did that. 

One of the most important things I learned during this challenge is that I love the cloud as much as I thought I did, if not more. Prior to this challenge, all but two of my AWS projects were from studying for the Solutions Architect Associate exam. This project has taken me the longest to complete but has been the most rewarding. This experience has given me a deeper understanding of how different AWS components work together.

While completing this project I became more familiar with DynamoDB, REST APIs, and Lambda. The most challenging part for me was getting the Lambda function to work correctly. I won't provide too much detail for those who are still completing the challenge. It is extremely satisfying at the end and completely worth all the long hours it takes to finish. AWS documentation and websites such as Stack Overflow are invaluable. 

Something else that this challenge reminded me of is that I won't know everything as soon as I want to know it. The important thing is that I need to embody patience and remain confident. Everything is doable. You have to be patient and determined enough to do it. 

Working in the Cloud is my passion, and my long-term goal is to transition to Cloud Security. I'm currently studying for the Security+ exam. I look forward to all the new knowledge I will gain and where the cloud takes us as a society.

Below I provide a description of my experience with the challenge in greater detail.

1. Have an AWS Certification. Done as of May, 2020. I was especially proud of this achievement because prior to studying for the exam I had no official cloud experience.

2. The resume has to be written in HTML. Done. Thanks to an outside resource, though! A big thank you to Matt Brown from thingsthatarebrown.com. While I do have HTML experience, I preferred to use a template so I could focus more on the cloud aspects of the challenge.

3. The resume has to be styled with CSS. Again, thank you to Matt Brown. I love the look of the resume template I chose!

4. The website has to be deployed as a S3 static website. Done. I had no issues with this as I went through several tutorials where I did this while studying for the exam. I followed tutorials from ExamPro, Digital Cloud Training, and A Cloud Guru when I was studying.

5. Use HTTPS for website traffic. This was another easy step for me, as I had done this before while studying for the SAA Exam.

6. Point a custom DNS domain name to the CloudFront distribution. Another step that I completed easily thanks to the hands-on experience I gained while studying for the exam.

7 - 11. Include a website counter on your resume webpage that communicates with DynamoDB using an API. Configure your resources (REST API, DynamoDB, Lambda) using the SAM CLI. Use Python for the Lambda function. Okay. This is where things began to get difficult for me. When I began this project I was already familiar with JavaScript, so that helped some. 

I found it easiest to deploy my resources using the SAM CLI first. There are several awesome things I learned during this step. I deployed my REST API and DynamoDB table in the same template using CloudFormation. I also packaged the file that held the Python code for the Lambda function with the CloudFormation template. For the Lambda function I decided to use an atomic counter to update the DynamoDB table.

After I created the resources, I used the AWS CLI to put items in DynamoDB so that I could store the visitor count. The AWS CLI and SAM CLI are amazing. I saved a ton of time in the long-run by using these tools. 

After putting the items in the DynamoDB table I checked my API. I had to ensure that CORS was enabled and that the method response was correctly set up. If you're having trouble with this, you may need to check your models.

Eventually I had everything set up correctly. When I tested my API url, I saw the visit value that was stored in my DynamoDB table. Finishing this step felt great.

At this point all I had to do was use a bit of JavaScript to call the API so the visitor counter would work on my site. An hour or so later and I had it. Steps 7 - 11 done.

12 - 13. Use CI/CD for the back-end API and front-end website. This step was fairly easy for the front-end. The back-end? Well... not so much. I used CodePipeline for both. I connected my GitHub repository for the front end as the source stage, and set the deploy stage as my S3 bucket that hosts my website.

The back-end required that I have a Source, Build, and Deploy stage. I used AWS CodeCommit, AWS CodeBuild and AWS Cloudformation. I spent hours upon hours on Google trying to understand how to complete this Pipeline. I finally found an AWS tutorial for Building a continuous delivery pipeline for a Lambda Application. I followed the instructions using my own files and got it to work. Permissions are a big deal in this process. 

Once the pipeline worked, I pushed a change through for the API and the Lambda code. Both changes pushed through successfully. At this point I was extremely satisfied and thankful for this challenge. I had more hands-on experience, I learned how to better use Google and ask questions, and I fell in love with the cloud even more.

I cannot wait to see how my career unfolds in the future and I look forward to connecting with many new people.