The Cloud Resume Challenge
Tags: aws, terraform, cloudresumechallenge
Published: 2023-06-28 05:21:35

Greetings everyone! I am thrilled to share my recent completion of the Cloud Resume Challenge, a remarkable endeavor that has significantly contributed to my cloud career aspirations. As an individual with two AWS certifications, I was keen on gaining practical experience and expanding my expertise in the cloud domain. This challenge provided me with an excellent opportunity to apply my knowledge and learn new skills, effectively bridging the gap between theoretical concepts and real-world implementation.

**GitHub**

[Cloud resume challenge frontend](https://github.com/kausicmn/cloud-resume-challenge-frontend),  [Cloud resume challenge backend](https://github.com/kausicmn/cloud-resume-challenge-backend)


[My Website](https://portfolio.kausicmn.com)

**Infrastructure Diagram**





![Infra](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2omlb34mu6fg1n4pi70g.png)

**The Challenge**   [link](https://cloudresumechallenge.dev/docs/the-challenge/aws/)

**1) Build your Website**

The first step of the challenge involved creating a professional website using HTML, CSS, and JavaScript. I utilized the Bootstrap framework to ensure an aesthetically pleasing design and smooth user experience.

**2) Deploy as a Static Website using Amazon S3, CloudFront and Route 53 (Frontend)**

Once my website was ready, the next phase involved deploying it using AWS S3. I uploaded the HTML, CSS, and JavaScript files to an Amazon S3 bucket. Subsequently, I established a CloudFront distribution and associated it with the S3 bucket. To ensure secure access, I carefully configured the S3 Bucket policy to grant CloudFront distribution the necessary permissions. I registered a domain name via Route 53 and employed AWS Certificate Manager to secure the domain with an SSL certificate. Lastly, I created an Alias record, linking it to the CloudFront distribution, thereby enabling easy and secure access to the website via the customized domain name.

**3) Implement Visitor counter using Lambda, DynamoDB, API Gateway (Backend)**

An essential feature of my website was a visitor counter, which I implemented using AWS Lambda, DynamoDB, and API Gateway. Firstly, I set up a DynamoDB table with a "count" field to track the number of visitors. Subsequently, I developed a Python-based Lambda function responsible for fetching and updating the content in the table. It was imperative to assign the appropriate role to the Lambda function to ensure seamless read and write access to the table. To facilitate interactions with the Lambda function, I created an HTTP API using API Gateway and configured it as a trigger for the Lambda function. Finally, I associated the API Gateway with a Route 53 record, enabling easy access to the API using the record's URL. Consequently, the visitor counter updated dynamically whenever the API is fetched from the Frontend, reflecting the number of visitors in real-time. 

**4) Infrastructure as Code**

Recognizing the importance of infrastructure automation, I decided to encapsulate the entire architecture within an Infrastructure as Code (IaC) framework. This proved to be a challenging yet rewarding experience, for which I utilized Terraform, a widely adopted IaC tool. By transforming my architecture into IaC, I gained profound insights into the working of Terraform and comprehended its significance in building and maintaining robust infrastructures. 

**5) Testing**

To ensure the reliability and correctness of the backend functionality, I developed unit tests using Python and the Mock library. These tests facilitated the evaluation of the Lambda function's behavior, including its ability to update the visitor count accurately using a mock DynamoDB table.

**6) CI/CD**

To streamline the development and deployment process, I used GitHub Actions for effective Continuous Integration and Deployment (CI/CD). I created separate repositories for the frontend and backend components and configured YAML files that triggered the desired actions. For the frontend, I integrated my AWS credentials, granting GitHub access to deploy the architecture, and automated the execution of Terraform files through GitHub Actions. Notably, since CloudFront was associated with the frontend, I incorporated cache invalidation to ensure seamless updates whenever new content was pushed to the repository. For the backend, I ran unit tests first and proceeded to execute Terraform files automatically, effectively enabling the backend's autonomous update using CI/CD.


Overall, I really loved this challenge as it helped me to get some experience with cloud infrastructure. So, if you're looking for a practical and engaging way to enhance your cloud career, I highly recommend taking up the Cloud Resume Challenge. It's a rewarding experience that can boost your confidence, showcase your skills, and open doors to exciting opportunities in the cloud industry.

Good luck, and happy cloud building!