<?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: Chioma Nwosu</title>
    <description>The latest articles on DEV Community by Chioma Nwosu (@chioma_nwosu_99d57862fb18).</description>
    <link>https://dev.to/chioma_nwosu_99d57862fb18</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%2F2125625%2Fe8070b55-0c12-49a9-b588-dea0f052bec8.jpg</url>
      <title>DEV Community: Chioma Nwosu</title>
      <link>https://dev.to/chioma_nwosu_99d57862fb18</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chioma_nwosu_99d57862fb18"/>
    <language>en</language>
    <item>
      <title>From Silent Failures to Reliable Deployments: Building a Two-Tier AWS Architecture with Terraform</title>
      <dc:creator>Chioma Nwosu</dc:creator>
      <pubDate>Sat, 04 Apr 2026 02:20:03 +0000</pubDate>
      <link>https://dev.to/chioma_nwosu_99d57862fb18/from-silent-failures-to-reliable-deployments-building-a-two-tier-aws-architecture-with-terraform-1ifa</link>
      <guid>https://dev.to/chioma_nwosu_99d57862fb18/from-silent-failures-to-reliable-deployments-building-a-two-tier-aws-architecture-with-terraform-1ifa</guid>
      <description>&lt;p&gt;Deploying applications in the cloud is often presented as a straightforward process — provision infrastructure, deploy code, and everything works.&lt;/p&gt;

&lt;p&gt;In reality, things rarely go that smoothly.&lt;/p&gt;

&lt;p&gt;In this project, I built and deployed a two-tier web application on AWS using Terraform, automating everything from infrastructure provisioning to application setup. What made this experience truly valuable wasn’t just the final working system — it was the debugging journey that transformed a fragile deployment into a reliable one.&lt;/p&gt;

&lt;p&gt;Project Overview&lt;/p&gt;

&lt;p&gt;The goal was to deploy a full-stack application with:&lt;/p&gt;

&lt;p&gt;Frontend &amp;amp; Backend: Node.js app running on EC2&lt;br&gt;
Database: MySQL on Amazon RDS&lt;br&gt;
Infrastructure: Provisioned entirely with Terraform&lt;br&gt;
Automation: Bash user data script&lt;br&gt;
Architecture&lt;/p&gt;

&lt;p&gt;The system follows a classic two-tier architecture:&lt;/p&gt;

&lt;p&gt;EC2 (Public Subnet): Hosts the application&lt;br&gt;
RDS (Private Subnet): Stores application data&lt;br&gt;
VPC: Custom networking environment&lt;br&gt;
Security Groups: Control traffic between layers&lt;br&gt;
What I Built&lt;br&gt;
Custom VPC with public and private subnets&lt;br&gt;
Internet Gateway and route tables&lt;br&gt;
EC2 instance with automated setup&lt;br&gt;
RDS MySQL instance in private subnets&lt;br&gt;
Security groups enforcing least privilege&lt;br&gt;
Nginx reverse proxy configuration&lt;br&gt;
PM2 process management for Node.js&lt;/p&gt;

&lt;p&gt;All of this was provisioned using Terraform, ensuring repeatability and consistency.&lt;/p&gt;

&lt;p&gt;Automation with User Data&lt;/p&gt;

&lt;p&gt;To eliminate manual setup, I used a user data script to:&lt;/p&gt;

&lt;p&gt;Install dependencies (Node.js, Nginx, MySQL client)&lt;br&gt;
Clone the application repository&lt;br&gt;
Configure database connection dynamically&lt;br&gt;
Run database schema and seed scripts&lt;br&gt;
Start the application using PM2&lt;br&gt;
Configure Nginx as a reverse proxy&lt;/p&gt;

&lt;p&gt;This allowed the application to be fully configured on instance launch.&lt;/p&gt;

&lt;p&gt;The Challenges (Real Learning Begins Here)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Database Connection Failure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I encountered a SequelizeHostNotFoundError, which indicated that the application couldn’t resolve the RDS endpoint.&lt;/p&gt;

&lt;p&gt;Fix:&lt;/p&gt;

&lt;p&gt;Verified Terraform outputs&lt;br&gt;
Ensured correct database host configuration&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Broken Application Due to JSON Error&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The app crashed due to:&lt;/p&gt;

