<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Muhammad Imran</title>
    <description>The latest articles on DEV Community by Muhammad Imran (@imran_khan_4d9e8007ad80af).</description>
    <link>https://dev.to/imran_khan_4d9e8007ad80af</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4181740%2F90b05791-9dee-4377-8c8f-add6e189dd3a.png</url>
      <title>DEV Community: Muhammad Imran</title>
      <link>https://dev.to/imran_khan_4d9e8007ad80af</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/imran_khan_4d9e8007ad80af"/>
    <language>en</language>
    <item>
      <title>Cloud Resume Challenge</title>
      <dc:creator>Muhammad Imran</dc:creator>
      <pubDate>Wed, 14 Oct 2026 17:37:10 +0000</pubDate>
      <link>https://dev.to/imran_khan_4d9e8007ad80af/cloud-resume-challenge-gak</link>
      <guid>https://dev.to/imran_khan_4d9e8007ad80af/cloud-resume-challenge-gak</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I wanted to use all the skills I learned during my time as an AWS consultant to build something useful. I decided to take on the Cloud Resume Challenge because it is a great introduction to building real projects with AWS serverless services.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Cloud Resume Challenge?
&lt;/h2&gt;

&lt;p&gt;The Cloud Resume Challenge is a practical, hands-on project created by Forrest Brazeal to help people break into cloud engineering. Rather than studying for another certification, you build and deploy a real application, which gives you something concrete to show employers.&lt;br&gt;
The aim is to build and host resume in the cloud, track how many people visit the site and display it to the end user. It also encourages use of Infrastructure as Code and CI/CD principles. For the AWS Challenge, the specification includes the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Certification&lt;/li&gt;
&lt;li&gt; HTML&lt;/li&gt;
&lt;li&gt; CSS&lt;/li&gt;
&lt;li&gt; Static Website&lt;/li&gt;
&lt;li&gt; HTTPS&lt;/li&gt;
&lt;li&gt; DNS (custom domain via Route 53)&lt;/li&gt;
&lt;li&gt; JavaScript&lt;/li&gt;
&lt;li&gt; Database (DynamoDB)&lt;/li&gt;
&lt;li&gt; API (API Gateway + Lambda)&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Tests&lt;/li&gt;
&lt;li&gt;Infrastructure as Code (Terraform)&lt;/li&gt;
&lt;li&gt;Source Control (GitHub)&lt;/li&gt;
&lt;li&gt;CI/CD (Backend)&lt;/li&gt;
&lt;li&gt;CI/CD (Frontend)&lt;/li&gt;
&lt;li&gt;Blog Post&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  My Cloud Resume Challenge Journey
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Stage 1: Build a basic resume website
&lt;/h4&gt;

&lt;p&gt;The first step was to create the website for my resume. I used HTML and CSS to build a clean, simple site with sections for my introduction, experience, skills, and certifications. I used HTML to structure the content and CSS to style the layout, fonts, and colours, keeping the design minimal so that the most important information is easy to find. I also made sure the page was responsive, so it displays well on both desktop and mobile screens. &lt;/p&gt;

&lt;h4&gt;
  
  
  Stage 2: Building the front end
&lt;/h4&gt;

&lt;p&gt;The first step in this stage is to set up an AWS S3 bucket to host my static website, which was simple enough after following the AWS documentation.&lt;br&gt;
Next, I set up Amazon CloudFront as my content delivery network. A CDN is a service that speeds up the delivery of web content by caching it at edge locations around the world. My site is just a simple HTML page, so I didn’t need it, but it gave me hands-on experience with CloudFront and made the site faster for visitors.&lt;br&gt;
I then bought a domain from AWS Route 53, which came with a hosted zone. After that, I used AWS Certificate Manager (ACM) to create a TLS certificate to enable HTTPS for my custom domain. A few simple DNS changes later, my website was finally in the cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zy8w57zd4nqk3izb519.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zy8w57zd4nqk3izb519.png" alt="Frontend" width="506" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Stage 3: Building the back end
&lt;/h4&gt;

&lt;p&gt;The first part was creating the database and I did that by creating a DynamoDB table. I got the DynamoDB table running and added one item to store my visitor counter.&lt;br&gt;
Then I created a Lambda function, written in Python, which increments the counter in DynamoDB by one every time it runs.&lt;br&gt;
Next, I created an API in AWS API Gateway and this was integrated with the Lambda function. When the API is invoked, it triggers the Lambda, which then increments the visitor counter value in the database.&lt;br&gt;
Finally, I took the API URL from API Gateway and added it to my resume website's JavaScript so the website calls the API each time it loads. I also configured CORS (Cross-Origin Resource Sharing) so the API accepts requests from my website’s domain. Seeing the visitor count update on my live site was a great way to tie all the pieces together.&lt;/p&gt;

&lt;p&gt;This was a good experience because I learned the fundamentals of a simple serverless application. I saw how a front end, an API, a function, and a database can work together without me managing a single server, and I now feel far more confident building and connecting AWS services. It also showed me how much of cloud engineering comes down to troubleshooting, whether that was permissions, CORS errors, or reading logs. I moved on to automating deployments using GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ifuhks84kv4ir6ndkn2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ifuhks84kv4ir6ndkn2.png" alt="Frontend + Backend" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Stage 4: Continuous Integration &amp;amp; Continuous Delivery (CI/CD)
&lt;/h4&gt;

&lt;p&gt;The final stage of the challenge was setting up CI/CD so my website deploys automatically whenever I make a change.&lt;br&gt;
I started by using OpenID Connect (OIDC) to establish trust between my GitHub repository and my AWS account. With OIDC, GitHub can access AWS using short-lived credentials, so there's no need to store an access key ID or secret access key in the repository. I followed the AWS Security Blog guide, Use IAM roles to connect GitHub Actions to actions in AWS, which walks through the setup securely.&lt;br&gt;
Next, I set my workflow to run whenever files in the &lt;code&gt;terraform/assets&lt;/code&gt; folder change, since that's where my website content lives. When the frontend changes, the workflow uploads the new files to my S3 bucket and then invalidates the CloudFront cache, so whenever a new request comes in it will fetch updated objects from AWS S3 so visitors see the latest version right away.&lt;br&gt;
This was my first time using GitHub Actions, and it showed me how much time automation can save. Now, every time I push a change, my website updates on its own, with no manual uploads and no long-lived credentials to manage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1iwu8ywyabk395e2jlk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff1iwu8ywyabk395e2jlk.png" alt="Adding CI/CD to my project" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Conclusion
&lt;/h5&gt;

&lt;p&gt;Overall, I found the challenge fun and engaging. I got to learn new AWS services and pick up tools as I needed them.&lt;br&gt;
Building the project end to end showed me how a serverless application fits together: a static front end on S3 and CloudFront, a Lambda function and API Gateway handling the logic, and DynamoDB storing the visitor count, all without managing a single server.&lt;br&gt;
If you’re thinking about taking on the Cloud Resume Challenge yourself, my advice is to start small, get each stage working before moving on, and treat every error as part of the learning. You’ll finish with a working project and a better understanding of how cloud applications are built.&lt;br&gt;
You can view my deployed site &lt;a href="https://muhammad-cloud-resume-challenge.com/" rel="noopener noreferrer"&gt;here &lt;/a&gt;and the GitHub repository &lt;a href="https://github.com/muhammad-organization-123/aws-cloud-resume-challenge" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>career</category>
      <category>cloud</category>
      <category>serverless</category>
    </item>
  </channel>
</rss>
