Aws lambda 使用lambdaapi作为存储在S3中的内容的反向代理?
我想在S3之上应用一个反向代理,根据传入的请求做出内容服务决策 S3存储桶设置为网站模式,并以公共方式托管 我显然有更多的逻辑来确定我从哪里得到文件,但希望这能说明我的愿望 这是使用JavaScript,也很乐意使用Go 下面的代码不起作用,但我不确定如何最好地让它工作。我可以派一个arrayBuffer过来吗Aws lambda 使用lambdaapi作为存储在S3中的内容的反向代理?,aws-lambda,Aws Lambda,我想在S3之上应用一个反向代理,根据传入的请求做出内容服务决策 S3存储桶设置为网站模式,并以公共方式托管 我显然有更多的逻辑来确定我从哪里得到文件,但希望这能说明我的愿望 这是使用JavaScript,也很乐意使用Go 下面的代码不起作用,但我不确定如何最好地让它工作。我可以派一个arrayBuffer过来吗 module.exports.handler = async (event, context) => { const data = await fetch(S3WebsiteU
module.exports.handler = async (event, context) => {
const data = await fetch(S3WebsiteURL + event.path)
const buffer = await data.arrayBuffer()
return {
headers: data.headers,
body: buffer,
statusCode: 200
}
}
我会用
尝试不使用标题,如果可以,请添加支持。我会使用
尝试不使用标题,如果可以,请添加支持。我发现很难使用Lambda来代理数据-至少使用API网关,它需要在不同点使用base-64格式的二进制数据,具体取决于您的设置方式。自从我上次尝试这样做以来,他们已经改进了很多,所以希望其他人能根据最近的经验来回答 如果您的内容服务决策仅限于访问控制(您不需要转换正在服务的数据),那么您可以将lambda用作URL提供程序而不是内容提供程序-关闭S3 bucket的公共共享,使用S3API访问项目,并让lambda调用
S3.getSignedUrl()
获取指向实际内容的链接。这意味着只有lambda的调用者才有一个指向您想要保护的内容的有效URL,并且根据您的应用程序,您可以将预签名URL上的超时设置为足够短,您不必担心它被共享
这里的优点是,由于内容本身没有通过lambda代理,因此lambda运行时和内存成本可以更低,性能应该更好。我发现很难使用lambda代理数据-至少使用API网关,它需要在不同的点上使用base-64格式的二进制数据,具体取决于您的设置方式。自从我上次尝试这样做以来,他们已经改进了很多,所以希望其他人能根据最近的经验来回答 如果您的内容服务决策仅限于访问控制(您不需要转换正在服务的数据),那么您可以将lambda用作URL提供程序而不是内容提供程序-关闭S3 bucket的公共共享,使用S3API访问项目,并让lambda调用
S3.getSignedUrl()
获取指向实际内容的链接。这意味着只有lambda的调用者才有一个指向您想要保护的内容的有效URL,并且根据您的应用程序,您可以将预签名URL上的超时设置为足够短,您不必担心它被共享
这里的优点是,由于内容本身不会通过lambda进行代理,因此lambda运行时和内存成本会更低,性能也会更好。这种方法的问题是文件可以是任何内容。图像、图标等。这种方法的问题是文件可能是任何东西。图像、图标等。
var rp = require('request-promise');
const htmlString = await rp(S3WebsiteURL + event.path);
return {
body: htmlString,
statusCode: 200
}