<?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: rabie</title>
    <description>The latest articles on DEV Community by rabie (@rabeea2100).</description>
    <link>https://dev.to/rabeea2100</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3319855%2F25409bf7-1de3-4d05-9664-e3adb0704d4a.png</url>
      <title>DEV Community: rabie</title>
      <link>https://dev.to/rabeea2100</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rabeea2100"/>
    <language>en</language>
    <item>
      <title>I Built My Cloud Resume with Terraform, Amplify, Lambda &amp; API Gateway — Here's How</title>
      <dc:creator>rabie</dc:creator>
      <pubDate>Thu, 03 Jul 2025 15:15:11 +0000</pubDate>
      <link>https://dev.to/rabeea2100/i-built-my-cloud-resume-with-terraform-amplify-lambda-api-gateway-heres-how-4idd</link>
      <guid>https://dev.to/rabeea2100/i-built-my-cloud-resume-with-terraform-amplify-lambda-api-gateway-heres-how-4idd</guid>
      <description>&lt;p&gt;Hi Devs! 👋&lt;br&gt;
As part of leveling up my cloud skills and showcasing my portfolio, I completed the Cloud Resume Challenge — and automated the entire infrastructure using Terraform, AWS Amplify, Lambda, and API Gateway. Here's the journey, the stack, and what I learned.&lt;/p&gt;

&lt;p&gt;🎯 Project Goals&lt;br&gt;
✅ Host a static resume website&lt;/p&gt;

&lt;p&gt;✅ Add a dynamic visitor counter using a serverless backend&lt;/p&gt;

&lt;p&gt;✅ Deploy everything as code&lt;/p&gt;

&lt;p&gt;✅ Automate deployment with CI/CD&lt;/p&gt;

&lt;p&gt;✅ Add a custom domain using Route 53&lt;/p&gt;

&lt;p&gt;🔧 Tech Stack&lt;br&gt;
Component   Service / Tool&lt;br&gt;
Frontend    HTML, CSS, JavaScript via AWS Amplify&lt;br&gt;
Backend AWS Lambda (Python) + API Gateway&lt;br&gt;
Database    AWS DynamoDB&lt;br&gt;
Infra as Code   Terraform&lt;br&gt;
CI/CD   Jenkins&lt;/p&gt;

&lt;p&gt;🧱 Architecture Overview&lt;br&gt;
[ Amplify (HTML/CSS/JS) ]&lt;br&gt;
           |&lt;br&gt;
     [ API Gateway ]&lt;br&gt;
           |&lt;br&gt;
     [ Lambda (Python) ]&lt;br&gt;
           |&lt;br&gt;
     [ DynamoDB Table ]&lt;/p&gt;

&lt;p&gt;I used the front end from &lt;a href="https://github.com/Micahs0Day/CloudResumeChallenge_Frontend" rel="noopener noreferrer"&gt;frontend&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The frontend is hosted on AWS Amplify.&lt;/p&gt;

&lt;p&gt;A Lambda function (written in Python) updates a visitor count in DynamoDB.&lt;/p&gt;

&lt;p&gt;The API Gateway serves as the public endpoint for the frontend to call the Lambda.&lt;/p&gt;

&lt;p&gt;All infrastructure is defined using Terraform and deployed via Jenkins.&lt;br&gt;
Note: The project is ready to be fully run by Terraform alone&lt;/p&gt;

&lt;p&gt;⚙️ CI/CD Automation&lt;br&gt;
I configured a local Jenkins server to deploy both the frontend and backend automatically:&lt;/p&gt;

&lt;p&gt;Terraform deploys the backend (Lambda, API Gateway, DynamoDB, etc.).&lt;/p&gt;

&lt;p&gt;The output API Gateway URL is passed directly to Amplify using build-time environment variables.&lt;/p&gt;

&lt;p&gt;This avoids hardcoding API URLs and keeps everything dynamic and reusable.&lt;/p&gt;

&lt;p&gt;🌐 Custom Domain + CORS&lt;br&gt;
I registered a free domain on &lt;a href="https://github.com/DigitalPlatDev/FreeDomain" rel="noopener noreferrer"&gt;DigitalPlatDev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;hosted it on route 53 (0.5$/month)&lt;/p&gt;

&lt;p&gt;I used Route 53 to configure my custom domain.&lt;/p&gt;

&lt;p&gt;To make frontend-backend communication seamless, I added CORS configuration directly in the Lambda URL and API Gateway.&lt;/p&gt;

&lt;p&gt;I debugged CORS issues using browser dev tools and made sure requests worked cross-origin.&lt;/p&gt;

&lt;p&gt;🧠 What I Learned&lt;br&gt;
Deep dive into AWS Amplify for static hosting and CI/CD.&lt;/p&gt;

&lt;p&gt;Building and deploying serverless applications with Python Lambda.&lt;/p&gt;

&lt;p&gt;Understanding how API Gateway integrates with Lambda.&lt;/p&gt;

&lt;p&gt;Using Terraform to manage backend as code — repeatable and version-controlled.&lt;/p&gt;

&lt;p&gt;Managing CORS headers and debugging with browser tools.&lt;/p&gt;

&lt;p&gt;Tying everything together into a fully automated DevOps workflow.&lt;/p&gt;

&lt;p&gt;📂 Repos&lt;br&gt;
🔗 &lt;a href="https://github.com/rabie01/CloudResumeChallenge_Frontend" rel="noopener noreferrer"&gt;Frontend (Amplify)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/rabie01/CloudResumeChallenge_Infra_with_Amplify" rel="noopener noreferrer"&gt;Infrastructure &amp;amp; Backend (Terraform + Lambda)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 Let’s Connect!&lt;br&gt;
If you’re working on similar projects or hiring for DevOps/cloud roles, I’d love to connect!&lt;/p&gt;

&lt;p&gt;🧑‍💻 &lt;a href="https://github.com/rabie01" rel="noopener noreferrer"&gt;My GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://myresume.rabietech.dpdns.org/" rel="noopener noreferrer"&gt;My Resume Site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💼 &lt;a href="https://www.linkedin.com/in/rabiemohamed/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
