如何将 s3 内容请求重定向到 lambda?
How to redirect s3 content request to lambda?
我正在关注 this tutorial 使用 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>
当我访问带有预签名 URL 的不存在的缩略图时,出现 403 错误,因此我尝试使用 s3 end 预签名 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
我注意到在我上面提到的教程中,它使用了 public s3 存储桶。
我不确定是否可以在私有存储桶中实施此解决方案。
跟s3政策有关系吗?目前我的私人存储桶没有附加政策
任何建议将不胜感激,谢谢
单独使用 S3 无法完成您正在尝试的操作。 S3 不允许基于规则的重定向。
您可以尝试使用 Cloudfront 和 Lambda@Edge 来实现这一点。
您可以在此处查看重定向示例:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html
基本上,将S3设置为Cloudfront后端,然后看例子:"Example: Using an Origin-Response Trigger to Update the Error Status Code to 302-Found"。这允许您捕获 404 响应中的 403,然后根据需要重定向到另一个 URL,就像您的 Lambda 函数一样。
我正在关注 this tutorial 使用 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>
当我访问带有预签名 URL 的不存在的缩略图时,出现 403 错误,因此我尝试使用 s3 end 预签名 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
我注意到在我上面提到的教程中,它使用了 public s3 存储桶。 我不确定是否可以在私有存储桶中实施此解决方案。
跟s3政策有关系吗?目前我的私人存储桶没有附加政策
任何建议将不胜感激,谢谢
单独使用 S3 无法完成您正在尝试的操作。 S3 不允许基于规则的重定向。
您可以尝试使用 Cloudfront 和 Lambda@Edge 来实现这一点。
您可以在此处查看重定向示例:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html
基本上,将S3设置为Cloudfront后端,然后看例子:"Example: Using an Origin-Response Trigger to Update the Error Status Code to 302-Found"。这允许您捕获 404 响应中的 403,然后根据需要重定向到另一个 URL,就像您的 Lambda 函数一样。