Cloudfront 和多个 Lambda@Edge 函数

Cloudfront and multiple Lambda@Edge functions

我有一个指向自定义 url 的 Cloudfront 分布。 在该发行版中,我设置了 2 个 lambda 函数关联。 1 在 vi​​ewer-request 的 Cloudfront 事件上查询参数存储并重定向到正确的 url 另一个在 origin-response 的 Cloudfront 事件上,从调用中收集响应统计信息。

查看器请求函数如下 - 注意 虚拟 urls 用于问题目的

exports.handler = async (event, context) => {
    const origin = "main";
    const primaryUrl = "https://www.google.com";
    const drUrl = "https://www.yahoo.com";

    let url = primaryUrl;

    if (origin != "main") {
        url = drUrl;
    } else {
        url = primaryUrl;
    }

    const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: url,
            }],
        },
    };

    return response;
};

origin response lambda 现在非常简单 var AWS = require('aws-sdk'); AWS.config.update({ 地区: 'us-east-1' }); var cloudwatch = new AWS.CloudWatch();

exports.handler = async (event, context) => {
    console.log("Custom Metrics Event");
    console.log(JSON.stringify(event));

    const response = {
        status: '200', 
    };

    return response;
};

当我调用云端分发域时,查看器请求 lambda@edge 启动但原始响应 lambda 未触发,我在 cloudwatch 中看不到任何内容 如果我删除 viewer-request lambda - origin-response lambda 会触发

我是不是做错了什么或者有没有人有什么建议?

谢谢 达米恩

@ChrisWilliams 的评论是准确的 我更改了我的代码以在原始响应中执行重定向,然后一切正常