Ern*_*ano 1 amazon-s3 custom-error-pages amazon-web-services aws-lambda aws-lambda-edge
具体来说,在原始响应触发功能(例如,状态为404)中,如何读取S3中存储的HTML文件并将其内容用作响应正文?
(我想像CloudFront一样手动返回自定义错误页面,但要基于cookie选择它)。
注意:S3中的HTML文件存储在我的网站的同一存储桶中。已启用OAI。
非常感谢你!
Lambda @ Edge函数当前不能¹直接从源头访问任何正文内容。
您将需要授予Lambda执行角色必要的特权,以便从存储桶中读取内容,然后s3.getObject()从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 ...
Run Code Online (Sandbox Code Playgroud)
请注意,更新Lambda @ Edge函数的麻烦之一是,Lambda控制台给人的印象是重新部署它非常烦人……但是您不必使用Lambda控制台来执行此操作。“启用触发器和复制”复选框的措辞给人以为它在做重要的事情,但事实证明……并非如此。在CloudFront配置中更改版本号并保存更改即可实现相同的目的。
创建该功能的新版本后,您只需转到CloudFront控制台中的“缓存行为”并编辑触发器ARN以使用新版本号,然后保存更改。
¹ 目前,但我已将此功能作为功能请求提交;这可能会允许响应触发器接收响应主体的副本并将其重写。它将必然限于Lambda API的最大大小(或更小,因为当前生成的响应受到限制),并且在这种情况下可能不适用,因为我假设您可能正在获取特定于语言的响应。
² 已经在环境中。如果我没记错的话,很久以前,Lambda @ Edge并未包含SDK,但现在它始终存在。
| 归档时间: |
|
| 查看次数: |
1479 次 |
| 最近记录: |