<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: AWS Build Diaries: EventBridge vs Lambda to Lambda in Software - General</title>
    <link>https://community.hpe.com/t5/software-general/aws-build-diaries-eventbridge-vs-lambda-to-lambda/m-p/7264248#M1480</link>
    <description>&lt;P&gt;Well written blog!&lt;/P&gt;</description>
    <pubDate>Wed, 01 Apr 2026 07:12:44 GMT</pubDate>
    <dc:creator>yashwanth_k</dc:creator>
    <dc:date>2026-04-01T07:12:44Z</dc:date>
    <item>
      <title>AWS Build Diaries: EventBridge vs Lambda to Lambda</title>
      <link>https://community.hpe.com/t5/software-general/aws-build-diaries-eventbridge-vs-lambda-to-lambda/m-p/7264247#M1479</link>
      <description>&lt;P&gt;&lt;STRONG&gt;From “One Ticket = One Lambda” to Event-Driven Architecture&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I was tasked with building a sizing engine for cluster t-shirts, that had to be integrated into our web app, and I needed a single DynamoDB, that had sizing details from multiple data sources. I didn’t really design this system upfront but rather built it the way a lot of us do, one ticket at a time.&lt;/P&gt;&lt;P&gt;The goal sounded simple enough, get data into Amazon DynamoDB. But the data wasn’t coming from just one place. It was scattered across OneView, an Oracle database, Prism Central, and even Excel files housed in S3.&lt;/P&gt;&lt;P&gt;And every time a new requirement showed up, I handled it the same way:&lt;/P&gt;&lt;P&gt;I’d pick up the ticket, write a new AWS Lambda, and move on.&lt;/P&gt;&lt;P&gt;That pattern worked, until it didn’t.&lt;/P&gt;&lt;P&gt;Because before I realized it, my architecture wasn’t something I had designed, it was something that had been built from a growing pile of tickets.&lt;/P&gt;&lt;P&gt;One ticket. One Lambda. Over and over again.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;First Implementation: One Lambda for each Data Source&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;It started clean.&lt;/P&gt;&lt;P&gt;Lambda A - OneView - DynamoDB&lt;/P&gt;&lt;P&gt;Lambda B - Oracle - DynamoDB&lt;/P&gt;&lt;P&gt;Lambda C - Prism - DynamoDB&lt;/P&gt;&lt;P&gt;Each Lambda:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Pulled data from its source&lt;/LI&gt;&lt;LI&gt;Transformed it&lt;/LI&gt;&lt;LI&gt;Wrote to DynamoDB&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This felt modular. Even elegant.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Why This Approach Worked (At First)&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Clear ownership per data source&lt;/LI&gt;&lt;LI&gt;Easy to implement per ticket&lt;/LI&gt;&lt;LI&gt;Independent deployments&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;If a OneView change came in, I only touched Lambda A.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The Cracks Started Showing&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The system didn’t break, it changed and over time, patterns started repeating:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Duplicate Logic Everywhere&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Each Lambda had its own version of:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Validation&lt;/LI&gt;&lt;LI&gt;Transformation&lt;/LI&gt;&lt;LI&gt;Error handling&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Same logic. Copied three times. Then five.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Inconsistent Data Handling&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;UL&gt;&lt;LI&gt;Oracle data was cleaned differently than OneView&lt;/LI&gt;&lt;LI&gt;Excel uploads had slightly different validation rules&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The same entity in DynamoDB started looking different depending on its source.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Cross-Source Dependencies Appeared&lt;/STRONG&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;New requirements came in:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;“Combine Oracle + OneView data before writing”&lt;/LI&gt;&lt;LI&gt;“Enrich Prism data with values from S3 Excel”&lt;/LI&gt;&lt;LI&gt;“Run a full refresh across all systems daily”&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Now things got complicated. I couldn’t keep following my “follow the instructions on the ticket” rule anymore.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Second Implementation: Connecting the Lambdas&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;To handle dependencies, I started linking Lambdas together. Calling one Lambda from another Lambda.&lt;/P&gt;&lt;P&gt;Lambda A - Lambda B - Lambda C - DynamoDB&lt;/P&gt;&lt;P&gt;Or sometimes:&lt;/P&gt;&lt;P&gt;Lambda A + Lambda B - Lambda C - DynamoDB&lt;/P&gt;&lt;P&gt;Now Lambdas weren’t independent anymore.&lt;/P&gt;&lt;P&gt;They had to:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Know about each other&lt;/LI&gt;&lt;LI&gt;Wait for each other&lt;/LI&gt;&lt;LI&gt;Handle each other’s failures&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Third Implementation: Merge Everything&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;At this point, I asked the obvious question:&lt;/P&gt;&lt;P&gt;“Why not just have one Lambda that does everything?”&lt;/P&gt;&lt;P&gt;It seemed like a way to:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Eliminate duplication&lt;/LI&gt;&lt;LI&gt;Centralize logic&lt;/LI&gt;&lt;LI&gt;Simplify orchestration&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;But this introduced a different set of problems.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Why a Single Lambda Didn’t Work&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;With all sources combined, the function started looking like:&lt;/P&gt;&lt;P&gt;def handler(event):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if source == "oneview":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetch_oneview()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif source == "oracle":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetch_oracle()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif source == "prism":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetch_prism()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif source == "excel":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetch_excel()&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What went wrong:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The function kept growing with every new ticket&lt;/LI&gt;&lt;LI&gt;Conditional logic exploded&lt;/LI&gt;&lt;LI&gt;A fix for one source risked breaking another&lt;/LI&gt;&lt;LI&gt;Testing became harder&lt;/LI&gt;&lt;LI&gt;Deployments became riskier&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;The system was no longer modular, it was tightly coupled in one place.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Fourth and Final Implementation: Thinking in Events, Not Functions&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The real breakthrough came when I stopped asking:&lt;/P&gt;&lt;P&gt;“Which Lambda should call the next one?”&lt;/P&gt;&lt;P&gt;And instead asked:&lt;/P&gt;&lt;P&gt;“What just happened in the system?”&lt;/P&gt;&lt;P&gt;That’s when I introduced Amazon EventBridge.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The Final Design: Event-Driven&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Instead of direct calls, everything became event-based:&lt;/P&gt;&lt;P&gt;Event: OneViewDataFetched - Processing&lt;/P&gt;&lt;P&gt;Event: OracleDataFetched - Processing&lt;/P&gt;&lt;P&gt;Event: PrismDataFetched - Processing&lt;/P&gt;&lt;P&gt;Event: ExcelDataUploaded - Processing&lt;/P&gt;&lt;P&gt;Then:&lt;/P&gt;&lt;P&gt;Event: DataProcessed - Enrichment&lt;/P&gt;&lt;P&gt;Event: DataReady - Write to DynamoDB&lt;/P&gt;&lt;P&gt;Each step:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Listens for events&lt;/LI&gt;&lt;LI&gt;Does its job&lt;/LI&gt;&lt;LI&gt;Emits a new event&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;What Changed&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;No More “One Ticket = One Lambda” Chaos&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I still created Lambdas - but now they were:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Based on responsibilities&lt;/LI&gt;&lt;LI&gt;Not data sources&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Logic Became Centralized (Without Tight Coupling)&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Transformation logic lived in one place&lt;/LI&gt;&lt;LI&gt;Enrichment in another&lt;/LI&gt;&lt;LI&gt;Storage in another&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;No duplication, no giant function.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Adding New Sources Became Easy&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;New ticket?&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Emit a DataFetched event&lt;/LI&gt;&lt;LI&gt;Plug into the pipeline&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;No need to touch existing Lambdas.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Scheduling Became Trivial&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Using EventBridge, I added a daily trigger to refresh all data.&lt;/P&gt;&lt;P&gt;No cron jobs. No extra services.&lt;/P&gt;&lt;P&gt;Just a scheduled event kicking off the pipeline.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The Real Lesson&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;At the start, my architecture followed my tickets.&lt;/P&gt;&lt;P&gt;One requirement - One Lambda.&lt;/P&gt;&lt;P&gt;But over time, I realized:&lt;/P&gt;&lt;P&gt;Systems shouldn’t be designed around tickets - they should be designed around events.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Final Thought&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I didn’t adopt EventBridge because my Lambdas were wrong.&lt;/P&gt;&lt;P&gt;I adopted it because my system outgrew the idea that functions should call each other.&lt;/P&gt;&lt;P&gt;Once I started treating everything as events, the architecture stopped fighting me - and started scaling with me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Apr 2026 06:35:57 GMT</pubDate>
      <guid>https://community.hpe.com/t5/software-general/aws-build-diaries-eventbridge-vs-lambda-to-lambda/m-p/7264247#M1479</guid>
      <dc:creator>pearlwilson</dc:creator>
      <dc:date>2026-04-01T06:35:57Z</dc:date>
    </item>
    <item>
      <title>Re: AWS Build Diaries: EventBridge vs Lambda to Lambda</title>
      <link>https://community.hpe.com/t5/software-general/aws-build-diaries-eventbridge-vs-lambda-to-lambda/m-p/7264248#M1480</link>
      <description>&lt;P&gt;Well written blog!&lt;/P&gt;</description>
      <pubDate>Wed, 01 Apr 2026 07:12:44 GMT</pubDate>
      <guid>https://community.hpe.com/t5/software-general/aws-build-diaries-eventbridge-vs-lambda-to-lambda/m-p/7264248#M1480</guid>
      <dc:creator>yashwanth_k</dc:creator>
      <dc:date>2026-04-01T07:12:44Z</dc:date>
    </item>
  </channel>
</rss>

