<?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: Limani Ndou</title>
    <description>The latest articles on DEV Community by Limani Ndou (@limani).</description>
    <link>https://dev.to/limani</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%2F3732979%2F49dd130b-fd29-4355-8a6e-a18ea57c6e06.png</url>
      <title>DEV Community: Limani Ndou</title>
      <link>https://dev.to/limani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/limani"/>
    <language>en</language>
    <item>
      <title>Agentic AI for VMware migrations with AWS Transform for VMware</title>
      <dc:creator>Limani Ndou</dc:creator>
      <pubDate>Tue, 09 Jun 2026 11:41:16 +0000</pubDate>
      <link>https://dev.to/limani/agentic-ai-for-vmware-migrations-with-aws-transform-for-vmware-28fe</link>
      <guid>https://dev.to/limani/agentic-ai-for-vmware-migrations-with-aws-transform-for-vmware-28fe</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%2Fzyxkbkl2ccopd0ycnzy6.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%2Fzyxkbkl2ccopd0ycnzy6.png" alt=" " width="800" height="551"&gt;&lt;/a&gt;&lt;br&gt;
I recently learned about Agentic AI for VMware migrations from AWS through a session on AWS Transform for VMware. The session explained how enterprise VMware migrations are often slow and complex because of legacy systems, manual processes, and coordination challenges across multiple teams.&lt;/p&gt;

&lt;p&gt;What stood out to me was how AWS Transform uses Agentic AI to simplify migration workflows like discovery, assessment, planning, network conversion, and deployment. Instead of relying heavily on manual effort, the platform uses AI agents to automate and accelerate large-scale cloud transformations.&lt;/p&gt;

&lt;p&gt;The session also highlighted benefits such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Faster VMware migrations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduced operational and licensing costs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved scalability and security&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better collaboration between customers, AWS teams, and partners&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was interesting to see how AWS is moving beyond traditional migration tools and using AI-driven systems to modernize enterprise infrastructure at scale.&lt;/p&gt;

&lt;p&gt;You can learn more here:&lt;br&gt;
• &lt;a href="https://aws.amazon.com/transform/vmware/" rel="noopener noreferrer"&gt;https://aws.amazon.com/transform/vmware/&lt;/a&gt;&lt;br&gt;
• &lt;a href="https://youtu.be/BHO_45PxguI?si=FWAlu0vvqHbLuHmB" rel="noopener noreferrer"&gt;https://youtu.be/BHO_45PxguI?si=FWAlu0vvqHbLuHmB&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>vmware</category>
      <category>devops</category>
    </item>
    <item>
      <title>🚀 How I Ran 11 Microservices with OpenChoreo</title>
      <dc:creator>Limani Ndou</dc:creator>
      <pubDate>Wed, 25 Mar 2026 22:05:07 +0000</pubDate>
      <link>https://dev.to/limani/how-i-ran-11-microservices-with-openchoreo-ag3</link>
      <guid>https://dev.to/limani/how-i-ran-11-microservices-with-openchoreo-ag3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I used OpenChoreo to deploy and manage the Google Cloud microservices demo (11 services) on my local machine. The result was a cleaner developer workflow, better service visibility, and a production-like platform experience without building custom platform tooling from scratch.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;What OpenChoreo?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;OpenChoreo&lt;/strong&gt; is a developer platform for &lt;strong&gt;Kubernetes&lt;/strong&gt; offering development and architecture abstractions, a Backstage-powered developer portal, application CI/CD, GitOps, and observability. It composes &lt;strong&gt;CNCF&lt;/strong&gt; and complementary projects into a modular, extensible framework that provides both strong governance for platform engineers and simplified abstractions for developers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;OpenChoreo was developed by WSO2 and is now part of the Cloud Native Computing Foundation (CNCF) ecosystem.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Why OpenChoreo?&lt;/strong&gt;&lt;br&gt;
OpenChoreo it provides all essential building blocks of an Internal Developer Platform (IDP) :&lt;/p&gt;

