<?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: Alao Abdul-zahir</title>
    <description>The latest articles on DEV Community by Alao Abdul-zahir (@alao_abdulzahir).</description>
    <link>https://dev.to/alao_abdulzahir</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%2F1655327%2F81942c29-45e1-495c-9a63-ce32ec19eb18.jpg</url>
      <title>DEV Community: Alao Abdul-zahir</title>
      <link>https://dev.to/alao_abdulzahir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alao_abdulzahir"/>
    <language>en</language>
    <item>
      <title>🚀 Building a Multi-Environment, Auto-Scaling Web Platform with Terraform</title>
      <dc:creator>Alao Abdul-zahir</dc:creator>
      <pubDate>Fri, 29 Aug 2025 23:29:38 +0000</pubDate>
      <link>https://dev.to/alao_abdulzahir/terraform-webpost-28em</link>
      <guid>https://dev.to/alao_abdulzahir/terraform-webpost-28em</guid>
      <description>&lt;p&gt;Managing cloud infrastructure by hand can be messy, especially when juggling multiple environments like &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;staging&lt;/code&gt;, and &lt;code&gt;prod&lt;/code&gt;. That’s where &lt;strong&gt;Terraform&lt;/strong&gt; shines – it lets you define your infrastructure as code, making your deployments consistent, repeatable, and version-controlled.  &lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through building a &lt;strong&gt;production-ready web application infrastructure&lt;/strong&gt; on AWS using Terraform. We’ll cover:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔹 Multi-environment setup (&lt;code&gt;dev&lt;/code&gt; &amp;amp; &lt;code&gt;prod&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;🔹 VPC with public/private subnets
&lt;/li&gt;
&lt;li&gt;🔹 Auto Scaling Group with EC2 instances
&lt;/li&gt;
&lt;li&gt;🔹 RDS database layer
&lt;/li&gt;
&lt;li&gt;🔹 Secure backend state management
&lt;/li&gt;
&lt;li&gt;🔹 Secrets scanning with &lt;code&gt;git-secrets&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏗️ Project Overview
&lt;/h2&gt;

&lt;p&gt;We’re building a simple yet scalable platform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   ↓
Application Load Balancer (ALB)
   ↓
Auto Scaling Group (EC2 Instances)
   ↓
RDS Database (MySQL)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup ensures high availability, cost optimization, and easy environment promotion (from dev to prod).  &lt;/p&gt;




&lt;h2&gt;
  
  
  📂 Project Structure
&lt;/h2&gt;

&lt;p&gt;We organize Terraform code using &lt;strong&gt;modules&lt;/strong&gt; for reusability:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform-web-platform/
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   └── terraform.tfvars
│   └── prod/
│       ├── main.tf
│       └── terraform.tfvars
├── modules/
│   ├── networking/
│   ├── compute/
│   ├── database/
│   └── monitoring/
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔑 Key Features
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Multi-Environment Setup&lt;/strong&gt; – Each environment has its own state and variables.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Terraform Modules&lt;/strong&gt; – Networking, compute, database, and monitoring are modularized.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Secure State Management&lt;/strong&gt; – Remote state stored in S3 with DynamoDB locking.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Auto Scaling&lt;/strong&gt; – EC2 instances scale based on CPU utilization.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Monitoring&lt;/strong&gt; – CloudWatch metrics and alarms for visibility.  &lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ Setup Instructions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Clone the Repo
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/pojava/terraform-web-platform.git
&lt;span class="nb"&gt;cd &lt;/span&gt;terraform-web-platform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configure AWS Credentials
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Provide your &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt;, &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt;, region, and output format.  &lt;/p&gt;


&lt;h3&gt;
  
  
  3. Initialize and Apply Terraform
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;environments/dev
terraform init
terraform plan
terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To deploy to production:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../prod
terraform init
terraform plan
terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. Check the Load Balancer
&lt;/h3&gt;

&lt;p&gt;Once deployed, Terraform outputs the ALB DNS. Visit it in your browser to verify your app is live.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🔒 Security Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Hardcoded Secrets:&lt;/strong&gt; All sensitive values are managed through environment variables or AWS Secrets Manager.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;git-secrets&lt;/code&gt; Installed:&lt;/strong&gt; Prevents accidentally committing API keys.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.gitignore&lt;/code&gt; Applied:&lt;/strong&gt; Ignores Terraform state and provider files.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧹 Cleaning Up
&lt;/h2&gt;

&lt;p&gt;When you’re done testing, destroy resources to avoid costs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📝 Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;strong&gt;Terraform modules&lt;/strong&gt; keeps your code DRY and maintainable.
&lt;/li&gt;
&lt;li&gt;Remote state locking prevents accidental overwrites during team deployments.
&lt;/li&gt;
&lt;li&gt;AWS Auto Scaling ensures your application stays resilient without overspending.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔗 Useful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs" rel="noopener noreferrer"&gt;Terraform AWS Provider Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.hashicorp.com/terraform/language/modules" rel="noopener noreferrer"&gt;Terraform Modules Guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/architecture/well-architected/" rel="noopener noreferrer"&gt;AWS Well-Architected Framework&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🚀 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;This project shows how to go from &lt;strong&gt;zero to a production-ready, auto-scaling infrastructure&lt;/strong&gt; using Terraform. By structuring code with modules and managing state securely, scaling your app becomes a breeze.  &lt;/p&gt;

&lt;p&gt;If you found this useful, ⭐️ the repo and drop a comment on Dev.to!  &lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/pojava/terraform-web-platform" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>terraform</category>
      <category>infrastructureascode</category>
      <category>devops</category>
    </item>
    <item>
      <title>Deploying a Live Netlify Site with Deploying a Live Netlify Site with Terraform + HCP Terraform Remote State</title>
      <dc:creator>Alao Abdul-zahir</dc:creator>
      <pubDate>Fri, 22 Aug 2025 22:27:22 +0000</pubDate>
      <link>https://dev.to/alao_abdulzahir/deploying-a-live-netlify-site-with-deploying-a-live-netlify-site-with-terraform-hcp-terraform-2fh</link>
      <guid>https://dev.to/alao_abdulzahir/deploying-a-live-netlify-site-with-deploying-a-live-netlify-site-with-terraform-hcp-terraform-2fh</guid>
      <description>&lt;h2&gt;
  
  
  🔹 The Idea: Simplicity + Reproducibility
&lt;/h2&gt;

&lt;p&gt;Instead of manually spinning up a Netlify project, I wanted a &lt;strong&gt;fully automated pipeline&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Terraform provisions everything&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates a GitHub repo for the static site.&lt;/li&gt;
&lt;li&gt;Configures Netlify hosting.&lt;/li&gt;
&lt;li&gt;Manages infrastructure and state remotely in HCP Terraform.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Push changes to GitHub → Netlify auto-deploys&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This setup means anyone can clone the Terraform code, set a few variables, and spin up their own live site—&lt;strong&gt;no manual clicks in the UI&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Architecture Overview
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Terraform&lt;/strong&gt;: Core IaC engine, manages all resources declaratively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HCP Terraform (Terraform Cloud)&lt;/strong&gt;: Stores remote Terraform state, ensuring collaboration and state locking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: Hosts both the Terraform code and the deployed static site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Netlify&lt;/strong&gt;: Automatically builds and serves the site from GitHub.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terraform Code → HCP Terraform (remote state) → GitHub Repo → Netlify → Live Site
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Live Site: &lt;a href="https://curious-pasca-da123e.netlify.app/" rel="noopener noreferrer"&gt;https://curious-pasca-da123e.netlify.app/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Why It’s Unique
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No manual configuration&lt;/strong&gt;: Terraform does the heavy lifting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Secure Secrets Management&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Netlify tokens stored as sensitive HCP workspace variables, not in the repo.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Re-runnable&lt;/strong&gt;: Run &lt;code&gt;terraform init/plan/apply&lt;/code&gt; with fresh creds, and everything just works.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Step-by-Step Setup
&lt;/h2&gt;

&lt;p&gt;Here’s the high-level setup (full code is in the repo, not here):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Terraform CLI installed&lt;/li&gt;
&lt;li&gt;Netlify &amp;amp; GitHub accounts&lt;/li&gt;
&lt;li&gt;HCP Terraform org + workspace (CLI-driven)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;HCP Terraform Remote Backend&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;terraform { cloud { organization = "your-org" ... } }&lt;/code&gt; block points Terraform to HCP.&lt;/li&gt;
&lt;li&gt;State stored remotely, enabling team collaboration.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Secrets in HCP Workspace&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;github_token&lt;/code&gt; and &lt;code&gt;netlify_token&lt;/code&gt; set as sensitive variables in the workspace.&lt;/li&gt;
&lt;li&gt;No secrets are ever committed.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Terraform Code&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Declares:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub repo for the site.&lt;/li&gt;
&lt;li&gt;Netlify site linked to that repo.&lt;/li&gt;
&lt;li&gt;Simple HTML page and &lt;code&gt;netlify.toml&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   terraform init
   terraform plan
   terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Terraform provisions the repo, uploads files, links Netlify, and your site is live instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terraform + Netlify is underrated&lt;/strong&gt;: You can treat front-end hosting as IaC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HCP Terraform simplifies collaboration&lt;/strong&gt;: State locking and workspace variables make teamwork painless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small IaC projects are great for practice&lt;/strong&gt;: Even a static site helps you practice production-grade workflows.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improve the site design and make it dynamic with environment variables via Terraform.&lt;/li&gt;
&lt;li&gt;Explore integrating GitHub Actions for CI/CD to trigger Terraform runs.&lt;/li&gt;
&lt;li&gt;Scale this pattern to multi-env (staging/prod) setups.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🌍 &lt;strong&gt;Live Site&lt;/strong&gt;: &lt;a href="https://curious-pasca-da123e.netlify.app/" rel="noopener noreferrer"&gt;https://curious-pasca-da123e.netlify.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📂 &lt;strong&gt;Terraform Repo&lt;/strong&gt;: &lt;a href="https://github.com/pojava/hcp-netlify-terraform" rel="noopener noreferrer"&gt;https://github.com/pojava/hcp-netlify-terraform&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Thanks &amp;amp; Tagging
&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;strong&gt;HashiCorp User Group (HUG) Ibadan&lt;/strong&gt; for the challenge!&lt;br&gt;
📌 Tagging: &lt;a href="https://www.linkedin.com/company/hug-ibadan" rel="noopener noreferrer"&gt;HUG Ibadan LinkedIn Page&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;💡 This post shows how easy it is to use Terraform to automate &lt;strong&gt;frontend hosting&lt;/strong&gt; as if it were backend infra.&lt;br&gt;
Would love feedback from the community—how would you extend this setup?&lt;/p&gt;




</description>
    </item>
    <item>
      <title>Serverless Computing: Building a Number Classification API with AWS Lambda and API Gateway</title>
      <dc:creator>Alao Abdul-zahir</dc:creator>
      <pubDate>Fri, 07 Feb 2025 23:09:59 +0000</pubDate>
      <link>https://dev.to/alao_abdulzahir/serverless-computing-building-a-number-classification-api-with-aws-lambda-and-api-gateway-13m2</link>
      <guid>https://dev.to/alao_abdulzahir/serverless-computing-building-a-number-classification-api-with-aws-lambda-and-api-gateway-13m2</guid>
      <description>&lt;p&gt;Serverless computing has revolutionized the way applications are developed and deployed by eliminating the need for traditional server management. This post explores the creation of a &lt;strong&gt;Number Classification API&lt;/strong&gt; using &lt;strong&gt;AWS Lambda&lt;/strong&gt; and &lt;strong&gt;API Gateway&lt;/strong&gt;, a robust combination for building highly scalable and cost-effective serverless APIs.&lt;/p&gt;

&lt;p&gt;The API is capable of returning mathematical properties for any given number, such as whether it’s a prime, perfect, or Armstrong number, along with other properties and a fun fact.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why Serverless Computing?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Serverless architecture offers several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Automatically handles request scaling without manual intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency:&lt;/strong&gt; Pay only for the actual usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on Development:&lt;/strong&gt; Eliminate server maintenance and infrastructure concerns.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Solution Overview&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Number Classification API&lt;/strong&gt; performs the following tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Accepts a number via an HTTP GET request.&lt;/li&gt;
&lt;li&gt;Determines whether the number is prime, perfect, or Armstrong.&lt;/li&gt;
&lt;li&gt;Computes the sum of its digits.&lt;/li&gt;
&lt;li&gt;Fetches an interesting mathematical fact using an external numbers API.&lt;/li&gt;
&lt;li&gt;Returns a well-structured JSON response.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture&lt;/strong&gt;
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fzivdh5w8mdgx5qknexri.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.amazonaws.com%2Fuploads%2Farticles%2Fzivdh5w8mdgx5qknexri.png" alt="Image description" width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User Request:&lt;/strong&gt; A client (browser or app) sends a number to the API via an HTTP GET request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Gateway:&lt;/strong&gt; Serves as the entry point, invoking the AWS Lambda function.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Lambda:&lt;/strong&gt; Executes the number classification logic and fetches fun facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External Numbers API:&lt;/strong&gt; Provides mathematical trivia for the input number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response:&lt;/strong&gt; The Lambda function returns a JSON response containing the computed results.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step-by-Step Implementation&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Create the Lambda Function&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;AWS Lambda Console&lt;/strong&gt; and create a new function.&lt;/li&gt;
&lt;li&gt;Choose "Author from Scratch" and select Python as the runtime.&lt;/li&gt;
&lt;li&gt;Upload the following Lambda code to the function:&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Lambda Function Code&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urllib.request&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify_number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;is_prime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;is_prime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="n"&gt;is_perfect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;

    &lt;span class="n"&gt;digits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="n"&gt;is_armstrong&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;
    &lt;span class="n"&gt;digit_sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;properties&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;is_armstrong&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;armstrong&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;even&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;odd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;is_perfect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;digit_sum&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_fun_fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://example.com/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/math&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# External API placeholder
&lt;/span&gt;        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unable to fetch fun fact at the moment.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;queryStringParameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;is_perfect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;digit_sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;classify_number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;fun_fact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_fun_fact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_prime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_perfect&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;is_perfect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;digit_sum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;digit_sum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fun_fact&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fun_fact&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;except &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;KeyError&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;queryStringParameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invalid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Set Up API Gateway&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;API Gateway Console&lt;/strong&gt; and create a new API.&lt;/li&gt;
&lt;li&gt;Connect it to the Lambda function using &lt;strong&gt;Lambda Proxy Integration&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Deploy the API and obtain the endpoint URL.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;CORS (Cross-Origin Resource Sharing)&lt;/strong&gt; for public access.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Testing the API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To test the API, use tools like &lt;strong&gt;Postman&lt;/strong&gt; or simply visit the API URL in your browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example Request (Placeholder)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://example-api-url.com/classify-number?number=371
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Example Successful Response (200 OK)&lt;/strong&gt;
&lt;/h3&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.amazonaws.com%2Fuploads%2Farticles%2Fi0bqtil16eoidmyo5cmz.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.amazonaws.com%2Fuploads%2Farticles%2Fi0bqtil16eoidmyo5cmz.png" alt="Image description" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Error Response (400 Bad Request)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"invalid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;ul&gt;
&lt;li&gt;The project code is publicly available on &lt;a href="https://github.com/pojava/Number_Classification_API" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Serverless computing allows developers to focus on building applications without worrying about infrastructure. By integrating AWS Lambda and API Gateway, a reliable and scalable &lt;strong&gt;Number Classification API&lt;/strong&gt; was successfully built and deployed. This approach showcases the efficiency and versatility of serverless architecture for real-world applications.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Experience Setting Up NGINX on Ubuntu in AWS – HNG DevOps Stage 0</title>
      <dc:creator>Alao Abdul-zahir</dc:creator>
      <pubDate>Tue, 04 Feb 2025 23:04:34 +0000</pubDate>
      <link>https://dev.to/alao_abdulzahir/my-experience-setting-up-nginx-on-ubuntu-in-aws-hng-devops-stage-0-2164</link>
      <guid>https://dev.to/alao_abdulzahir/my-experience-setting-up-nginx-on-ubuntu-in-aws-hng-devops-stage-0-2164</guid>
      <description>&lt;p&gt;&lt;strong&gt;NGINX Web Server Setup on Ubuntu EC2 Instance&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
As part of my DevOps Stage 0 task, I set up an NGINX web server on an Ubuntu EC2 instance in AWS to serve a custom HTML page. This project allowed me to revisit foundational DevOps practices and cloud infrastructure management.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Launch an EC2 Instance:
&lt;/h3&gt;

&lt;p&gt;I created an Ubuntu 24.04 instance using the t2.micro type and configured security groups to allow SSH (port 22) and HTTP (port 80) traffic.&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fgxm1np83gx7j5fl30g6h.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.amazonaws.com%2Fuploads%2Farticles%2Fgxm1np83gx7j5fl30g6h.png" alt="Image description" width="800" height="79"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Connecting and Setting Up:
&lt;/h3&gt;

&lt;p&gt;After connecting via SSH with the &lt;code&gt;.pem&lt;/code&gt; key, I updated the package list and installed NGINX with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I started and enabled NGINX to run on boot with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start nginx
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Configuring the Custom HTML Page:
&lt;/h3&gt;

&lt;p&gt;I replaced the default page by editing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/var/www/html/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with my custom message and restarted NGINX to apply the changes:&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.amazonaws.com%2Fuploads%2Farticles%2Fjnws2cudvr3ydrflo9k4.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.amazonaws.com%2Fuploads%2Farticles%2Fjnws2cudvr3ydrflo9k4.png" alt="Image description" width="533" height="205"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Testing the Setup:
&lt;/h3&gt;

&lt;p&gt;I accessed the server via its public IP and verified that the page loaded correctly in a browser.&lt;/p&gt;

&lt;h2&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.amazonaws.com%2Fuploads%2Farticles%2F5mhnot9o2w5whu441t3n.png" alt="Image description" width="800" height="449"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Insights and Challenges:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Infrastructure&lt;/strong&gt;: Launching EC2 instances and configuring security groups enhanced my understanding of cloud computing basics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux Administration&lt;/strong&gt;: Navigating Ubuntu and managing NGINX solidified my skills in Linux server management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking&lt;/strong&gt;: Understanding how security groups and firewalls work in cloud platforms was key to resolving issues with HTTP traffic access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges Encountered:
&lt;/h3&gt;

&lt;p&gt;I initially faced issues accessing the page via the public IP due to incorrect inbound traffic configuration. Once I allowed HTTP traffic on port 80, the problem was resolved.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion:
&lt;/h3&gt;

&lt;p&gt;This task was foundational for cloud infrastructure, web server configuration, and Linux system management. It’s a critical skill for any DevOps engineer and has prepared me for more advanced topics such as automation and multi-region deployments.&lt;/p&gt;




&lt;h3&gt;
  
  
  References:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/devops-engineers" rel="noopener noreferrer"&gt;DevOps Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/cloud-engineers" rel="noopener noreferrer"&gt;Cloud Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/site-reliability-engineers" rel="noopener noreferrer"&gt;Site Reliability Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/platform-engineers" rel="noopener noreferrer"&gt;Platform Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/infrastructure-engineers" rel="noopener noreferrer"&gt;Infrastructure Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/kubernetes-specialists" rel="noopener noreferrer"&gt;Kubernetes Specialists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/aws-solutions-architects" rel="noopener noreferrer"&gt;AWS Solutions Architects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/azure-devops-engineers" rel="noopener noreferrer"&gt;Azure DevOps Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/google-cloud-engineers" rel="noopener noreferrer"&gt;Google Cloud Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/ci-cd-pipeline-engineers" rel="noopener noreferrer"&gt;CI/CD Pipeline Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/monitoring-observability-engineers" rel="noopener noreferrer"&gt;Monitoring/Observability Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/automation-engineers" rel="noopener noreferrer"&gt;Automation Engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/docker-specialists" rel="noopener noreferrer"&gt;Docker Specialists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/linux-developers" rel="noopener noreferrer"&gt;Linux Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hng.tech/hire/postgresql-developers" rel="noopener noreferrer"&gt;PostgreSQL Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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