正如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),它会被正确记录。
这可能是什么问题?
答案 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。