-
Notifications
You must be signed in to change notification settings - Fork 0
AWS Cloud Resume Home
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.
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.
The architecture of this project is as follows:
- Users access the resume website through CloudFront.
- CloudFront retrieves the static website files from S3.
- The website's JavaScript code interacts with the API Gateway endpoint.
- API Gateway triggers the Lambda function.
- The Lambda function increments the visitor count in DynamoDB.
- The Lambda function returns the updated count to the website.
- 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
- 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
terraformdirectory. -
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.
The project can be deployed using the following steps:
- Clone the repository:
git clone https://github.com/MrGuato/AWS-Cloud-Challenge.git - Configure AWS credentials.
- Navigate to the
terraformdirectory:cd terraform - Initialize Terraform:
terraform init - Plan the deployment:
terraform plan - Apply the deployment:
terraform apply
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.
- 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.
- Forrest Brazeal for creating the AWS Cloud Resume Challenge.
- Jake Jarvis for creating and maintaining the
jakejarvis/s3-sync-actionGitHub Action. - Rashid YouTube tutorial: (https://www.youtube.com/@rishabincloud) for providing helpful guidance and instruction to start this journey!
- GitHub: MrGuato
- Blog: mrcyberleon.hashnode.dev