在我的Lambda@Edge源请求函数中,“事件”参数为空

问题描述 投票:0回答:1

我有一个具有默认行为和以下功能关联的 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:  {}

这里的活动怎么会是空的?

amazon-web-services aws-lambda amazon-cloudfront aws-lambda-edge
1个回答
0
投票

这是一个双重答案。

  1. 我在错误的区域读取日志(
    us-east-1
    ,而我的执行区域是
    us-east-2
    ),空事件日志不是来自我的 lambda@edge 函数的正确执行(我不确定它们来自哪里来自,也许是函数的初始化)。
  2. 我没有授予 Lambda 函数在 CloudWatch 中写入和创建日志的适当权限,因此没有生成任何日志。添加这些权限并重新触发我的功能后,我能够在
    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:*:*:*"
            ]
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.