iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0

來囉!來囉!上車囉!要開始講 API Gateway 跟 AWS Lambda 的組合使用方法了。
這組合就像工程師的黑咖啡加爆肝宵夜:缺一不可

Hello World,因為沒什麼比這更 Hello 的了

按照傳統,工程師啟動任何新專案前,都要先來一個「Hello World」來壓壓驚。這不是迷信,這是 IT 界的入門儀式(這是一種信仰),就像 PM 一定會問「這個能不能禮拜五上線」一樣。

我們要做的就是:

  1. 建一個 API Gateway,當作前台小弟,負責幫你接客(咳,指的是流量)。
  2. 後面接一個 Lambda,專心當廚房裡的師傅,煮出一碗「Hello World」丟回去。

簡單來說,就是一個 RESTful Hello World 生產線。
https://ithelp.ithome.com.tw/upload/images/20251006/20141071n3etyoQgDh.png

在這裡我們要直接把 API Gateway 接上前面做過的 Hello World Lambda
所以呢,如果你前面上課打瞌睡、偷滑手機,或者直接跳章沒跟上進度的夥伴們,現在該回去重修了

  • 有 Lambda 的人:恭喜,你現在可以直接拿來 reuse,秒變高效率工程師。
  • 沒有 Lambda 的人:對不起,你現在就是那個「專案跑不起來,卻還要說『在我環境裡是正常的啊』」的人。

所以,請乖乖回去前一篇,先把 Hello World Lambda 生出來。不然你接下來的操作,就會像老闆交代的需求一樣——完全接不起來

建立 API Gateway

打開 AWS Console → 點 API Gateway → 紅框那個 Create an API 給它點下去。

https://ithelp.ithome.com.tw/upload/images/20251006/20141071Bv1tzx4Lls.png

記得要選 REST API,不要手殘選到 Private API,不然你會變成自己寫了一個只能自己用的「高級 localhost」。到時候老闆測不了、同事也測不了,然後你就只能講出那句名言:「在我環境是正常的啊!
https://ithelp.ithome.com.tw/upload/images/20251006/20141071JLZY2TZynM.png

既然是新開張的 API,那就選 New API

  • API Name:取個名字,簡單就好,什麼 hello-api 之類的,不要搞一個 final_v2_new_last_ok_real_final_final,半年後連你自己都不知道這 API 在幹嘛,而且保證每調用一次就會罵一次。
  • 其他選項?用預設就好,因為工程師的名言是:「Deploy 到 production 沒壞就是成功。」
  • 最後選擇右下角的 Create API
    https://ithelp.ithome.com.tw/upload/images/20251006/20141071bBpFTDCJSB.png

建立完成後,上面會跳出一條綠色通知。對,這就是 AWS 給你的甜頭,讓你以為自己很厲害。但別忘了,這只是第一步,你還有好幾步等著要設定哦。
https://ithelp.ithome.com.tw/upload/images/20251006/20141071FBJCs7joWY.png

建立 Resource:請先取個好聽的名字

第一步,我們要在 API Gateway 裡建立一個 Resource
操作很簡單 → 點紅框 → Create Resource
https://ithelp.ithome.com.tw/upload/images/20251006/20141071K053a2LnJl.png

這時候 AWS 會問你「Resource name?」。我們就大方輸入 hello,沒什麼比這更萬用的了。
(畢竟工程師界的傳統就是:什麼文件都可以少,Hello World 不能少。)
然後點擊右下角的 Create Resource
https://ithelp.ithome.com.tw/upload/images/20251006/20141071T2hm1LbQ9o.png

小提醒:Resource 名稱最好不要亂取,不然最後會變成 /test2_final_ok_v3 這種東西,三個月後你回來 debug,會想問一句:「這名字誰取的?」

幫 Resource 建立 Method,串起 Lambda

