Aws lambda 使用lambdaapi作为存储在S3中的内容的反向代理?

Aws lambda 使用lambdaapi作为存储在S3中的内容的反向代理?,aws-lambda,Aws Lambda,我想在S3之上应用一个反向代理,根据传入的请求做出内容服务决策 S3存储桶设置为网站模式,并以公共方式托管 我显然有更多的逻辑来确定我从哪里得到文件,但希望这能说明我的愿望 这是使用JavaScript,也很乐意使用Go 下面的代码不起作用,但我不确定如何最好地让它工作。我可以派一个arrayBuffer过来吗 module.exports.handler = async (event, context) => { const data = await fetch(S3WebsiteU

我想在S3之上应用一个反向代理,根据传入的请求做出内容服务决策

S3存储桶设置为网站模式,并以公共方式托管

我显然有更多的逻辑来确定我从哪里得到文件,但希望这能说明我的愿望

这是使用JavaScript,也很乐意使用Go

下面的代码不起作用,但我不确定如何最好地让它工作。我可以派一个arrayBuffer过来吗

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
}