雲原生架構

極致彈性架構:Lambda、EventBridge 與無伺服器微服務實戰

無伺服器微服務的核心不是「不用管伺服器」,而是把系統的因果關係從「呼叫別人」改成「宣告事實」。AWS 這一側的組合通常是:Lambda 負責運算、EventBridge 負責事件的路由與排程、Step Functions 負責多步流程的編排、API Gateway 負責對外的同步入口。真正決定成敗的,是你怎麼切同步與非同步的界線,以及第一天就把重試、死信與追蹤補齊。
極致彈性架構:Lambda、EventBridge 與無伺服器微服務實戰:文章重點卡

極致彈性架構:Lambda、EventBridge 與無伺服器微服務實戰

我第一次把一套同步的訂單流程改寫成事件驅動的時候,最不習慣的不是新服務要怎麼設定,而是「我看不到整條流程了」這件事。原本一路讀下來的程式碼,散成了好幾個各自獨立的片段。

這篇要把這件事講清楚:事件驅動到底改變了什麼、Lambda 在 2026 年已經長成什麼樣子、EventBridge 的三種形狀怎麼選,以及一條可以照著走的落地順序。

你將學到什麼

換一種因果觀

從主動呼叫下游,改成宣告事實讓下游自己訂閱,耦合的方向會整個反過來。

Lambda 的邊界

它擅長事件觸發、可水平展開、時間有界的工作;常駐與累積狀態的工作要另外想辦法。

EventBridge 三形狀

事件匯流排做多對多路由、管線做點對點整合、排程器做週期與一次性觸發。

編排與入口

多步流程交給 Step Functions,對外的同步請求交給 API Gateway,兩件事不要混在一起。

無伺服器真正改變的不是機器誰來開,而是你怎麼切邊界、怎麼描述因果,以及出事的時候你要去哪裡看。

先換一種因果觀:從呼叫別人,變成宣告事實

傳統微服務的預設動作是呼叫。訂單服務做完事,主動去呼叫庫存服務、通知服務、對帳服務。代價很清楚:訂單服務必須知道所有下游是誰。

事件驅動把方向反過來。訂單服務只負責宣告一件事實:訂單成立了。誰要理它、要做什麼,是接收端自己的事。

AWS 官方文件對這種風格的描述是「鬆耦合的軟體系統,靠發出事件與回應事件一起運作」。這句話聽起來抽象,但它的實際影響非常具體。

  • 耦合方向改變:上游只依賴事件的格式,不依賴下游存不存在。
  • 失敗被隔離:某個消費端出錯,不會沿著呼叫堆疊往回炸到使用者面前。
  • 擴充成本降低:多接一個下游,通常只是多寫一條規則。
  • 代價也很真實:整條流程沒有一份可以逐行讀完的程式碼,可觀測性要另外投資。
最常見的失敗不是技術問題

事件驅動翻車,多半是把一段本來就該同步的流程硬拆成非同步。使用者按下按鈕後必須立刻看到結果的那一段,請留在同步路徑上;可以晚幾秒、可以重試、可以補償的那一段,才交給事件。

Lambda 的運算模型與它的邊界

Lambda 的模型可以用一句話講完:你交出一段函式,有事件的時候 AWS 幫你把它跑起來,沒事件的時候什麼都不留。它擅長的工作有很固定的形狀。

  • 被事件觸發,而不是自己輪詢等待。
  • 每次執行都能獨立完成,不需要記得上一次做了什麼。
  • 可以水平展開,一次來一千筆就跑一千份。
  • 執行時間有界,不是一開就要活好幾天。

反過來,需要長時間常駐、需要在記憶體裡累積狀態、或是對啟動延遲極度敏感的互動路徑,就要先想清楚再決定。逾時上限、記憶體上限這類數字會隨版本調整,規劃時請直接查官方文件的當期值。

2026 年的 Lambda 已經不只一種跑法

如果你對 Lambda 的印象還停在「一段短函式配一個 handler」,這裡要更新一下。官方產品頁目前的講法是一個服務、多種執行方式。

執行形態官方定位適合的工作形狀
Lambda Functions零基礎設施管理,依用量計費,與 AWS 服務原生整合事件觸發、短小、可水平展開
Managed Instances以 EC2 為底的專屬容量,內建路由與負載平衡運算密集,例如大規模資料處理與媒體轉檔
MicroVMs以 Firecracker 提供虛擬機等級隔離的沙箱,可保留狀態執行使用者或 AI 產生的程式碼
Durable Functions可暫停、等待訊號、失敗後續跑的多步流程長流程與代理迴圈,不必外掛編排器
時間點與變動提醒

上表依 AWS 官方產品頁與 2026 年公開公告整理,查閱時間為 2026 年 8 月。其中 Lambda MicroVMs 於 2026 年 6 月宣布,初期僅在部分區域提供;Durable Functions 的 Java SDK 於 2026 年第二季正式推出並擴增區域。可用區域、支援語言與功能邊界變動很快,實際情況一律以官方公告為準。

這件事對架構師的意義是:「Lambda 不夠用就得換別的服務」這個舊假設,值得重新檢查一次。

EventBridge:匯流排、管線與排程三種形狀

官方使用者指南把 EventBridge 的事件處理與投遞分成兩種方式:事件匯流排與管線,另外再加上一個排程器。三者解的問題不一樣。

  • 事件匯流排:多來源對多目標的路由器。你在上面寫規則,依事件內容過濾,投遞到零個到多個目標,投遞前還可以做轉換。
  • 管線:點對點整合。一條管線一個來源、一個目標,中間支援進階的轉換與資料強化。
  • 排程器:用 cron 或 rate 表達式管理週期任務,也能設定一次性觸發,並可設定彈性投遞時間窗、重試上限與保留時間。