&lt;p&gt;Unexpected string in JSON&lt;/p&gt;

&lt;p&gt;Fix:&lt;/p&gt;

&lt;p&gt;Corrected formatting issues in the configuration file&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The “Working” System with No Data&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This was the most interesting issue.&lt;/p&gt;

&lt;p&gt;Tables were created successfully&lt;br&gt;
Application was running&lt;br&gt;
But the Book table was empty&lt;/p&gt;

&lt;p&gt;At first glance, everything looked correct.&lt;/p&gt;

&lt;p&gt;The Root Cause&lt;/p&gt;

&lt;p&gt;After deeper investigation, I discovered:&lt;/p&gt;

&lt;p&gt;The seed script for books was not executed because of a misnamed file:&lt;/p&gt;

&lt;p&gt;db/book_seed.sql   ❌&lt;br&gt;
db/books_seed.sql  ✅&lt;/p&gt;

&lt;p&gt;Because the user data script did not enforce failure, this error was silently ignored.&lt;/p&gt;

&lt;p&gt;Key Insight&lt;/p&gt;

&lt;p&gt;Automation without proper error handling can give a false sense of success.&lt;/p&gt;

&lt;p&gt;Fixing the Problem&lt;/p&gt;

&lt;p&gt;I implemented the following improvements:&lt;/p&gt;

&lt;p&gt;✅ Corrected File Reference&lt;/p&gt;

&lt;p&gt;Updated the script to point to the correct seed file.&lt;/p&gt;

&lt;p&gt;✅ Fail-Fast Mechanism&lt;/p&gt;

&lt;p&gt;Added:&lt;/p&gt;

&lt;p&gt;set -e&lt;/p&gt;

&lt;p&gt;This ensures the script stops immediately on failure.&lt;/p&gt;

&lt;p&gt;✅ Logging for Debugging&lt;/p&gt;

&lt;p&gt;Used:&lt;/p&gt;

&lt;p&gt;/var/log/cloud-init-output.log&lt;/p&gt;

&lt;p&gt;to trace execution and identify issues quickly.&lt;/p&gt;

&lt;p&gt;Final Result&lt;/p&gt;

&lt;p&gt;After fixing the issues and redeploying:&lt;/p&gt;

&lt;p&gt;Infrastructure provisioned successfully&lt;br&gt;
Application deployed automatically&lt;br&gt;
Database fully populated&lt;br&gt;
Application accessible via public IP&lt;br&gt;
System fully repeatable with Terraform&lt;br&gt;
Key Lessons Learned&lt;br&gt;
Small mistakes (like file names) can break automation&lt;br&gt;
Logs are essential for debugging cloud deployments&lt;br&gt;
Always design scripts to fail loudly, not silently&lt;br&gt;
Infrastructure as Code requires validation, not just execution&lt;br&gt;
Troubleshooting is a core DevOps skill&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;This project reinforced that DevOps is not just about automation — it’s about building reliable, observable, and maintainable systems.&lt;/p&gt;

&lt;p&gt;The difference between a beginner and an engineer isn’t avoiding errors — it’s understanding and fixing them effectively.&lt;/p&gt;

&lt;p&gt;What’s Next&lt;br&gt;
Adding CI/CD pipeline&lt;br&gt;
Implementing monitoring and alerting&lt;br&gt;
Improving deployment idempotency&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>aws</category>
      <category>infrastructureascode</category>
      <category>devops</category>
    </item>
    <item>
      <title>From Writing Terraform to Guiding AI: My Journey into Agentic DevOps with Claude Code</title>
      <dc:creator>Chioma Nwosu</dc:creator>
      <pubDate>Fri, 27 Mar 2026 18:31:19 +0000</pubDate>
      <link>https://dev.to/chioma_nwosu_99d57862fb18/from-writing-terraform-to-guiding-ai-my-journey-into-agentic-devops-with-claude-code-109</link>
      <guid>https://dev.to/chioma_nwosu_99d57862fb18/from-writing-terraform-to-guiding-ai-my-journey-into-agentic-devops-with-claude-code-109</guid>
      <description>&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%2Fjdqbpd167mqmqqplh3wj.jpg" 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%2Fjdqbpd167mqmqqplh3wj.jpg" alt="Ultimate Agentic Ai Cert." width="800" height="595"&gt;&lt;/a&gt;&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%2Fjf5nfotyua7ic0jac80g.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%2Fjf5nfotyua7ic0jac80g.png" alt="screenhot of claude.md" width="800" height="425"&gt;&lt;/a&gt;&lt;br&gt;
