我有一个具有默认行为和以下功能关联的 Cloudfront 发行版:
origin request: Lambda@Edge / arn:aws:lambda:us-east-1:...:function:*functionName*:4
我可以在我的 lambda 函数版本 4 的触发器选项卡中看到 CloudFront 触发器:
Event type: origin-request
Include Body: Yes
Path pattern: *
Service principal: replicator.lambda.amazonaws.com
Statement ID: replicator.lambda.GetFunction
我的函数代码如下所示:
'use strict';
exports.handler = (event, context, callback) => {
console.log("context: ", context);
console.log("event: ", event);
我使用分发域名向我的 Cloudfront 分发发出了 GET 请求,这是我使用 AWS CLI 在日志中找到的内容:
2023-04-18T20:50:37.021Z e52078b4-2efa-40a8-9a28-51ed50ac0132 INFO event: {}
这里的活动怎么会是空的?
这是一个双重答案。
us-east-1
,而我的执行区域是us-east-2
),空事件日志不是来自我的 lambda@edge 函数的正确执行(我不确定它们来自哪里来自,也许是函数的初始化)。us-east-2
中看到正确的日志并且正确传递了event
参数。为了允许 lambda 函数创建/写入日志,我必须向它添加
AWSLambdaEdgeExecutionRole
角色(在 lambda/configuration/permissions/execution role -> edit
下),它应该如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}