[英]AWS::Serverless::Function lambda version for Lambda@Edge event handler
[英]Serverless AWS Lambda@Edge: How to debug
我有一個python Lambda@Edge
function 部署了serverless
,使用測試功能可以正常工作:
僅供參考,它設置為查看器請求:
functions:
cfLambda:
handler: handler.lambda_handler
events:
- cloudFront:
eventType: viewer-request
如果我 go 到CloudWatch
,我可以看到日志:
現在,當我使用cURL
進行測試時,它以503
失敗:
HTTP/2 503
content-type: text/html
content-length: 1019
server: CloudFront
date: Mon, 05 Apr 2021 07:24:45 GMT
x-cache: LambdaExecutionError from cloudfront
via: 1.1 XXXXXXXXXXXXXXXXXX.cloudfront.net (CloudFront)
x-amz-cf-pop: AMS50-C1
x-amz-cf-id: 4vYpBnOGd6yfgowoSpiCyBkh5cbV1g3IJf1H2Eheln89MpEnScL-1g==
但是這次我在 CloudWatch 中沒有任何日志。 問題 1:如何在 CloudWatch 中顯示我的 Lambda@Edge CloudFront 調用跟蹤?
如果我閱讀Lambda@Edge 調試指南,它會說503 狀態代碼是:
如果我查看控制台測試,它們僅消耗 ~220ms 和 ~75MB ,所以我認為我們遠低於查看器請求的 5 秒 / 128MB 限制
如果我查看CloudFront logs
,它們似乎沒用,因為它們只是確認 503:
E2HX7F6YEZN897.2021-04-04-16.a77a21e1:2021-04-04 16:34:12 SEA19-C3 389 35.247.33.169 HEAD XXXXXXXX.cloudfront.net / 503 - Mozilla/5.0%20(Windows%20NT%205.1)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/41.0.2224.3%20Safari/537.36 - - LambdaExecutionError AcM5SX3ggB53fmjXO83xND_Lw3-eHXd8dlIZGEO53XaDMjuctRw== example.org https 223 0.021 - TLSv1.3 TLS_AES_128_GCM_SHA256 LambdaExecutionError HTTP/1.1 - - 51810 0.021 LambdaExecutionError text/html 1019 - -
Q2:有沒有辦法增加 CloudFront 日志的詳細程度(我找不到)?
Q3:如果我無法在 CloudWatch 中獲得 CloudFront Lambda@Edge 調用(Q1=否)並且我無法增加 CloudFront 日志的詳細程度(Q2=否),我該如何進一步調試?
Lambda@Edge
function 必須部署到us-east-1
區域。
x-amz-cf-pop
header 提示了請求的執行位置。 您可以在此處參考此非官方列表。
對於us-east-1
,可以在CloudWatch
中的/aws/lambda/<Your-function-name>
組下找到日志。 對於任何其他區域,日志組將為/aws/lambda/us-east-1.<Your-function-name>
。 如果您知道區域,那么 select 是相應的區域。 Go 到CloudWatch
並搜索相應的日志組。
您還可以從CloudFront
頁面導航到相應的日志。 Go 到Monitoring
部分 -> Choose your Distribution
-> View Distribution Metrics
-> Lambda@Edge Errors
。 當您在數據點上進行 hover 時,該圖表將顯示所有區域的錯誤。 一旦您知道發生錯誤的區域,您可以 select 相同,然后是Lambda
function 最后單擊View logs
。 請參考下圖。
看看這里的一些官方例子。 對於viewer-request
事件,操縱request
的事件是相關的。
CloudFront
日志可通過/aws/cloudfront/LambdaEdge/<YourDistributionId>
訪問
希望這可以幫助您進一步進行。
這里有幾個關鍵的考慮因素。
首先,重要的是要注意邊緣函數是如何工作的。
部署后,您的邊緣 function 將在所有 AWS 區域中復制。
當 Cloudfront 請求進入時,它會被路由到離用戶位置最近的可用區域。
因此,function 在距離調用者最近的區域而不是初始部署區域中執行其日志。
有時這可能有點違反直覺。 總部可能設在英格蘭,但例如更靠近愛爾蘭地區。
接下來,您的 lambda 函數可能沒有登錄到 Cloudfront 所需的權限。
使用 Cloudfront 日志時,您需要明確授予 function 日志記錄權限。
考慮以下 IAM 角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:*:*:log-group:*:*"
]
}
]
}
此角色使 function 能夠創建日志組、日志流並將事件放入 Cloudfront 和 Cloudwatch 的日志中。
注意通配符,這是因為在部署到邊緣時,您需要使用 arn arn:aws:logs:*:*:log-group:/aws/cloudfront/*
提供Cloudfront 特定權限。
您是否嘗試過 AWS X 射線? https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html
它是一個分布式跟蹤工具,可讓您調試 lambda 函數。 可能需要一些設置開銷,但從長遠來看可能會派上用場
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.