我们正在尝试设置一个 Cloudfront 分布,其中默认来源是 S3,但如果在 S3 上找不到内容,我们希望它从 EC2 实例中获取内容。
我们可以设置这些多个来源:S3 和 EC2 以及两种行为,均默认为 (*),并在需要时将其故障转移到第二个来源 (EC2) 吗?
流程如下:
- 我们的后端在 EC2 实例上生成图像。
- 我们会尽快将它们上传到 S3,但不是立即的。
- 当用户尝试访问 cdn.example.com/images/picture.jpg 时,它会将 Cloudfront 定向到我们的 S3 存储桶,如果图像还不存在,我们希望将该请求重定向到 EC2 服务器。
我们对这里的临时重定向解决方案感到满意,直到它在 S3 上更新为止。
S3 重定向不是答案,因为 S3 重定向似乎只适用于现有对象或整个存储桶,而不适用于丢失的对象。
我们怎样才能实现这个目标?
谢谢,Adoram
答案1
借助 CloudFront 的源故障转移功能,您可以为分发设置两个源 - 主源和辅助源,这样,如果 CloudFront 检测到主源不可用,您的内容将从辅助源提供。CloudFront 已经允许您配置自定义错误页面,或者在源不可用时使用 Lambda@Edge 生成重定向。现在,借助源故障转移,您可以轻松地在 AWS 源或非 AWS 自定义 HTTP 源的组合之间设置故障转移逻辑,从而最大限度地减少对查看者体验的干扰。例如,您可以有两个 Amazon S3 存储桶作为您的源,您可以将内容独立上传到这两个存储桶。如果 CloudFront 从您的主存储桶请求的对象不存在,或者与主存储桶的连接超时,CloudFront 将从您的辅助存储桶请求该对象。因此,您可以将 CloudFront 配置为在响应 HTTP 4xx 或 5xx 状态代码时触发故障转移。
答案2
CloudFront 不支持您的用例。您需要在应用程序中处理此问题 - 在您的系统完成向 S3 的传输之前,不要为项目提供 CDN URL。