Lambda @ Edge未登录云端请求

时间:2017-09-30 13:19:58

标签: amazon-web-services aws-lambda amazon-cloudfront aws-lambda-edge

正如Docs中所述,我为Viewer Response的云端触发器设置了Lambda @ edge。

lambda函数代码:

'use strict';

exports.handler = (event, context, callback) => {
    console.log('----EXECUTED------');

    const response = event.Records[0].cf.response;      
    console.log(event.Records[0].cf_response);

    callback(null, response);
};

我已为Viewer Response事件适当设置了触发器。

现在,当我通过cloudfront发出请求时,必须将其记录在cloudwatch中,但它并不存在。
如果我做一个简单的Test Lambda Function(使用Button),它会被正确记录。

这可能是什么问题?

3 个答案:

答案 0 :(得分:23)

部署Lambda @ Edge功能时,它将使用Lambda Edge功能的版本副本部署到世界各地的所有区域

当用户请求最近的pop / edge时,将调用与最近区域相关联的 lambda 。与这些区域关联的Lambda的所有日志都将在区域cloudwatch 日志中。

例如,

如果用户正在点击us-east-1区域,则其关联日志将为us-east-1。

要准确了解您的函数在哪个位置(在哪个区域上),您可以运行此AWS CLI脚本:

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

您必须使用lambda @ edge的名称替换“function_name_without_qualifiers”。 Link

希望它有所帮助。

答案 1 :(得分:6)

对于那些还搜索了日志但无法使用@Kannaiyan提供的脚本找到它们的人。

TL; DR

将此IAM角色用于Lambda函数

{
"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:*:*"
        ]
    }
  ]
}

====

确保您具有正确的IAM角色。如果先创建一个Lambda,然后将其部署到Lambda @ Edge,则自动生成的IAM角色将仅具有足够的权限以将单个区域中的数据记录到以Lambda函数命名的日志组中,而使用Lambda @ Edge意味着它将尝试将不同区域的数据记录到“ / aws / lambda /”中。日志组。因此,有必要更改IAM角色以允许创建日志组并在不同区域中写入访问权限。在TL; DR部分中,我提供了示例IAM角色,但请确保缩小对生产中日志组特定列表的访问权限

答案 2 :(得分:1)

根据AWS Documentation使用Lambda @ Edge函数:

  

当检查日志文件时,请注意,日志文件存储在最靠近执行功能位置的区域中。因此,如果您从伦敦访问某个网站,则必须更改区域以查看伦敦区域的CloudWatch Logs。