30天鐵人賽介紹 AWS 雲端世界 - 20: Lambda 搭配 API Gateway,實現 Serverless 架構可以被外部呼叫觸發
What is API Gateway
API Gateway 是一種全託管的服務,可讓開發人員輕鬆地建立、發佈、維護、監控和保護任何規模的API。此服務主要是提供一個網址讓外部可以直接呼叫到 AWS 原本不對外開放的服務街口(如 Lambda 的事件驅動架構就算是一個代表性)。
計費的部份就有三個部份:呼叫次數、流量大小與附加服務(如提供快取功能等),
在免付費的方案內包含了最多 12 個月每月 100 萬次 API 呼叫. 詳細計價方式請參考
。
在昨天的分享裡面介紹了 Lambda 與 無伺服器架構如何放置程式上去運行,但觸發的方式都是被動地等待事件被呼叫才進行,如果想要以傳統 API 方式進行呼叫,則必須搭配 API Gateway ,運用其 API Event Trigger 的方式去執行對應的動作。
Hands on Lab
這邊我們將延續昨天的 Lab ,提供一個可以處理 HTTP 的 API 接口給 Lambda 並請他執行 Hello 這項動作。
這邊可以加入 Amazon.Lambda.APIGatewayEvents 幫我們將 Lambda 服務公開成 API 給外部呼叫:
dotnet add package Amazon.Lambda.APIGatewayEvents
我們也可以手動加入專案後在透過還原指令將套件下載回來:
dotnet restore
接著我們將修改一下 handler.cs 為以下的內容:
1 | using System; |
而因為我們因為要使用 API Gateway 則需要修改到 serverless.yaml 將服務啟用並設定指定的路徑:
serverless.yaml
1 | # Welcome to Serverless! |
這邊如果設定的縮排不對會有錯誤或是部屬不如預期的情況,所以請仔細檢查:
而修改完後別忘記需要再次打包壓縮檔後才執行部屬指令:
dotnet lambda package --configuration release --framework netcoreapp1.0 --output-package bin/release/netcoreapp1.0/deploy-package.zip
最後我們透過部屬指令即可成功部屬上去:
而現在我們就可以透過 url 來直接看到回應內容了:
而當我們登入 Lambda 後可以看到服務的架構已經從原先的:
變成如下:
而從 API Gateway 也可以看到多了一個端點(endpoint):