AWS无服务器-将Cloudfront POST请求修改为s3网站来源的GET请求

时间:2019-01-13 01:40:04

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

我有一个CloudFront发行版,其来源设置为s3网站终结点(在s3上提供静态Web应用程序)

现在,我在s3上的Web应用程序需要一些用户信息,这些信息仅通过iframe的POST请求提供。

我认为可以在ViewerRequest阶段使用Lambda @ edge函数来捕获用户信息,然后将请求修改为GET并将令牌附加到源,然后再请求源,从而使s3能够服务。

但是我似乎无法使其正常工作。这有可能吗?

1 个答案:

答案 0 :(得分:1)

您无法在Lambda @ Edge触发函数中更改HTTP方法,因为它是只读的。

  

方法(只读)

     

查看器请求的HTTP方法。

     

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-event-structure-request

您可以 要做的是使用AWS开发工具包从触发函数中向S3发送请求,然后使用检索到的对象内容到generate a response directly from the trigger function

请注意,您可以生成limits的响应大小-对于“查看器请求”,该大小为40KB。对于原始请求,它是1MB。

当然,您不一定需要从S3获取内容。您可以从任何地方获取它,也可以将其嵌入到函数本身中。

使用此设置,由于该函数正在生成响应,因此CloudFront永远不会将实际的POST请求转发到S3。