In my journey to learn more about AWS and showcase my skills, I took on the Cloud Resume Challenge. The challenge involves creating a resume website that's not just static HTML but also incorporates AWS services for deployment, data storage, and dynamic functionality. Instead of using the commonly recommended AWS Serverless Application Model (SAM), I opted for Terraform to manage my infrastructure as code. In this blog post, I'll share my experience of completing the challenge using Terraform and the lessons I learned along the way.
I started setting up my resume website in HTML and added some basic CSS to style it. I used this template. I hosted the static website on an Amazon S3 bucket, ensuring that it was accessible via HTTPS using Amazon CloudFront.
Visitor Counter and DynamoDB
One of the exciting features of the challenge is implementing a visitor counter. To achieve this, I used AWS Lambda and Amazon DynamoDB. I wrote a Lambda function in Python that updates the visitor count in a DynamoDB table. The integration between Lambda and DynamoDB allowed me to easily manage the state of the counter.
API Gateway and Terraform
While many participants use AWS SAM for this challenge, I decided to take a different route by using Terraform for infrastructure management, which I feel more comfortable using. I defined my DynamoDB table, Lambda function, and API Gateway (Pretty much all the Backend, as required) using Terraform configurations. This approach allowed me to version control my infrastructure and ensure consistency.
Continuous Integration and Deployment (CI/CD)
Maintaining CI/CD pipelines is crucial for automated deployment and testing. I set up GitHub Actions for both the backend (Lambda, DynamoDB, and API Gateway) and frontend (S3) components of the project. Whenever I pushed updates to my GitHub repository, the CI/CD pipelines ran tests and automatically deployed changes to AWS.
Terraform: Using Terraform instead of AWS SAM was a learning experience. I gained a deeper understanding of managing infrastructure as code and gained proficiency in writing Terraform configurations.
Serverless Architecture: Building a serverless architecture with Lambda, DynamoDB, and API Gateway introduced me to the world of event-driven, scalable systems.
AWS Services: I became familiar with a range of AWS services, from S3 and CloudFront to DynamoDB and API Gateway.
Automation: Setting up CI/CD pipelines taught me the importance of automation, reducing manual intervention in deployment processes. GitHub Actions is awesome!
Completing the Cloud Resume Challenge using Terraform was both challenging and rewarding. It provided me with valuable hands-on experience with AWS services and infrastructure as code. Integrating Terraform into the challenge, proved my ability to adapt and learn new tools. As I move forward, I'll continue to explore and experiment with different technologies to enhance my skills and knowledge in cloud computing.
👩💻 Project Repository: https://github.com/faraguti/AWS-Cloud-Resume-Challenge