gpt4 book ai didi

amazon-web-services - AWS Lambda@edge。如何从 S3 读取 HTML 文件并将内容放入响应正文中

转载 作者:行者123 更新时间:2023-12-03 15:29:05 24 4
gpt4 key购买 nike

具体来说,在原始响应触发函数(EX。带有 404 状态)中,如何读取存储在 S3 中的 HTML 文件并将其内容用于响应正文?

(我想像 CloudFront 一样手动返回自定义错误页面,但根据 cookie 选择它)。

注意:S3 中的 HTML 文件存储在我网站的同一个存储桶中。 OAI 启用。

非常感谢!

最佳答案

Lambda@Edge 函数目前不能直接访问来自原点的任何正文内容。

您需要授予您的 Lambda 执行角色从存储桶读取所需的权限,然后使用 s3.getObject() from the JavaScript SDK从桶中获取对象,然后使用它的主体。

SDK 已在环境中,² 因此您无需将其与您的代码捆绑在一起。您可以只需要它,并在处理程序之外全局创建 S3 客户端,这样可以节省后续调用的时间。

'use strict';
const AWS = require('aws-sdk');
const s3 = new AWS.S3({ region: 'us-east-2' }); // use the correct region for your bucket

exports.handler ...

请注意,更新 Lambda@Edge 函数的麻烦之一是 Lambda 控制台给人的印象是重新部署它非常复杂……但您不必使用 Lambda 控制台来执行此操作。 “启用触发器和复制”复选框的措辞给您的印象是它正在做一些重要的事情,但事实证明......事实并非如此。更改 CloudFront 配置中的版本号并保存更改可实现相同的目的。

创建新版本的函数后,您只需转到 CloudFront 控制台中的缓存行为并编辑触发器 ARN 以使用新版本号,然后保存更改。

¹目前,但我已将此作为功能请求提交;这可能允许响应触发器接收响应正文的副本并重写它。它必然会限制为 Lambda API 的最大大小(或更小,因为生成的响应当前受到限制),并且可能不适用于这种情况,因为我假设您可能正在获取特定于语言的响应。

²已经在环境中。如果我没记错的话,很久以前,Lambda@Edge 不包含 SDK,但现在它总是存在。

关于amazon-web-services - AWS Lambda@edge。如何从 S3 读取 HTML 文件并将内容放入响应正文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51230768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com