用于动态路由的 AWS 边缘功能不起作用

AWS Edge function for dynamic routing not working

我在设置一个使用 Cloudfront@Edge 函数更改请求的自定义来源同时保留域名的简单示例时遇到了问题。

按照这个 guide and this 我有以下设置:

'use strict';

module.exports.dynamic_routing = (event, context, callback) => {
  const request = event.Records[0].cf.request;  
  const originUSA = "custom-us.us-west-1.elb.amazonaws.com";
  const originEU = "custom-eu.eu-central-1.elb.amazonaws.com";

  var destDomain = originUSA;
 
  const custom_header = request.headers['custom-header-value'];
  if (custom_header && custom_header.value == "DE") {
      destDomain = originEU;
  }
  
  request.origin = {
      custom: {
          domainName: destDomain,
          port: 80,
          protocol: 'http',
          path: request.uri,
          readTimeout: 20,
          keepaliveTimeout: 5,
          customHeaders: {}
      }
  };
  request.headers['host'] = [{ key: 'host', value: destDomain}];
  
  callback(null, request);
};

我可以正确导航到两个负载均衡器并看到正确的内容,这证明负载均衡器 + 各自的 lambda 函数设置正确。

如果我导航至 mydistr.cloudfront.net,则会显示“美国”内容,这是正确的。但是,如果发送包含我的 custom-header-value: DE 的 Curl/Postman 请求,我会一直看到美国信息:

当我期望改变原点时。

我错过了什么?

嗯...解决方法很简单。

所有 headers 都是数组,因此问题出在这里:custom_header.value == "DE" 实际上应该是 custom_header[0].value == "DE".