查看器请求和查看器响应均进行一次Lambda @ Edge函数调用

时间:2018-09-20 09:17:13

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

我目前有两个Lambda @ Edge函数:

  • 语言重定向:根据查看器请求调用,返回302或将请求传递给CloudFront
  • HSTS:在查看器响应上调用,添加响应标头

当前流量为:

viewer request -> language-redirect

if 302 -> viewer response
if not 302 -> pass on to CloudFront -> HSTS -> viewer response

是否可以将两个功能合并为一个功能(合并的功能),每个查看器请求仅调用一次功能?

viewer request -> combined

if 302 -> viewer response
if not 302 -> pass on to CloudFront -> combined -> viewer response

目标是一次调用同一函数,而不一次调用同一函数。

1 个答案:

答案 0 :(得分:2)

CloudFront的Lambda @ Edge增强功能有4个不同的触发事件。他们与缓存的交互以粗体显示,并在以后变得很重要:

  • 查看器请求-在请求到达时检查缓存之前,对每个请求触发; 自发生成的响应未缓存
  • 原始请求-仅在高速缓存未命中时触发,然后将请求发送到源; 如果此触发器生成响应,则不会联系来源,并且响应将存储在缓存中(如果可缓存的话)
  • 原始响应-在响应从源返回时,在检查响应的可缓存性并将其存储在缓存中之前,仅在缓存未命中时触发; 如果此触发器修改了响应,则修改后的响应就是存储在缓存中(如果可缓存的话)
  • 查看器响应-在响应返回给查看器之前立即触发,无论缓存命中还是未命中; 此触发器对响应所做的任何修改都不会被缓存

可以正确地编写一个Lambda函数以了解它在事务周期内的何处被触发,可以在这些点的任意组合处进行触发-但由于这些事件都在不同的时间发生,因此一次调用触发函数将无法处理多个事件。

但是,请注意上方的粗体字。在许多情况下,您可以通过使用原始端触发器来大幅减少触发器调用的次数。如上所述,使用这些触发器会导致触发器的响应可缓存-因此,当您的重定向触发器触发时,如果它生成了重定向,则可以对重定向进行缓存,并且下一个请求不需要在以下位置调用触发器所有。同样,将HSTS标头添加到源响应触发器中的可缓存响应中意味着将来的缓存命中将返回带有HSTS标头的修改后响应,而不会触发触发器。