当前位置: 首页 > 知识库问答 >
问题:

如何将 s3 内容请求重定向到 lambda?

鲜于仰岳
2023-03-14

我正在按照这个教程使用s3和lambda实现即时生成缩略图。我被困在将不存在的请求重定向到lambda上

我的s3存储桶是私有的,我使用带有Cognito idToken的预签名url来访问其内容,它可以工作。

现在,如果我向尚未生成的缩略图(s3中不存在)发出请求,我希望s3将请求重定向到lambda。我不知道如何做这件事。

以下是s3路由角色

<RoutingRules>
  <RoutingRule>
  <Condition>
  <KeyPrefixEquals/>
  <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
  <Protocol>https</Protocol>
  <HostName>MY_LAMBDA_DOMAIN</HostName>
  <ReplaceKeyPrefixWith>dev/photos?key=</ReplaceKeyPrefixWith>
  <HttpRedirectCode>307</HttpRedirectCode>
</Redirect>

> < li>

当我使用预先签名的url访问不存在的缩略图时,它显示403错误,因此我尝试使用s3endpoint预先签名URL

const s3 = new AWS.S3({endpoint: 'http://s3-website.us-east-2.amazonaws.com'})
s3.getSignedUrl('getObject', {
  Bucket: BUCKET,
  Key: 'userId/test-thumb.jpg',
  Expires: signedUrlExpireSeconds
})

我注意到,在我上面提到的教程中,它使用公共s3存储桶。我不确定是否可以在私有存储桶中实现此解决方案。

它与 s3 策略有什么关系吗?目前没有策略附加到我的私有存储桶

任何建议将不胜感激,谢谢

共有1个答案

皇甫雨华
2023-03-14

单独使用S3无法完成您正在尝试的任务。S3不允许基于规则的重定向。

你可以尝试使用Cloudfront和Lambda@Edge来实现这一点。

您可以在这里查看重定向的示例:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html

基本上,将S3设置为Cloudfront后端,然后查看示例:“示例:使用Origin Response Trigger将错误状态代码更新为302 Found”。这允许您捕获403个404响应,然后根据需要重定向到另一个URL,如Lambda函数。

 类似资料:
  • 我正在尝试使用重定向规则设置静态web托管。在我的应用程序中,任何具有前缀api/(http://web.company.com/api)的请求都应该重定向到具有相同前缀(http://api.company.com/api)的另一个主机。我已按以下方式设置路由规则: 但请求没有被正确重定向。控制台中有两个不同的错误: XMLHttpRequest无法加载http://api.company.co

  • 我将spring saml扩展与Apache2.2+Tomcat7.0+OKTA(IdP)一起使用。securitycontext.xml如下所示: MetadataGeneratorFilter: 谢谢 奈良 HTTP请求转储:

  • 我试图点击一个postendpoint,但它给出了错误302,当我在同一台服务器上尝试另一个get Url时,它给出了200。然后,我使用laxrirectstrategy()重定向了post请求。post请求正在重定向到get请求(只有同一个endpoint的方法名是get和post),它没有从post方法获得响应。有人能告诉我如何使用apahce httpClient 4.5将post请求重定

  • 我们的整个网站将通过https提供服务。我在每条路线上都有“https”。但是,如果他们试图通过http将其重定向到https,我该如何将其重定向到https?

  • 当我们使用AWS应用型负载均衡将传入请求重定向到我们的服务器时,我们创建了一个SSL证书并将其设置为负载均衡器。它同时监听HTTP 80和HTTPS 443端口的流量。在这两种情况下,流量都被重定向到目标组实例的HTTP 80端口。 在这些情况下,有nginx服务器配置为侦听它们所在的实例的HTTP 80端口。 当我更新nginx.conf文件以将传入的HTTP请求重定向到HTTPS协议时,我们面

  • 我有一个应用程序,可以接受一个POST请求。为了请求,我需要定义一些标题、边界和连字符。换句话说,我需要制定完整的请求。我成功地使用了HttpURLConnection。现在,我想从我的Spring应用程序中请求应用程序。 比如说,我有三个应用程序A(传感器)、B(Spring)和C(服务器)。 在这种情况下,B将充当网桥,从a接收请求,对其进行身份验证并将其发送给C。 我不想在Spring中再次