Skip to content

AWS Cloud Resume Home

Jonathan edited this page Feb 21, 2025 · 1 revision

AWS Cloud Resume Challenge

This project implements the AWS Cloud Resume Challenge, a project designed by Forrest Brazeal to demonstrate practical cloud skills and build a compelling portfolio piece. This challenge involves creating a serverless resume website hosted on AWS, incorporating various services like S3, CloudFront, API Gateway, Lambda, and DynamoDB.

Project Overview

The goal of this project is to create a fully functional and scalable online resume, following the specifications outlined in the Cloud Resume Challenge. This includes:

  • Frontend: A static website built with HTML, CSS, and JavaScript.
  • Storage: Hosting the static website on Amazon S3 (Simple Storage Service).
  • CDN: Distributing the website content via Amazon CloudFront (Content Delivery Network) for improved performance and reduced latency.
  • Backend: Implementing a serverless API using Amazon API Gateway and AWS Lambda.
  • Database: Storing a visitor counter in Amazon DynamoDB.
  • Infrastructure as Code (IaC): Managing and provisioning the AWS infrastructure using Terraform.
  • Continuous Integration/Continuous Deployment (CI/CD): Automating the deployment process using GitHub Actions.

Architecture

The architecture of this project is as follows:

  1. Users access the resume website through CloudFront.
  2. CloudFront retrieves the static website files from S3.
  3. The website's JavaScript code interacts with the API Gateway endpoint.
  4. API Gateway triggers the Lambda function.
  5. The Lambda function increments the visitor count in DynamoDB.
  6. The Lambda function returns the updated count to the website.
  7. The website displays the visitor count.
graph LR
    A[User] --> B[CloudFront]
    B --> C[S3]
    C --> B
    B --> D[API Gateway]
    D --> E[Lambda]
    E --> F[DynamoDB]
    F --> E
    E --> D
    D --> B
Loading

Implementation Details

  • Frontend: The frontend is a simple and clean resume website built using HTML, CSS, and JavaScript. It includes a section to display the visitor count, which is dynamically updated by the backend API.
  • Backend: The backend API is built using Python and AWS Lambda. It handles retrieving and updating the visitor count in DynamoDB. API Gateway acts as the entry point for the API.
  • Database: DynamoDB is used to store the visitor count, providing a scalable and cost-effective solution.
  • Infrastructure as Code: Terraform is used to define and manage the entire AWS infrastructure. This allows for reproducible deployments and easier management of the project. The Terraform code is located in the terraform directory.
  • CI/CD: GitHub Actions is used for CI/CD. Upon pushing changes to the repository, the workflow automatically builds the frontend, deploys the infrastructure using Terraform, and updates the CloudFront distribution. The workflow file is located in .github/workflows/deploy.yml.

Deployment

The project can be deployed using the following steps:

  1. Clone the repository: git clone https://github.com/MrGuato/AWS-Cloud-Challenge.git
  2. Configure AWS credentials.
  3. Navigate to the terraform directory: cd terraform
  4. Initialize Terraform: terraform init
  5. Plan the deployment: terraform plan
  6. Apply the deployment: terraform apply

Visitor Counter

The website displays a counter that tracks the number of visitors. This counter is updated every time the page is loaded, thanks to the backend API and DynamoDB.

Future Improvements

  • Implement proper error handling and logging.
  • Add more features to the resume website.
  • Improve the styling and design of the website.
  • Explore different CI/CD pipelines.
  • Add unit and integration tests.

Acknowledgements

  • Forrest Brazeal for creating the AWS Cloud Resume Challenge.
  • Jake Jarvis for creating and maintaining the jakejarvis/s3-sync-action GitHub Action.
  • Rashid YouTube tutorial: (https://www.youtube.com/@rishabincloud) for providing helpful guidance and instruction to start this journey!

Contact

  • GitHub: MrGuato
  • Blog: mrcyberleon.hashnode.dev