官方文件提到一個很實用的組合:把管線的目標設成事件匯流排。管線負責把某條資料流標準化成乾淨的事件,匯流排負責依規則散發給所有訂閱者。

事件來源訂單服務付款服務外部 SaaSEventBridge事件匯流排規則過濾與轉換投遞目標Lambda 函式Step Functions佇列與資料湖失敗的事件進死信佇列,關聯識別碼一路帶到底
事件驅動的基本形狀:來源不知道目標是誰,規則才是那條可以被改的線。

Step Functions:把流程從程式碼裡拿出來

事件一多,你會遇到一個尷尬的問題:這條流程到底長什麼樣子?如果答案散在五個函式的例外處理裡,就沒有人講得完整。

Step Functions 的價值是把順序、重試、補償與分支變成一份可以被讀、被畫、被版本控制的定義。官方的定位是用視覺化工作流建構與編排分散式應用。

{
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Next": "ChargePayment"
    },
    "ChargePayment": {
      "Type": "Task",
      "Retry": [ { "ErrorEquals": [ "..." ] } ],
      "Catch": [ { "Next": "CompensateOrder" } ],
      "Next": "Fulfill"
    },
    "CompensateOrder": { "Type": "Task", "End": true },
    "Fulfill":         { "Type": "Task", "End": true }
  }
}

上面只是結構示意,用來說明「重試與補償被寫在流程定義裡,而不是塞在函式裡」這件事。實際的欄位名稱與可用屬性,請以官方的 Amazon States Language 文件為準。

2026 年官方頁面另外把代理式工作流列為主要使用情境之一,強調跨公有與私有端點的整合,以及把人放進迴圈的觀測與控制。

API Gateway:同步入口怎麼切

事件驅動不代表沒有同步入口。瀏覽器、合作夥伴的 webhook、手機應用程式,都需要一個會立刻回話的 HTTP 端點。

  • REST API:需要完整的 API 管理能力時選它,官方定位是把代理功能與管理功能放在同一個方案裡。
  • HTTP API:官方說法是「只需要代理功能時的最佳選擇」,適合單純把請求轉給後端的場景。
  • WebSocket API:需要雙向即時通訊時選它,官方舉的例子是聊天應用與即時儀表板。

2025 年 11 月官方另外推出了 API Gateway 的入口功能(Portals),把 REST API 的探索、文件與治理集中起來。內部 API 一多,這件事的價值會超過預期。

設計原則其實只有一條:入口只做入口該做的事。驗證身分、擋掉明顯不合法的請求、把事情交出去,然後盡快回應。真正的工作留給後面的事件流。

一條務實的落地順序

  1. 先畫事件,不要先畫服務。 把業務上真的發生過的事實列出來,例如訂單成立、付款失敗、庫存不足,那才是你的邊界。
  2. 把事件當契約來管。 事件格式要有版本策略,因為改事件欄位比改 API 更容易無聲地弄壞下游。
  3. 同步與非同步分線。 使用者要立刻看到的走 API Gateway 加 Lambda,可以晚一點的丟上匯流排。
  4. 多步流程交給編排服務。 不要在函式裡手寫狀態機,那份狀態遲早會跟現實對不上。
  5. 第一天就補齊三件事。 死信佇列、重試策略、分散式追蹤,事件驅動的除錯成本全部押在這一步。
冪等性不是進階題

事件系統的預設假設是至少送達一次,不是剛好一次。每個消費端都要能重複收到同一則事件而不出錯,通常的做法是把事件的唯一識別碼存下來當去重鍵。這件事不做,你會在半年後花十倍時間去找一筆重複扣款是怎麼來的。

本文源起本文依 AWS 官方文件與 2026 年公開資料整理,由酒Ann 以自己的視角編寫成中文導覽。實際服務規格與可用性以 AWS 官網 為準。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

所有微服務都應該改成事件驅動嗎?
不應該。判斷標準是使用者需不需要立刻看到結果。按下按鈕後必須馬上得到答案的那一段,留在同步路徑上會單純很多;可以晚幾秒、可以重試、可以事後補償的那一段,才適合交給事件。把同步流程硬拆成非同步,是這個架構最常見的失敗方式。
Lambda 跟容器該怎麼選?
先看工作的形狀而不是看服務名稱。被事件觸發、每次執行時間有界、可以水平展開的工作,Lambda 的模型很順;需要長時間常駐、要在記憶體裡累積狀態、或依賴特定作業系統環境的工作,容器通常更省事。2026 年的 Lambda 另外提供了多種執行形態,選型之前值得先看一次官方產品頁的現況。
事件會不會重複送達?
會,而且你必須假設它一定會。事件系統的預設保證通常是至少送達一次,不是剛好一次,重試、網路抖動、消費端逾時都可能讓同一則事件被處理兩次。務實的做法是讓每個消費端都具備冪等性:把事件的唯一識別碼記下來當作去重鍵,重複收到就直接略過。
流程狀態要自己寫在 Lambda 裡嗎?
不建議。順序、重試、補償、分支這些東西一旦散在多個函式的例外處理裡,就沒有人能完整說出流程長什麼樣子。把它交給 Step Functions 這類編排服務,或是 Lambda 自己的長流程能力,好處是流程變成一份可以被讀、被畫、被版本控制的定義。
除錯要從哪裡開始?
從三樣東西開始:關聯識別碼、死信佇列、分散式追蹤。事件驅動的系統沒有一份可以逐行讀完的呼叫堆疊,你唯一能依靠的是把同一筆業務的所有事件用同一個識別碼串起來。這三件事沒有在第一天做好,之後每一次線上問題都會變成考古。