&lt;p&gt;High-level APIs for modeling cloud-native applications&lt;br&gt;
A Control Plane that understands and enforces these APIs with GitOps support&lt;br&gt;
A built-in workflow engine for CI/CD pipelines and automation&lt;br&gt;
An opinionated Data Plane with runtime enforcement of design-time semantics&lt;br&gt;
Built-in security, networking, and observability integrations&lt;br&gt;
This is the key reason I used it for this 11-microservice demo.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;GCP Microservices Demo: What It Includes&lt;/strong&gt;&lt;br&gt;
Repository: &lt;a href="https://github.com/GoogleCloudPlatform/microservices-demo" rel="noopener noreferrer"&gt;https://github.com/GoogleCloudPlatform/microservices-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 frontend (Go): Serves the website and auto-generates user session IDs.&lt;br&gt;
🛒 cartservice (C#): Stores/retrieves cart items in Redis.&lt;br&gt;
📚 productcatalogservice (Go): Product listing, search, and product details from JSON.&lt;br&gt;
💱 currencyservice (Node.js): Converts money values using ECB exchange rates (highest QPS).&lt;br&gt;
💳 paymentservice (Node.js): Mock credit card charge and transaction ID generation.&lt;br&gt;
🚚 shippingservice (Go): Shipping cost estimates and mock shipping execution.&lt;br&gt;
✉️ emailservice (Python): Mock order confirmation emails.&lt;br&gt;
🎯 checkoutservice (Go): Orchestrates cart, payment, shipping, and email flow.&lt;br&gt;
💡 recommendationservice (Python): Suggests products from cart context.&lt;br&gt;
📢 adservice (Java): Returns text ads based on context words.&lt;br&gt;
🔄 loadgenerator (Python/Locust): Simulates realistic shopping traffic.&lt;br&gt;
4️⃣ What I Did (Step by Step)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚙️ Prerequisites&lt;br&gt;
Ensure the following before you begin:&lt;br&gt;
-Docker (Engine 26.0+ recommended)&lt;br&gt;
-Allocate at least 4 GB RAM and 2 CPUs.&lt;br&gt;
-If you plan to install with WorkflowPlane, allocate 8 GB RAM and 4 CPUs for optimal performance.&lt;br&gt;
-5-10 minutes of setup time&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Step 1: Start OpenChoreo Quick Start&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; openchoreo-quick-start &lt;span class="sb"&gt;`&lt;/span&gt;
  &lt;span class="nt"&gt;--pull&lt;/span&gt; always &lt;span class="sb"&gt;`&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; //var/run/docker.sock:/var/run/docker.sock &lt;span class="sb"&gt;`&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="nt"&gt;-p&lt;/span&gt; 9443:9443 &lt;span class="sb"&gt;`&lt;/span&gt;
  ghcr.io/openchoreo/quick-start:v1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fug1zsmtasstswm3p1vq2.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%2Fug1zsmtasstswm3p1vq2.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Install OpenChoreo(two options):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./install.sh

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fmg20cvhsh9dqjy2ylfg0.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%2Fmg20cvhsh9dqjy2ylfg0.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&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%2F33ht2p8jm6efx3icd1oy.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%2F33ht2p8jm6efx3icd1oy.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With observability&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./install.sh &lt;span class="nt"&gt;--with-build&lt;/span&gt; &lt;span class="nt"&gt;--with-observability&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Choose a Deployment Option&lt;br&gt;
There are two ways to deploy the GCP Microservices Demo:&lt;/p&gt;

&lt;p&gt;Option A: Use the built-in OpenChoreo deploy script for GCP Microservices Demo (11 services: frontend, cart, checkout, payment, and more)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./deploy-gcp-demo.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Option B: Clone and deploy manually&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--depth&lt;/span&gt; 1 &lt;span class="nt"&gt;--branch&lt;/span&gt; v0 https://github.com/GoogleCloudPlatform/microservices-demo.git
&lt;span class="nb"&gt;cd &lt;/span&gt;microservices-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; ./release/kubernetes-manifests.yaml
I used Option B &lt;span class="o"&gt;(&lt;/span&gt;clone and deploy&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4: Verify in OpenChoreo UI&lt;br&gt;
Access the UI at: &lt;code&gt;http://openchoreo.localhost:8080/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Default login credentials:&lt;/p&gt;

&lt;p&gt;Username: &lt;code&gt;admin@openchoreo.dev&lt;/code&gt;&lt;br&gt;
Password: &lt;code&gt;Admin@123&lt;/code&gt;&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%2F1frup8664uxz6h9fmj7e.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%2F1frup8664uxz6h9fmj7e.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;Project and component catalog&lt;br&gt;
Deployment pipeline view&lt;br&gt;
Environment progression&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%2Fkzq4d2vsaa9gtkfn6hug.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%2Fkzq4d2vsaa9gtkfn6hug.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 5: Validate End-to-End App Behavior&lt;br&gt;
I opened the storefront and validated core user flow (browse, cart, checkout).&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%2F6ec04p8gys9vauqgobu8.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%2F6ec04p8gys9vauqgobu8.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📚 &lt;strong&gt;References&lt;/strong&gt;&lt;br&gt;
Documentation: &lt;a href="https://openchoreo.dev/docs/" rel="noopener noreferrer"&gt;https://openchoreo.dev/docs/&lt;/a&gt;&lt;br&gt;
Documentation: &lt;a href="https://insights.linuxfoundation.org/project/openchore" rel="noopener noreferrer"&gt;https://insights.linuxfoundation.org/project/openchore&lt;/a&gt;&lt;br&gt;
OpenChoreo Quick Start Guide:&lt;br&gt;
&lt;a href="https://openchoreo.dev/docs/getting-started/quick-start-guide/" rel="noopener noreferrer"&gt;https://openchoreo.dev/docs/getting-started/quick-start-guide/&lt;/a&gt;&lt;br&gt;
GCP Microservices Demo Repository:&lt;br&gt;
&lt;a href="https://github.com/GoogleCloudPlatform/microservices-demo" rel="noopener noreferrer"&gt;https://github.com/GoogleCloudPlatform/microservices-demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>openchoreo</category>
      <category>kubernetes</category>
      <category>microservices</category>
      <category>devops</category>
    </item>
    <item>
      <title>🚀 How I Built a Serverless Expense Tracker Using AWS Lambda and Amazon S3 - No Server Required</title>
      <dc:creator>Limani Ndou</dc:creator>
      <pubDate>Fri, 20 Mar 2026 19:50:36 +0000</pubDate>
      <link>https://dev.to/limani/how-i-built-a-serverless-expense-tracker-using-aws-lambda-and-amazon-s3-no-server-required-n24</link>
      <guid>https://dev.to/limani/how-i-built-a-serverless-expense-tracker-using-aws-lambda-and-amazon-s3-no-server-required-n24</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%2Fdq2avg3odalndq7jn1iu.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%2Fdq2avg3odalndq7jn1iu.png" alt=" " width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
🚀I have built a fully serverless expense tracking pipeline on AWS  no servers, no manual work, just pure cloud automation. &lt;/p&gt;

&lt;p&gt;The problem: combining monthly expense CSVs every year is tedious and error-prone. So I automated the entire process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🪣 Amazon S3 (Simple Storage Service)&lt;/strong&gt;&lt;br&gt;
Amazon S3 is a cloud-based object storage service that stores and retrieves any amount of data from anywhere in the world. It can also watch for new files and automatically notify other AWS services when something is uploaded.&lt;br&gt;
💡 Think of it as a smart cloud hard drive the moment a CSV lands in S3, it wakes up Lambda automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ AWS Lambda&lt;/strong&gt;&lt;br&gt;
AWS Lambda is a serverless compute service that runs your code in response to events, without provisioning or managing any servers. You only pay for the milliseconds your code actually runs.&lt;br&gt;
💡 Think of it as a worker who sleeps until you need them triggered, runs the task, goes back to sleep. No server running 24/7, no idle costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 AWS IAM (Identity &amp;amp; Access Management)&lt;/strong&gt;&lt;br&gt;
AWS IAM is a service that controls access to AWS resources by defining who is authenticated and what actions they are authorised to perform.&lt;br&gt;
💡 Think of it as the security guard of AWS without IAM, Lambda would not be allowed to touch a single file in S3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📊 Amazon CloudWatch&lt;/strong&gt;&lt;br&gt;
Amazon CloudWatch is a monitoring and observability service that collects logs, metrics, and events from AWS services in real time.&lt;br&gt;
💡 Think of it as the CCTV of your cloud application every log line, every error, every execution time recorded automatically.&lt;/p&gt;

&lt;p&gt;⚙️ How The Pipeline Works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload monthly CSV to S3&lt;/li&gt;
&lt;li&gt;S3 fires an event → Lambda wakes up&lt;/li&gt;
&lt;li&gt;Lambda reads the new file + existing master&lt;/li&gt;
&lt;li&gt;Merges, sorts by date, removes duplicates&lt;/li&gt;
&lt;li&gt;Recalculates category totals in South African Rand&lt;/li&gt;
&lt;li&gt;Saves updated master file back to S3 instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;📈 Real Results — 3 Months of SA Expense Data:&lt;br&gt;
• ✅ 50 transactions merged automatically&lt;br&gt;
• ✅ 0 manual steps required&lt;br&gt;
• ✅ Categories: Groceries, Fuel, Utilities, Health &amp;amp; more&lt;br&gt;
• 💰 Grand Total (YTD 2026): R41,859.97&lt;/p&gt;

&lt;p&gt;🔗 Full source code, architecture diagram &amp;amp; sample data if you want to try:&lt;br&gt;
👉 &lt;a href="https://lnkd.in/dQNytjKD" rel="noopener noreferrer"&gt;https://lnkd.in/dQNytjKD&lt;/a&gt;&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>aws</category>
      <category>s3</category>
      <category>lambda</category>
    </item>
  </channel>
</rss>
