您能否使用 Javascript 以外的语言修改 Lambda@Edge 的 AWS CloudFront 事件上的 URI?

Can you modify the URI on an AWS CloudFront event with Lambda@Edge in a language other than Javascript?

我正在尝试进行一些 AB 测试,在我们的 AWS CloudFront 设置中插入 Lambda 似乎是一个很好的方法。我的公司有 NodeJs 的问题。他们被一些使用它的老开发者烧毁并禁止使用它。

Lambda 支持多种语言,所以没什么大不了的。但是经过一些研究并查看了来源。只有 Javascript 似乎能够与 CloudFront 事件交互并转发请求。所有其他语言的库似乎只发出响应事件,不允许在修改后转发请求。

我是不是遗漏了什么,或者这个场景只支持 JS 吗?

Lambda@Edge 仅支持 Node.js 个运行时。

You must create functions with the nodejs6.10 or nodejs8.10 runtime property.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-requirements-lambda-function-configuration

您对其他运行时的观察 "seem to only emit response events and don't allow for the passing forward of the request after modification" 并不能准确反映所发生的情况。 Node.js 没有任何特殊的 "passing forward" 魔法。 CloudFront 解释来自 Lambda 函数的响应负载以确定如何继续。如果它是请求触发器并且 Lambda 函数 return 的结构类似于请求,则 CloudFront 会继续处理已修改的请求。否则,CloudFront 会将响应负载解释为要 return 发送给调用方的响应。一切都由 CloudFront 对 Lambda 函数的解释处理 returns.

任何 Lambda 运行时在理论上都可以实现相同的目的,但 Lambda@Egde 是为——并且目前只支持——Node.js 运行时而设计的,它们轻巧且快速,因为它们需要,因为 CloudFront 同步调用触发器函数,然后在等待函数 return.

时阻塞(暂停自己的处理)