不過,事情常常不是這麼順利,常常我們需要花一大堆時間來debug
你可能遇到過這些問題:
401 Unauthorized
這時候,我們就需要 CloudWatch,來幫助我們「看到系統裡發生了什麼」。
CloudWatch 是 AWS 的 監控與觀測服務,主要包含三大功能:
如果有正在活動中的資源,可以透過CloudWatch DashBoard 輕鬆創立 Metrics 監控儀錶板
console.log()
、print()
之類的 output 的輸出會自動寫進 CloudWatch Logs今天我們主要聚焦在 Logs,因為這是 debug API Gateway + Lambda 的關鍵。
當我們的系統(例如 Lambda、API Gateway)有輸出 log 時,AWS 會自動把這些 log 丟到 CloudWatch Logs。
但在 CloudWatch 裡,log 的組織方式有一些專有名詞需要先理解:
/aws/lambda/MyFunctionName
/aws/api-gateway/MyApiName
圖為一個 API Gateway 資源的 Log Streams,而 Stream 之中即是 Events
print("Hello World")
,這行會出現在 Event。這兩個 Event 分別紀錄 API Gateway 將請求轉發給 Lambda 並成功獲取回覆
這樣一層一層的結構,可以幫助我們快速找到 log,並且設定 Alarm(例如某個 Log Group 裡面出現「ERROR」字樣就通知)。
當你建立一個 Lambda 資源時 AWS 會自動幫你開一個 Log Group (如果不小心刪掉了 只要 Lambda Function 被觸發 AWS 又會幫你開回來)
當你在 Lambda 裡面寫下:
def handler(event, context):
print("收到的事件:", event)
return {"statusCode": 200, "body": "Hello"}
這些輸出會自動被收集到 CloudWatch Logs。
你可以在 Console 中:
/aws/lambda/你的Function名稱
API Gateway 預設不會打 log,需要手動開啟:
其實在開啟 CloudWatch Logs 的時候 AWS 實際上做的事情是:
1.給這個資源 (API Gateway) 上傳東西到 CloudWatch 的權限
2.幫你創建 Log Group 方便你看傳了哪一些東西
於是乎為了手動開啟,首先我們要搞定權限問題,也就是創造 IAM Role (如果已經有創建過任意一個就可以跳過)
1.
在創建頁面選擇 Web Service 並輸入 API Gateway
創建完畢之後就可以直接到 AWS Console進行後續設定了 AWS 會根據設定自動幫你套用 IAM Role
如果你用的是 HTTP API 而不是 REST API 設定會更加簡單
這樣你就能看到:
當 log 多了起來,用肉眼翻很累。
這時候可以用 CloudWatch Logs Insights,像 SQL 一樣查詢 log。
但這部分我今天就不介紹啦 有興趣的可以去讀讀看 AWS Document
401 Unauthorized
Lambda 超時
CORS 問題
Access-Control-Allow-Origin
有了 CloudWatch,就可以看見系統裡發生什麼事,只看前端 Debug 遲早會發瘋的
下一篇,我們將回到專案開發,來看看怎麼用 DynamoDB 幫後端 API 加上資料儲存功能