我们使用 S3 在线存储文件。为了降低成本,可以使用预先知道的路径按需生成其中的许多文件。
是否可以让 S3 存储桶将丢失的对象请求重定向到我的预配置端点(然后可以按需生成和提供文件)?
例如,对http://bucket1.s3.amazonaws.com/path2/file3.jpg的请求将临时重定向 (307) 到http://mydomain.com/missing_s3_obj/bucket1/path2/file3.jpg。
我们使用 S3 在线存储文件。为了降低成本,可以使用预先知道的路径按需生成其中的许多文件。
是否可以让 S3 存储桶将丢失的对象请求重定向到我的预配置端点(然后可以按需生成和提供文件)?
例如,对http://bucket1.s3.amazonaws.com/path2/file3.jpg的请求将临时重定向 (307) 到http://mydomain.com/missing_s3_obj/bucket1/path2/file3.jpg。
您可以使用RoutingRules
S3 重定向到您的域,如S3 文档中为网站托管配置存储桶的示例 3 中所述。我相信它准确地描述了你的情况。
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<HostName>mydomain.com</HostName>
<ReplaceKeyPrefixWith>missing_s3_obj/bucket1/</ReplaceKeyPrefixWith>
<HttpRedirectCode>307</HttpRedirectCode>
</Redirect>
</RoutingRule>
</RoutingRules>
目前这是不可能的,尽管这是一个非常好的主意。(也许您应该在 S3 论坛上将其列为功能请求,其中实际上非常重视功能请求)。
不过,您可以使用不同的架构设置来实现您想要的。
例如,您将使用 Cloudfront,而不是使用 S3。您的边缘来源将是您自己的应用程序服务请求。您必须将所有可用文件的哈希存储在 S3 上,但如果该文件在 S3 上可用,您将代理到 S3。如果不是,那么您将动态生成文件并将其提供给 Cloudfront。
然后,您将在后续请求中获得缓存的所有好处。