有了 Resource,還得配一個 Method,不然就像老闆給你需求卻沒給時程,純屬浪費生命。
所以 點 Create method
https://ithelp.ithome.com.tw/upload/images/20251006/20141071HVcDHUDqNT.png

這裡我們選最簡單的:GET。因為 GET 有個最大優點:你只要把網址丟到瀏覽器,就能測試。
不用寫 curl,不用開 Postman,甚至不用拜託同事幫忙 debug。

  • Integration type:選 Lambda Function,因為我們後台要接的就是 Lambda。
  • Lambda Proxy Integration:這次我們只是回傳 Hello World,開不開都沒差。
    不過如果你未來要傳參數進 Lambda,這東西要是忘記打勾,你就會開始懷疑人生。
  • Lambda Function:挑一下 region,然後選出我們之前建立的 Hello World Lambda
    記住,別選錯,不然你呼叫的是別人的 Lambda,結果噴出來一堆奇怪回傳值,最後你會不敢承認是你設定的哦!
    https://ithelp.ithome.com.tw/upload/images/20251006/20141071RX8OIcXtzR.png

API Gateway 的部署:上線才是真正的考驗

建立完 Resource + Method,回到主畫面,接下來重頭戲來了:點右上角的 Deploy API
https://ithelp.ithome.com.tw/upload/images/20251006/20141071eb9hCus8GZ.png

這時候系統會問你要部署到哪個 Stage

  • 正式環境?取名 prod,這名字應該夠明顯了吧 。
  • 測試環境?叫 QA 就好。
  • 千萬別取「final」或「new」,因為最後一定會變成 final_final_ok_real_final_v2
    https://ithelp.ithome.com.tw/upload/images/20251006/20141071KqomHjG2yA.png

部署完,AWS 會很貼心地跳出一條綠色通知,告訴你:「你成功了!」
不過我們都知道,真正的考驗還在後面。
部署成功後,你會拿到一個 Invoke URL。這就是你 API Gateway 的出入口。
https://ithelp.ithome.com.tw/upload/images/20251006/20141071x6QRM42EOu.png
假設你的 Resource 叫 /hello,Stage 叫 prod,那最後的網址會長這樣:
https://b5ou0dlsdc.execute-api.us-east-1.amazonaws.com/prod/hello

測試:Hello from Lambda

這時候,請各位打開你忠實的 Chrome 瀏覽器。
把剛剛拿到的那個 Invoke URL 複製貼到網址列 → 按下 Enter
https://ithelp.ithome.com.tw/upload/images/20251006/201410719RmPUJOoo0.png

如果一切順利,畫面上就會跳出:

Hello from Lambda

看到這串字,就代表 API Gateway 已經成功把請求丟給 Lambda,Lambda 也很乖地回傳給你。
換句話說,這就像你傳了一個 Jira ticket,後端真的修好還回報你——夢想成真。

上以這是 API Gateway + Lambda 的「Hello World 起手式」。
學會了這個,你就能開始:

  • 建立更多 Resource,像 /goodbye/coffee/老闆不要再來
  • 幫不同 Resource 配不同 Method,慢慢湊出一個完整的 API。
  • 最重要的是:不用再開一台 EC2。這代表什麼?代表月底帳單少一點,財務長不會衝過來吼你:「這個月又爆預算了!」

明日預告

今天先暖身。明天我們要更進一步:

  • 怎麼傳參數給 Lambda
  • 怎麼用 POST Method 讓 API 不只是 Hello World
  • 還會實戰串接 TelegramLine,讓你體驗一下什麼叫做「老闆一傳訊息,Lambda 就自動幫你回『重開機就好了啦』」

所以,請各位工程師朋友,今天先好好睡,明天繼續爆肝。

最後要說
到囉!到囉!下車囉!!!


上一篇
Day 25 - Amazon API Gateway 雲端界的 API 大門
下一篇
Day 27 - API Gatway 與 Lambda 的參數傳遞指南 - GET 篇
系列文
最適合小型工作室精打細算的服務使用法29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言