For a long time, I thought DevOps was just about writing scripts, managing infrastructure, and automating deployments.&lt;/p&gt;

&lt;p&gt;Then I discovered something that changed everything:&lt;/p&gt;

&lt;p&gt;👉 What if instead of just writing code, you could &lt;strong&gt;guide an AI to think like a DevOps engineer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s exactly what I explored while taking the &lt;em&gt;Ultimate Agentic AI DevOps with Claude Code&lt;/em&gt; course.&lt;/p&gt;

&lt;p&gt;And it completely reshaped how I approach building, deploying, and managing systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The Shift: From Tools to Agents
&lt;/h2&gt;

&lt;p&gt;Traditional DevOps is tool-driven:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terraform for infrastructure&lt;/li&gt;
&lt;li&gt;GitHub Actions for CI/CD&lt;/li&gt;
&lt;li&gt;Bash scripts for automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in this course, I learned something deeper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevOps is evolving from &lt;strong&gt;tool usage → agent orchestration&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of doing everything manually, I started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing workflows for AI agents&lt;/li&gt;
&lt;li&gt;Defining rules for how AI should behave&lt;/li&gt;
&lt;li&gt;Automating decision-making, not just execution&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 The Most Important Concept: Context is Everything
&lt;/h2&gt;

&lt;p&gt;The biggest lesson?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI is only as good as the context you give it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where &lt;strong&gt;CLAUDE.md&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;It’s not just a documentation file — it’s a &lt;strong&gt;control system for AI behaviour&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Inside &lt;code&gt;CLAUDE.md&lt;/code&gt;, I defined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project architecture&lt;/li&gt;
&lt;li&gt;Deployment workflows&lt;/li&gt;
&lt;li&gt;Engineering constraints&lt;/li&gt;
&lt;li&gt;Rules (like &lt;em&gt;no JavaScript frameworks allowed&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And something amazing happened.&lt;/p&gt;

&lt;p&gt;When I asked Claude to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Add a React component to the homepage”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It refused.&lt;/p&gt;

&lt;p&gt;Not because it couldn’t — but because it &lt;strong&gt;understood the rules of the system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That moment made one thing clear:&lt;/p&gt;

&lt;p&gt;👉 We’re no longer just writing code — we’re &lt;strong&gt;designing AI behaviour&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Building Real DevOps Workflows with AI
&lt;/h2&gt;

&lt;p&gt;This course wasn’t just theory — it was hands-on.&lt;/p&gt;

&lt;p&gt;I worked on:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Terraform Automation
&lt;/h3&gt;

&lt;p&gt;Using slash commands like:&lt;/p&gt;

&lt;p&gt;/tf-plan&lt;br&gt;
/tf-apply&lt;/p&gt;

&lt;p&gt;Claude could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate Terraform configurations&lt;/li&gt;
&lt;li&gt;Validate infrastructure changes&lt;/li&gt;
&lt;li&gt;Suggest improvements&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔹 GitHub Actions + OIDC
&lt;/h3&gt;

&lt;p&gt;I implemented secure CI/CD pipelines using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;OpenID Connect (OIDC)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This eliminated the need for &lt;strong&gt;long-lived AWS credentials&lt;/strong&gt;, making deployments more secure.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 AI Sub-Agents
&lt;/h3&gt;

&lt;p&gt;One of the most powerful concepts was creating &lt;strong&gt;specialised AI agents&lt;/strong&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security agent → checks for misconfigurations&lt;/li&gt;
&lt;li&gt;Cost optimisation agent → flags expensive resources&lt;/li&gt;
&lt;li&gt;Deployment agent → handles release workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This felt like building a &lt;strong&gt;DevOps team powered by AI&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 MCP Servers (Connecting AI to Real Infrastructure)
&lt;/h3&gt;

&lt;p&gt;I also explored &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; servers.&lt;/p&gt;

&lt;p&gt;This allows AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interact with real systems&lt;/li&gt;
&lt;li&gt;Fetch live data&lt;/li&gt;
&lt;li&gt;Execute meaningful DevOps tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of static responses, AI becomes &lt;strong&gt;environment-aware&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌍 Real Outcome: What I Built
&lt;/h2&gt;

&lt;p&gt;To apply everything I learned, I built and deployed:&lt;/p&gt;

&lt;p&gt;👉 A &lt;strong&gt;static portfolio website on AWS (S3 + CloudFront)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But this wasn’t just a basic deployment.&lt;/p&gt;

&lt;p&gt;I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted workflows&lt;/li&gt;
&lt;li&gt;Structured project context (&lt;code&gt;CLAUDE.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;DevOps best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result?&lt;/p&gt;

&lt;p&gt;A clean, scalable, and production-ready deployment powered by &lt;strong&gt;AI-guided engineering decisions&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Challenges I Faced
&lt;/h2&gt;

&lt;p&gt;This journey wasn’t without obstacles.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Struggled with &lt;strong&gt;MCP server connections&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Faced authentication and configuration issues&lt;/li&gt;
&lt;li&gt;Had to troubleshoot CLI environments and permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But these challenges helped me understand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DevOps isn’t about avoiding problems — it’s about &lt;strong&gt;solving them systematically&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💡 Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Here’s what stood out the most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI doesn’t replace engineers — it &lt;strong&gt;amplifies structured thinking&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Clear documentation is now a &lt;strong&gt;core engineering skill&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;DevOps is evolving into &lt;strong&gt;AI-assisted system design&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Security and guardrails are more important than ever&lt;/li&gt;
&lt;li&gt;The future is not just automation — it’s &lt;strong&gt;intelligent automation&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔮 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;We’re entering a new phase of software engineering.&lt;/p&gt;

&lt;p&gt;One where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t just write code&lt;/li&gt;
&lt;li&gt;You define rules, context, and intent&lt;/li&gt;
&lt;li&gt;And AI helps execute within those boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning how to guide AI effectively is becoming just as important as learning how to code.&lt;/p&gt;

&lt;p&gt;And for me, this course was the starting point of that journey.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Acknowledgment
&lt;/h2&gt;

&lt;p&gt;Big thanks to &lt;strong&gt;Pravin Mishra&lt;/strong&gt; for creating such a practical and forward-thinking course on Agentic DevOps.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 What’s Next?
&lt;/h2&gt;

&lt;p&gt;I’m continuing to explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced Terraform automation&lt;/li&gt;
&lt;li&gt;AI-driven infrastructure management&lt;/li&gt;
&lt;li&gt;Scalable cloud architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re also learning DevOps or exploring AI in engineering, let’s connect and grow together 🚀&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>claudecode</category>
      <category>terraform</category>
    </item>
    <item>
      <title>DMI DevOps Diary #1: From Fork to Pull Request 🚀</title>
      <dc:creator>Chioma Nwosu</dc:creator>
      <pubDate>Fri, 30 Jan 2026 23:03:16 +0000</pubDate>
      <link>https://dev.to/chioma_nwosu_99d57862fb18/dmi-devops-diary-1-from-fork-to-pull-request-28b7</link>
      <guid>https://dev.to/chioma_nwosu_99d57862fb18/dmi-devops-diary-1-from-fork-to-pull-request-28b7</guid>
      <description>&lt;p&gt;This post kicks off my DevOps Micro Internship (DMI) DevOps Diary — a series where I document my hands-on journey learning how real DevOps teams work in production-style environments.&lt;/p&gt;

&lt;p&gt;I’m starting with something foundational but often misunderstood open-source collaboration using Git and GitHub.&lt;br&gt;
What this first entry is about&lt;br&gt;
For this assignment, I didn’t build a feature or deploy an app. Instead, I focused on process— the same workflow engineers use daily when collaborating on shared codebases.&lt;/p&gt;

&lt;p&gt;Here’s what I worked through:&lt;/p&gt;

&lt;p&gt;Forked an upstream repository (no direct write access)&lt;br&gt;
 Cloned my fork locally&lt;br&gt;
 Configured &lt;code&gt;origin&lt;/code&gt; (my fork) and &lt;code&gt;upstream&lt;/code&gt; (original repo)&lt;br&gt;
 Created a feature branch instead of working on &lt;code&gt;main&lt;/code&gt;&lt;br&gt;
 Made a single, scoped documentation change&lt;br&gt;
 Synced with upstream to avoid conflicts&lt;br&gt;
 Opened a Pull Request back to upstream&lt;/p&gt;

&lt;p&gt;Small change. Real workflow.&lt;/p&gt;

&lt;p&gt;Why these matters in DevOps&lt;/p&gt;

&lt;p&gt;From a DevOps perspective, this wasn’t just about Git commands — it was about risk reduction and system safety:&lt;/p&gt;

&lt;p&gt;Forks protect shared repositories&lt;br&gt;
Feature branches isolate changes&lt;br&gt;
Clean commits simplify reviews&lt;br&gt;
Pull Requests enforce accountability&lt;/p&gt;

&lt;p&gt;These same principles show up later in infrastructure-as-code, CI/CD pipelines, and production deployments.&lt;/p&gt;

&lt;p&gt;What I learned&lt;/p&gt;

&lt;p&gt;Open-source contribution is structured and repeatable&lt;br&gt;
Collaboration skills are as important as technical skills&lt;br&gt;
Clean Git history is a professional signal, not a nice-to-have&lt;/p&gt;

&lt;p&gt;What’s coming next in the series&lt;/p&gt;

&lt;p&gt;This assignment lays the groundwork for what’s next in DMI:&lt;br&gt;
automation, deployment workflows, and production-level DevOps practices.&lt;/p&gt;

&lt;p&gt;Each diary entry will build on the last — moving from how teams collaborate to how systems are deployed, monitored, and maintained.&lt;/p&gt;

&lt;p&gt;🔗 GitHub fork for this entry:&lt;br&gt;
&lt;a href="https://github.com/Treasurematrix/devops-micro-internship-interviews" rel="noopener noreferrer"&gt;https://github.com/Treasurematrix/devops-micro-internship-interviews&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📖 Full walkthrough with screenshots:&lt;br&gt;&lt;br&gt;
&lt;a href="https://medium.com/@chiomanwosu2019/from-fork-to-pull-request-my-first-open-source-contribution-dmi-249fc80b4652" rel="noopener noreferrer"&gt;https://medium.com/@chiomanwosu2019/from-fork-to-pull-request-my-first-open-source-contribution-dmi-249fc80b4652&lt;/a&gt; &lt;/p&gt;

</description>
      <category>devops</category>
      <category>github</category>
      <category>opensource</category>
      <category>learning</category>
    </item>
    <item>
      <title># ☁️ Creating a Highly Available Environment on AWS (Multi-AZ Architecture)</title>
      <dc:creator>Chioma Nwosu</dc:creator>
      <pubDate>Fri, 31 Oct 2025 20:23:58 +0000</pubDate>
      <link>https://dev.to/chioma_nwosu_99d57862fb18/-creating-a-highly-available-environment-on-aws-multi-az-architecture-3ma8</link>
      <guid>https://dev.to/chioma_nwosu_99d57862fb18/-creating-a-highly-available-environment-on-aws-multi-az-architecture-3ma8</guid>
      <description>&lt;p&gt;Building applications that stay online during failures is a critical skill for any cloud engineer. In this hands-on project from the &lt;strong&gt;AWS Academy Cloud Architecting&lt;/strong&gt; programme, I redesigned a simple, single-instance setup into a &lt;strong&gt;fault-tolerant, highly available (HA)&lt;/strong&gt; architecture running across multiple AWS Availability Zones.&lt;/p&gt;

&lt;p&gt;This post breaks down the core components, how they work together, and what I learned along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ What I Built
&lt;/h2&gt;

&lt;p&gt;The goal was to transform a basic application into a &lt;strong&gt;multi-tier, multi-AZ&lt;/strong&gt; architecture capable of surviving instance or Availability Zone failures.&lt;/p&gt;

&lt;p&gt;The final environment included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VPC&lt;/strong&gt; with public &amp;amp; private subnets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application Load Balancer (ALB)&lt;/strong&gt; using two AZs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto Scaling Group&lt;/strong&gt; running EC2 instances across private subnets&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon RDS (Multi-AZ) MySQL database&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NAT Gateways&lt;/strong&gt; for secure outbound access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Groups&lt;/strong&gt; forming a strict 3-tier model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch&lt;/strong&gt; for health checks and monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup follows AWS best practices for reliability and security.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Key Architecture Components
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Application Load Balancer (ALB)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The ALB distributes traffic evenly across instances and performs continuous health checks.&lt;br&gt;
If an instance becomes unhealthy, the ALB automatically routes traffic to healthy ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. EC2 Auto Scaling Group&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I created an AMI of the base web server and used it in a &lt;strong&gt;launch template&lt;/strong&gt;.&lt;br&gt;
The ASG maintains &lt;strong&gt;two instances at all times&lt;/strong&gt; and replaces failed ones automatically — creating a self-healing system.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. RDS Multi-AZ&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Amazon RDS was upgraded to a Multi-AZ setup to provide automated failover.&lt;br&gt;
If the primary database fails, traffic is redirected to a standby instance seamlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Networking &amp;amp; Security&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The architecture uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public subnets → Load Balancer&lt;/li&gt;
&lt;li&gt;Private subnets → EC2 application servers&lt;/li&gt;
&lt;li&gt;Private DB subnets → RDS instance&lt;/li&gt;
&lt;li&gt;NAT Gateways → Secure outbound traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security groups enforce strict “layer-to-layer” communication:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ALB → App layer&lt;/li&gt;
&lt;li&gt;App layer → DB layer&lt;/li&gt;
&lt;/ul&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%2Fgytaom8dljrx9kzl9rgi.png" alt=" " width="420" height="248"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ✅ Testing High Availability
&lt;/h2&gt;

&lt;p&gt;The most exciting part was intentionally &lt;strong&gt;terminating one of the EC2 instances&lt;/strong&gt; to simulate a failure.&lt;/p&gt;

&lt;p&gt;Here’s what happened:&lt;/p&gt;

&lt;p&gt;✔️ The ALB stopped routing traffic to the failed instance&lt;br&gt;
✔️ The application stayed online with zero downtime&lt;br&gt;
✔️ Auto Scaling launched a replacement automatically&lt;/p&gt;

&lt;p&gt;This confirmed the architecture was functioning exactly as a real HA system should.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How to design for &lt;strong&gt;failure, resilience, and redundancy&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Importance of &lt;strong&gt;Multi-AZ deployments&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How Auto Scaling + ALB creates a &lt;strong&gt;self-healing system&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Building secure VPC environments with &lt;strong&gt;tiered security groups&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Using CloudWatch for monitoring and health checks&lt;/li&gt;
&lt;li&gt;Applying AWS Well-Architected Framework best practices&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This project showed me how enterprise-grade cloud systems are designed — not just to run, but to keep running even when things break.&lt;/p&gt;

&lt;p&gt;I’m excited to keep building more AWS and DevOps projects that focus on reliability, automation, and scalability.&lt;/p&gt;

&lt;p&gt;If you're also learning AWS or working on cloud architecture, I’d love to connect!&lt;/p&gt;




</description>
      <category>aws</category>
      <category>cloud</category>
      <category>highavailability</category>
      <category>devops</category>
    </item>
    <item>
      <title>When AWS Went Down: Lessons in Cloud Resilience from the Real World</title>
      <dc:creator>Chioma Nwosu</dc:creator>
      <pubDate>Tue, 21 Oct 2025 20:37:06 +0000</pubDate>
      <link>https://dev.to/chioma_nwosu_99d57862fb18/when-aws-went-down-lessons-in-cloud-resilience-from-the-real-world-1a4k</link>
      <guid>https://dev.to/chioma_nwosu_99d57862fb18/when-aws-went-down-lessons-in-cloud-resilience-from-the-real-world-1a4k</guid>
      <description>&lt;p&gt;When AWS experienced a global outage, it disrupted more than cloud services — it disrupted learning. As an ALX AWS Cloud Architect observer, I watched how the outage impacted Vocareum labs and brought cloud resilience principles to life. Here’s what it taught us about designing for failure, recovery, and real-world reliability.&lt;/p&gt;

&lt;p&gt;On October 20th, 2025, something strange happened — AWS went dark.&lt;/p&gt;

&lt;p&gt;At first, it felt like a typical hiccup. But soon, messages started pouring in across the ALX Cloud Architect community:&lt;/p&gt;

&lt;p&gt;“My Vocareum lab won’t load.”&lt;br&gt;
“EC2 console is just spinning.”&lt;br&gt;
“Is it my internet or AWS again?”&lt;/p&gt;

&lt;p&gt;It wasn’t just one of us. It was everyone.&lt;/p&gt;

&lt;p&gt;The Ripple Effect&lt;/p&gt;

&lt;p&gt;The outage didn’t just stall projects — it became a live case study. Students running hands-on labs couldn’t deploy instances, monitor workloads, or test automation pipelines. For many, it was frustrating. For others, it was a wake-up call about the fragility of even the biggest systems we rely on.&lt;/p&gt;

&lt;p&gt;And that’s when it hit me: this is what cloud architecture is really about.&lt;br&gt;
It’s not about the flawless uptime we dream of — it’s about designing systems that can bend without breaking.&lt;/p&gt;

&lt;p&gt;Lessons Reinforced&lt;/p&gt;

&lt;p&gt;From the chaos came clarity. Every principle I’d studied in my ALX Cloud Architect track suddenly had real weight:&lt;/p&gt;

&lt;p&gt;High Availability isn’t just a term — it’s your safety net.&lt;/p&gt;

&lt;p&gt;Multi-Region Design matters because failures do happen.&lt;/p&gt;

&lt;p&gt;Monitoring and Alerts aren’t optional — they’re your early warning system.&lt;/p&gt;

&lt;p&gt;Fault Tolerance isn’t about preventing crashes; it’s about recovering fast when they happen.&lt;/p&gt;

&lt;p&gt;It was one of those moments where the theory became alive.&lt;/p&gt;

&lt;p&gt;The Way Forward&lt;/p&gt;

&lt;p&gt;After the dust settled, I found myself more inspired than frustrated. If AWS — the gold standard of reliability — can stumble, it only proves that no system is perfect.&lt;/p&gt;

&lt;p&gt;As cloud professionals in training, our mission isn’t to eliminate outages.&lt;br&gt;
It’s to prepare for them.&lt;br&gt;
To design better.&lt;br&gt;
To learn continuously.&lt;/p&gt;

&lt;p&gt;And maybe next time an outage strikes, we’ll be the ones explaining why it happened — and how to prevent it from taking everything down.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>performance</category>
      <category>learningjourney</category>
    </item>
    <item>
      <title>🔐 Hands-On with AWS IAM: Users, Groups, and Policies in Action</title>
      <dc:creator>Chioma Nwosu</dc:creator>
      <pubDate>Sat, 30 Aug 2025 03:02:34 +0000</pubDate>
      <link>https://dev.to/chioma_nwosu_99d57862fb18/hands-on-with-aws-iam-users-groups-and-policies-in-action-ged</link>
      <guid>https://dev.to/chioma_nwosu_99d57862fb18/hands-on-with-aws-iam-users-groups-and-policies-in-action-ged</guid>
      <description>&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%2Fqc7u2coq5u9c3l7kdnkl.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%2Fqc7u2coq5u9c3l7kdnkl.png" alt="AWS Identity &amp;amp; Access Management (IAM)&amp;lt;br&amp;gt;
" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
Cloud platforms are powerful, but with great power comes great responsibility — especially when it comes to 'who has access to what'. Recently, I completed a guided lab on "AWS Identity and Access Management (IAM)", and I want to share what I learned with other builders in the community.&lt;/p&gt;




&lt;p&gt;🌍 Why IAM Matters&lt;/p&gt;

&lt;p&gt;IAM is AWS’s way of managing identities (users) and their permissions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users by default have no access.&lt;/li&gt;
&lt;li&gt;Permissions are granted through policies.&lt;/li&gt;
&lt;li&gt;Groups make it easier to assign policies to multiple users at once.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lab reinforced the 'principle of least privilege' — always give just enough permissions to get the job done.&lt;/p&gt;




&lt;p&gt;🛠 Lab Breakdown&lt;/p&gt;

&lt;p&gt;The lab gave me:&lt;/p&gt;

&lt;p&gt;*3 users: &lt;code&gt;user-1&lt;/code&gt;, &lt;code&gt;user-2&lt;/code&gt;, &lt;code&gt;user-3&lt;/code&gt;&lt;br&gt;
*3 groups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;S3-Support&lt;/code&gt; → AmazonS3ReadOnlyAccess (managed policy)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EC2-Support&lt;/code&gt; → AmazonEC2ReadOnlyAccess (managed policy)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EC2-Admin&lt;/code&gt; → Custom inline policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s an example of the inline policy for &lt;code&gt;EC2-Admin&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;json&lt;br&gt;
{&lt;br&gt;
  "Version": "2012-10-17",&lt;br&gt;
  "Statement": [&lt;br&gt;
    {&lt;br&gt;
      "Effect": "Allow",&lt;br&gt;
      "Action": [&lt;br&gt;
        "ec2:DescribeInstances",&lt;br&gt;
        "ec2:StartInstances",&lt;br&gt;
        "ec2:StopInstances"&lt;br&gt;
      ],&lt;br&gt;
      "Resource": "*"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This policy allows admins to view, start, and stop EC2 instances.&lt;/p&gt;




&lt;p&gt;👥 Assigning Users to Roles&lt;/p&gt;

&lt;p&gt;I assigned each user based on their job function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;user-1&lt;/code&gt; → S3-Support (read-only S3 access)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;user-2&lt;/code&gt; → EC2-Support (read-only EC2 access)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;user-3&lt;/code&gt; → EC2-Admin (can start/stop EC2 instances)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🔑 Testing Permissions&lt;/p&gt;

&lt;p&gt;This was the fun part — logging in as each user via the IAM sign-in URL.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user-1: Could browse S3 buckets ✅ but denied in EC2 ❌&lt;/li&gt;
&lt;li&gt;user-2: Could view EC2 instances ✅ but couldn’t stop them ❌, no S3 access ❌&lt;/li&gt;
&lt;li&gt;user-3: Could view/start/stop EC2 ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seeing the difference in permissions really drove home how IAM boundaries work.&lt;/p&gt;




&lt;p&gt;💡 Key Takeaways&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with zero access – AWS gives nothing until you explicitly allow it.&lt;/li&gt;
&lt;li&gt;Groups &amp;gt; Direct permissions – Easier to scale as teams grow.&lt;/li&gt;
&lt;li&gt;Managed vs Inline Policies – Managed = reusable; Inline = custom-fit.&lt;/li&gt;
&lt;li&gt;Always test – what’s in the JSON doesn’t always feel real until you log in as the user.&lt;/li&gt;
&lt;li&gt;Least Privilege is real – This isn’t just theory; IAM enforces it strictly.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;🚀 Why It Matters for Devs&lt;/p&gt;

&lt;p&gt;As developers, we often focus on building apps and services. But in the cloud, 'who has permission to deploy, read, or stop resources' can make or break a system.&lt;/p&gt;

&lt;p&gt;This lab reminded me that IAM isn’t “just an admin’s job” — developers need to understand it too, especially if you’re working in teams or deploying production workloads.&lt;/p&gt;




&lt;p&gt;✅ Final Thoughts&lt;/p&gt;

&lt;p&gt;This IAM lab was a practical way to see how access control works in AWS. Instead of reading docs, I actually lived through what happens when users have too much, too little, or just the right amount of access.&lt;/p&gt;

&lt;p&gt;👉 Question for the DEV community:&lt;br&gt;
Do you usually stick with &lt;em&gt;AWS managed policies&lt;/em&gt; for simplicity, or do you create &lt;em&gt;custom inline policies&lt;/em&gt; for fine-grained control?&lt;/p&gt;




&lt;p&gt;If you found this useful, follow me here on DEV — I’ll be sharing more hands-on AWS learning journeys.&lt;/p&gt;

&lt;p&gt;#AWS #Cloud #IAM #Security #DevOps&lt;/p&gt;




</description>
      <category>aws</category>
      <category>iam</category>
      <category>cloudcomputing</category>
      <category>awscommunity</category>
    </item>
  </channel>
</rss>
