由于最近东海岸发生 S3 停机事件,我想问社区,实现容错 S3 网站托管解决方案的最佳方法是什么?
据我所知,您需要用您的域名命名存储桶(例如 example.com)。但此存储桶是特定于区域的,存储桶名称是全球唯一的,因此我无法在另一个区域创建相同的存储桶。因此,如果该区域的 S3 存储桶出现故障,这是否意味着我的网站也出现故障?
答案1
简短的回答是:我找不到一种让 S3 托管的静态网站在不使用额外逻辑或服务器的情况下经受住区域故障的好方法。如果有人能想出办法,我会非常感兴趣。
您可以将 CloudFront 放在 S3 网站前面。如果存储桶出现故障,即使内容已经过期,也会从缓存中提供内容。这当然依赖于最靠近客户的端点的缓存中的内容。
您可以使用 S3跨区域复制将 S3 数据移动到另一个区域。最初我以为你可以使用 Route53故障转移路由从工作存储桶中进行选择,但这不起作用。跨区域复制必须是具有不同名称的存储桶,使用 S3 网站托管,您只能从以域命名的存储桶托管网站。我想知道是否有手动解决方案,但您无法重命名存储桶,如果第一个区域关闭,您可能无法删除具有网站名称的存储桶。
我认为 CloudFront 和 Route53 的组合可能会起作用,但这需要创建两个为同一域提供内容的 CloudFront 分发。这似乎不可能。
这不是理想的选择,但我认为您可以使用 EC2 和 Route53 来实现这一点。在两个或更多区域创建服务器,让它们使用 Nginx 或类似工具手动代理 S3 内容,并使用 Route53 在它们之间进行平衡。这违背了 S3 托管的意义,总的来说是个糟糕的想法,但如果绝对有必要,它可能还是可行的。