我正在关注this tutorial以使用s3和lambda实现生成缩略图 . 我坚持将不存在的请求重定向到lambda
我的s3存储桶是私有的,我使用带有Cognito idtoken的预签名网址来访问其内容,它可以工作 .
现在,如果我向尚未生成的缩略图发出请求(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>
- 当我使用预先签名的URL访问不存在的缩略图时,它给出了403错误,因此我尝试使用s3 endpoints 预先签名该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
})
这次它给我404和错误消息,仍然没有重定向请求到lambda
-
我注意到在上面提到的教程中,它使用了公共s3存储桶 . 我不确定是否可以在私有桶中实现此解决方案 .
-
是否与s3政策有关?目前我的私人存储桶没有附加任何政策
任何建议将不胜感激,谢谢
1 回答
单独使用S3无法实现您的尝试 . S3不允许基于规则的重定向 .
您可以做的是尝试使用Cloudfront和Lambda @ Edge实现这一目标 .
您可以在此处查看重定向的示例:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html
基本上,将S3设置为Cloudfront后端,然后查看示例:“示例:使用Origin-Response触发器将错误状态代码更新为302-Found” . 这允许您捕获403的404响应,然后按需将其重定向到另一个URL,就像您的Lambda函数一样 .