我將 AWS Lambda@Edge 函數與作為觸發條件的 Amazon CloudFront 分發關聯。我無法在 AWS CloudTrail 日誌串流中填充的 Amazon CloudWatch 中找到 Lambda@Edge 函數的執行日誌。我如何對它們遺失的原因進行疑難排解?
如果與 Lambda@Edge 函數關聯的 AWS Identity and Access Management (IAM) 角色缺少所需的許可,則 Lambda@Edge 日誌無法填充。如果您從主控台檢查不正確的區域,日誌也可能會顯示為遺失。
解決方案
檢查與 Lambda@Edge 函數關聯的 IAM 角色的許可
驗證函數執行角色是否具有建立日誌群組和串流以及將日誌事件放入任何 AWS 區域所需的許可。如果與 Lambda 函數關聯的執行角色沒有所需的許可,日誌交付會失敗。
連接至 Lambda@Edge 執行角色的 IAM 政策範例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}
如需有關將資料傳送至 CloudWatch 日誌所需許可的詳細資訊,請參閱設定 Lambda@Edge 的 IAM 許可和角色。
檢查啟用 Lambda 函數的區域中的日誌
啟用 Lambda@Edge 函數後,Lambda 會在距啟用函數位置最近的 AWS 區域建立 CloudWatch 日誌串流。日誌群組名稱的格式為 /aws/lambda/us-east-1.function-name,其中 function-name 是 Lambda 函數的名稱。
若要尋找 Lambda@Edge 函數日誌,您必須判斷呼叫函數的區域,然後檢視日誌。
若要尋找叫用函數的區域,請執行以下操作:
- 登入 AWS 管理主控台,然後開啟 CloudFront 主控台。
- 在 Telemetry (遙測) 類別下選擇 Monitoring (監控)。
- 選取 Lambda@Edge 標籤。
- 選取 Lambda@Edge 函數,然後選擇 View function metric (檢視函數指標)。
從監控頁面,我們現在可以看到我們的複本函數在特定時段內被叫用的區域。從這裡,我們可以在每個區域找到我們函數的 CloudWatch 日誌。若要這樣做,請選取 View function logs (檢視函數日誌),然後選取叫用函數的區域。
**注意:**如果您在特定區域中看到錯誤,請選擇圖表中顯示錯誤的區域。若要進一步了解,請參閱判斷 Lambda@Edge 區域。
或者,若要判斷請求路由到的邊緣節點,請檢查 x-amz-cf-pop 回應的標頭值。然後,在 CloudWatch 中檢查相應的區域以查看日誌檔案。例如,如果 x-amz-cf-pop 設定為 IAD89-P1,則表示在 IAD 為機場代碼的 us-east-1 區域為些請求提供服務。
當 Lambda 傳回對 CloudFront 的非無效回應時,CloudFront 會推送寫入日誌檔案的錯誤訊息。然後,CloudFront 會推送至執行 Lambda 函數的 CloudWatch 區域。日誌群組具有下列格式:/aws/cloudfront/LambdaEdge/DistributionId,其中 DistributionId 是分發的 ID。若要尋找 CloudWatch 日誌檔案所在的區域,請參閱判斷 Lambda@Edge 區域。
相關資訊
設定 Lambda@Edge 的 IAM 許可和角色
Lambda@Edge 函數的 CloudWatch 指標和日誌
判斷您的帳戶是否推送日誌到 CloudWatch