lambda @ edge日志和调用计数未显示?

时间:2018-03-27 13:31:34

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

我创建了云端分布,并使用触发器

附加了lambda
`Event type: viewer-requestPath pattern: something/index.html`

 Event type: origin-requestPath pattern: something/index.html

根据我的lambda,当我点击端点时,它会重定向到我想要重定向的页面。

但我无法在任何地区看到我的lambda日志。

它也没有显示调用次数。

有没有人遇到过这个问题?

这是我的lambda代码

'use strict';

exports.handler = (event, context, callback) => {
    /*
     * Generate HTTP redirect response with 302 status code and Location header.
     */
    console.log('event',event);
    const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: 'http://<domainname>/something/root.html',
            }],
        },
    };
    callback(null, response);
};

2 个答案:

答案 0 :(得分:3)

像这样修改你的功能:

const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: 'http://<domainname>/something/root.html',
            }],
            'x-lae-region': [ { key: 'x-lae-region', value: process.env.AWS_REGION } ],
        },
    };

这样做的目的是捕获lambda函数运行的区域 - 它将在测试期间显示us-east-1,但在部署后显示准确的值。

您的浏览器,curl等捕获的响应现在将包含x-lae-region: some-aws-region,以指示链接到正在处理您的特定请求的边缘的区域。检查该特定区域的日志 - 您应该在那里看到日志和调用。

另请注意,对于Origin Request(但不是Viewer Request)触发器,CloudFront会缓存Lambda生成的响应,因此只有在缓存未命中时才会调用该函数。如果CloudFront缓存了响应,则触发器不会触发 - 缓存的响应在不联系原点的情况下提供。如果您使此功能生效并且您没有看到响应中的更改,那么您几乎肯定会查看缓存的响应,并且希望执行失效。

答案 1 :(得分:1)

我遇到了一个非常相似的问题,这使我离开了几个小时。对于Lambda @ Edge,AWS控制台选项卡中Lambda指标上的数据似乎对于调用和日志而言并不准确。至少他们还不完整。

在此选项卡上,我仅看到与源自控制台的“测试”事件调用相关的指标。我可以在将Lambda部署到的同一区域(名称为us-east-1.LambdaName-EdgeLambda-14DOC7T1Y1SGR)中的CloudWatch中找到我的完整调用指标,而测试调用则在减去该区域的相似指标下列出。日志还以Lambda部署到的区域命名。例如,/ aws / lambda / us-east-1.LambdaName-EdgeLambda-14DOC7T1Y1SGR。我的测试日志在单独的日志组中列出,名称中没有该区域。