Taking on the Cloud-Resume-Challenge: My Experience
Published: 2023-05-16 21:53:56

**Inspiration**
I recently stumbled across the Cloud-Resume-Challenge and thought to myself, “That looks like a fun and useful little project I can do to learn and play in the cloud!” After doing some research, I found all the information I needed on the challenge’s website and began planning my approach.

I had previously created a “Secure Static Website on AWS” using only the AWS console as a tutorial for my YouTube channel, @cloudoptimized. However, for this challenge, I wanted to do as much of it as possible in “Infrastructure as Code” (IaC).

The Cloud-Resume-Challenge has several components, including certifications, HTML, CSS, a static website, HTTPS, DNS, JavaScript, a database, an API, testing, IaC, source control, and CI/CD. I will describe how I approached each component of the challenge.

**Certifications**

Prior to finding this challenge, I had obtained the following certifications: AWS Certified Cloud Practitioner, AWS Certified SysOps Administrator — Associate, AWS Certified Solutions Architect — Associate, and Microsoft Certified Azure Fundamentals. These certifications provide a solid foundation for cloud computing and will be useful in my future career.

**HTML and CSS**

For my HTML and CSS, I used a free sample site template from HTML5UP. They have some amazing offerings 100% free under their creative commons. I modified the template to create a basic configuration resume.

**Static Website**

I created a fully responsive static [portfolio](warnerbell.com) website using AWS S3. I used AWS CLI, CloudFormation, and AWS CDK to automate the deployment of the website. The FQDN was registered using AWS ACM, and the site was hosted on AWS S3. I followed the structure laid out by the Cloud-Resume-Challenge as much as possible.

**HTTPS**

To ensure the website’s security, I obtained an SSL/TLS certificate from AWS Certificate Manager (ACM). ACM is a service that lets you easily provision, manage, and deploy public and private Secure Sockets Layer/Transport Layer Security (SSL/TLS) certificates for use with AWS services and your internal connected resources.

**DNS**

I used Route53 hosted zones to create DNS records that alias to a CloudFront distribution and CNAMEs for the certificate. Route 53 is a highly available and scalable Domain Name System (DNS) web service. It connects user requests to internet applications running on AWS or on-premises.

**JavaScript**

I used JavaScript to code the visits counter for the cloud portfolio frontend. JavaScript is a scripting or programming language that allows you to implement complex features on web pages. Every time a web page does more than just sit there and display static information, JavaScript is involved.

**Database**

I used AWS DynamoDB as the database for the site’s visits counter. DynamoDB is a fully managed NoSQL database service that provides fast and predictable performance with seamless scalability. It lets you offload the administrative burdens of operating and scaling a distributed database, so you don’t have to worry about hardware provisioning, setup and configuration, replication, software patching, or cluster scaling.

**API**

For the API requirement of the challenge, I used Lambda URL. A function URL is a dedicated HTTP(S) endpoint for your Lambda function. You can create and configure a function URL through the Lambda console or the Lambda API. When you create a function URL, Lambda automatically generates a unique URL endpoint for you. Once you create a function URL, its URL endpoint never changes.

**Python**

The code for the Lambda function, which retrieves and updates the views in the DynamoDB database, was written in Python. Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built-in data structures, combined with dynamic typing and dynamic binding, make it very attractive.

**Tests**

During and after completing the build process, I deployed my website and began testing its functionality. I tested each component of the website to ensure that it was working as intended and that there were no errors or bugs. I also ran load tests to ensure that my website was able to handle high levels of traffic.

**Infrastructure as Code**

To manage and provision infrastructure more efficiently, I’m building CloudFormation templates for key components of the site and writing bash scripts to deploy them. Additionally, for small deployments and testing, I plan to use either AWS CDK or AWS SAM. This approach is known as Infrastructure as Code (IaC), which involves managing infrastructure through code rather than through manual processes. By using IaC, I can more easily manage and maintain my infrastructure and ensure that any changes are properly versioned and documented.

**Source Control**

For source control, I chose [GitHub](https://github.com/Warner-Bell), an Internet hosting service for software development and version control using Git. GitHub provides a distributed version control of Git as well as access control, bug tracking, software feature requests, task management, continuous integration, and wikis for every project. By using GitHub, I can easily collaborate with others and keep track of changes to my codebase over time. Additionally, GitHub’s built-in tools for issue tracking and task management make it easy to keep track of bugs and feature requests.

**CI/CD (Back end)**

To streamline the development process, I decided to combine the continuous integration and continuous deployment (CI/CD) of both the front end and back end into one process using GitHub Actions. GitHub Actions allows me to automate, customize, and execute my software development workflows right in my repository. By using GitHub Actions, I can more easily build, test, and deploy my code and ensure that everything works as expected before pushing it to production.

**CI/CD (Front end)**

For the continuous integration and continuous deployment of my portfolio website’s front end, I’ll also be using GitHub Actions. By leveraging GitHub Actions, I can automate the process of building and deploying my front-end code, which will save me a lot of time and effort. I’ve written a GitHub .yaml file using Workflow syntax for GitHub Actions with a customization for security that will update my portfolio website upon push from the local repo. This approach will help me maintain a more efficient development workflow and ensure that my site stays up to date with the latest changes.

**Challenges**

One of the things that I found challenging during this project was getting the automation set up and configured properly. There were a lot of different components to configure, and it took some time to get everything working together. However, once I had everything set up, it was very easy to deploy and manage my website.

Overall, I found the Cloud Resume Challenge to be a fun and challenging project that helped me learn a lot about cloud infrastructure and web development. The challenge forced me to learn about a lot of different tools that I hadn’t used before, and it was rewarding to see everything come together into a fully functional website.

**End of The Day**

The Cloud Resume Challenge is a great way to learn about cloud infrastructure and web development. The challenge forces you to learn about a lot of different services and tools, and it provides a structured framework for building a fully functional website. While the project can be challenging at times, the end result is a rewarding and valuable learning experience. I highly recommend the Cloud Resume Challenge to anyone who is interested in learning more about cloud infrastructure and web development.