Cloudfront未使用Lambda函数

问题描述

我正在尝试设置自定义的Cloudfront响应标头。我用nodejs 12.x创建了一个lambda函数,添加了触发器CloudFront,使用正确的ID进行分发,使用*缓存,将事件作为Viewer响应,然后部署。

然后我去了CloudFront>分发> IDxxx>行为>编辑> *它显示了作为查看器响应列出的lambda函数。

当我从该Cloudfront发行版访问任何文件时(本地也禁用了缓存/ CloudFront未命中),该标头从不会在响应中发送。在CloudWatch中,我从“测试”按钮看到了日志,但没有从生产环境中看到日志,因此我假设该功能并未在CloudWatch上执行,尽管它在行为中。

'use strict';

exports.handler = (event,context,callback) => {
    try { 
        console.log("REQUEST");
        const response = event.Records[0].cf.response;
        const headers = response.headers;
         
        response.headers['test'] = [{key: 'test',value: 'test'}];
         
        callback(null,response);
    } catch(err) {
        console.log("ERROR");
        console.log(err);
        
    }
};

编辑:我也确实使用了发布新版本。我认为一旦发布,cloudfront应该会自动使用它?

解决方法

更改lambda函数后,必须先发布它,然后再次部署。

在CloudFront中,它显示lambda函数字符串,例如: arn:aws:lambda:us-east-1:000000000000:function:testfunction:3

结尾“ 3”是版本号。如果您发布了3个版本,则需要显示3。我的仍然设置为1。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...