10

作为我遇到的上一个问题的步骤之一,我需要查看一些 Lambda@Edge 的日志,但我无法在任何地方找到它们。

根据Lambda@Edge 上的文档:

当您在排查错误时查看 CloudWatch 日志文件或指标时,请注意它们显示或存储在最接近函数执行位置的区域中。因此,如果您的网站或 Web 应用程序的用户位于英国,并且您有一个与您的分配关联的 Lambda 函数,那么您必须更改区域以查看伦敦 AWS 区域的 CloudWatch 指标或日志文件。

我试图查找日志的 lambda 函数位于us-east-1(由 CloudFront 强制执行,因为它用作分发的事件处理程序),而我在加拿大,所以我假设最近的区域是ca-central-1. 但是由于我不是在 开发ca-central-1,所以我在那个区域没有任何日志组。在任何情况下,我都看不到我的 Lambda@Edge 的日志。为了完整起见,我检查了所有区域,但找不到 lambda 函数的任何日志痕迹。为了清楚起见,我正在寻找一个带有 lambda 函数名称的日志组。

我很肯定应该有日志,因为我console.log()的代码中有日志,而且我可以下载请求的内容(lambda 函数负责选择保存内容的 S3 存储桶),这意味着 lambda 函数已成功执行。如果不是,我应该无法获得 S3 内容。

在哪里可以找到我的 Lambda@Edge 函数的日志?

4

2 回答 2

17

对于可能遇到相同问题的其他任何人,请使用同一文档页面中提到的脚本来查找您的日志组:

FUNCTION_NAME=function_name_without_qualifiers
for region in $(aws --output text  ec2 describe-regions | cut -f 4) 
do
    for loggroup in $(aws --output text  logs describe-log-groups --log-group-name "/aws/lambda/us-east-1.$FUNCTION_NAME" --region $region --query 'logGroups[].logGroupName')
    do
        echo $region $loggroup
    done
done

创建一个文件,将上面的脚本粘贴到其中,将 替换为function_name_without_qualifiers您的函数名称,使其可执行并运行它。它将为您找到 Lambda@Edge 的区域和日志组。这里学到的教训是日志组不像普通日志组那样命名。相反,它遵循以下结构:

/aws/lambda/${region}.${function_name}
于 2019-01-08T17:02:22.620 回答
2

的格式似乎log describe-log-groups也发生了变化。当我尝试脚本时,它什么也没返回。但是使用“/aws/lambda/$FUNCTION_NAME”而不是“/aws/lambda/us-east-1.$FUNCTION_NAME”,脚本返回具有以下结构的组列表:

${region} /aws/lambda/${function_name}
于 2021-03-11T10:09:38.577 回答