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

Meh*_*ran 10 amazon-web-services amazon-cloudwatch aws-lambda-edge

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

根据Lambda@Edge 上的文档

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

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

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

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

Meh*_*ran 15

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

FUNCTION_NAME=function_name_without_qualifiers
for region in $(aws --output text  ec2 describe-regions | cut -f 3) 
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
Run Code Online (Sandbox Code Playgroud)

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

/aws/lambda/${region}.${function_name}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,describe-regions 的输出数据的格式已更改,您现在需要 `cut -f 4` (6认同)
  • CloudFront 有两层边缘——外部“全局”边缘和内部“区域”边缘。缓存未命中从全局到区域再到源,并且 Lambda@Edge 函数通常在 [区域边缘](https://aws.amazon.com/cloudfront/features/#edge-位置)离观看者最近的位置。测试表明您应该发现这些通常属于 us-east-1 或 us-east-2,因为它们靠近加拿大,即使该函数实际上是在 us-east-1 中声明的。它被复制到所有其他人。 (2认同)