代码之家  ›  专栏  ›  技术社区  ›  Konda

AWS Serverless-将CloudFront Post请求修改为获取S3网站源站请求

  •  0
  • Konda  · 技术社区  · 7 年前

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

    现在我S3上的webapp需要一些用户信息,这些信息只能通过来自iframe的post请求提供。

    我认为可以在viewerRequest阶段使用lambda@edge函数,捕获用户信息,然后在请求源之前修改请求以获取令牌并将其附加到源,从而允许S3服务。

    但是我似乎不能让它工作。这是可能的吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Michael - sqlbot    7 年前

    不能更改lambda@edge trigger函数中的http方法,因为它是只读的。

    方法(只读)

    查看器请求的HTTP方法。

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

    你什么 可以 do是使用awsdk从trigger函数中向s3发送请求,并使用检索到的对象内容,以 generate a response directly from the trigger function .

    注意有 limits 到您可以生成的响应大小——对于查看器请求,它是40KB。对于来源请求,它是1MB。

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

    通过此设置,由于函数正在生成响应,因此CloudFront从不转发 POST 请求S3。