DEV Community

Anthony Coughlin
Anthony Coughlin

Posted on

My Cloud Resume Challenge

Here's my shot at the Cloud Resume Challenge https://cloudresumechallenge.dev/docs/the-challenge/aws/

I managed to complete the challenge after 2 weeks, well, if I'm completely honest I did not take the AWS Cloud Practitioner certification but plan to get that in the future. I'm a QA Manager by trade, but have got quite a bit of Cloud Experience mainly with Azure. It would have been much easier to just do the challenge with Azure but the whole purpose of the challenge is to learn, so I opted for AWS.

One of the questions I continually see asked on forums related to this challenge is the cloud cost, at the time of writing here's what I've spent in total:

Domain Purchase - $17.34
AWS Route 53 - $0.51
AWS Storage - $0.003
AWS API Gateway - $0.001

Total - $17.86

I would expect depending on traffic the costs here will increase, but I’ve in main taken advantage of the AWS free tier as much as possible. My frugality has its drawbacks, the visitor count API doesn't refresh the visitor data as quickly as I would have hoped also, cost is a factor here but it's an acceptable trade off.

Below is the blurb listing the tools, technologies etc.

Github

https://github.com/antowaddle/cloud-resume-sam-template

Live Site

https://anthony-coughlin-resume.com/


Introduction

The Cloud Resume Challenge encourages participants to build a serverless web application on AWS, focusing on practical AWS skills and modern web development techniques. This challenge is an opportunity to showcase expertise in AWS services and enhance one's portfolio with a real-world project.


Technologies Required

Technology Description
AWS S3 Static website hosting
AWS API Gateway Create RESTful APIs
AWS Lambda Serverless compute
AWS DynamoDB NoSQL database
AWS CloudFormation Infrastructure as code
AWS IAM Identity and Access Management
AWS CodePipeline Continuous integration and continuous delivery pipeline
AWS SAM Serverless Application Model
HTML/CSS Frontend development
JavaScript Frontend and backend development
Python APIs and Tests
YAML Infrastructure as code (CloudFormation and SAM templates)
Terraform Infrastructure as code

Architecture Diagram

Image description

Points of the Challenge

  1. Create a static resume website: Host your resume as a static website on AWS S3. ✅
    I used Amazon S3 Static Website, relatively easy to get setup and deploy with AWS SAM.

  2. Use AWS Lambda: Implement Lambda functions to handle backend tasks, such as contact form submissions. ✅
    The lambda function code for the Get and Put requests were written in Python.

  3. Utilize AWS API Gateway: Create APIs to interact with Lambda functions. ✅
    As per the above, the APIs accept requests from the web app and communicates with the DB.

  4. Integrate DynamoDB: Store and retrieve data using DynamoDB, such as visitor statistics. ✅
    I switched to using Terraform to deploy my Dynamo DB table.

  5. Implement AWS CloudFormation: Define your AWS infrastructure as code for reproducibility. ✅
    Managed by AWS SAM, stack(s) created and resources defined within.

  6. Set up IAM roles: Manage permissions and security using IAM roles and policies. ✅
    A specific user that will remain nameless was setup to configure all the resources.

  7. Implement CI/CD pipeline: Use GitHub Actions for automated deployment and updates. ✅
    I created a pipeline using GitHub actions with stages to test, deploy infra, deploy site and then retest (using playwright)

  8. Design frontend: Develop a responsive frontend using HTML, CSS, and JavaScript. ✅
    I'm no Front End Guru, so kept it relatively simple.

  9. Version control: Use Git for version control and collaborate via GitHub or another repository. ✅
    Does anyone use anything other than GitHub these days?

  10. Optimize for cost: Implement cost-effective solutions, utilizing AWS free tier resources where possible. ✅

  11. Testing: Conduct testing to ensure functionality and performance.
    Unit and UI tests added using Playwright. ✅

  12. Deploy publicly accessible site: Ensure your resume website is publicly accessible and optimized for performance. ✅

Challenges

Here’s a few things I struggled with:

  1. AWS Sam - I encountered several gotchas while using AWS Sam. I ended up switching to using Terraform to deploy the DB. In hindsight I would should have used terraform from the start.

  2. Certificates - I unfortunately created a cert in the wrong region and it had to be deleted. It was very challenging to recreate the cert and associate it with the domain. Be careful with how you create certs and don’t delete them!

  3. DynamoDB- it’s plug and play, right? Yes, technically true and great when things go right. Unfortunately for me the table was not getting updated through my put command, I had to do quite a bit of reading in order to get things in order

Conclusion

So overall that is it, in terms of time it took me probably around 2 weeks and several hours of tearing my hair out to complete. The journey was bumpy, not to manage that we’ve got a new born and 2 year old at home which didn’t make things easy.

This is an excellent challenge, throw yourself in, make mistakes, feel good, feel stupid and most important learn.

Top comments (1)

Collapse
 
kundan_singh_b4c1ec03fb90 profile image
kundan singh

Great !!!