通过 CloudFront 源失效转移来优化高可用性
对于需要高可用性的场景,您可以使用源故障转移功能设置 CloudFront。要开始使用,您需要创建一个具有两个源的源组:一个主源和一个辅助源。如果主源不可用,或返回指示故障的特定 HTTP 响应状态代码,则 CloudFront 自动切换到辅助源。
要设置源故障转移,您必须具有一个至少包含两个源的分配。接下来,为包含两个源(将其中一个设置为主源)的分配创建一个源组。最后,创建或更新缓存行为以使用源组。
要查看用于设置源组和配置特定源故障转移选项的步骤,请参阅创建源组。
在为缓存行为配置源故障转移后,CloudFront 将针对查看器请求执行以下操作:
-
当出现缓存命中结果时,CloudFront 将返回请求的对象。
-
当出现缓存未命中时,CloudFront 将请求路由至源组中的主源。
-
当主源返回不是为故障转移配置的状态代码(如 HTTP 2xx 或 3xx 状态代码)时,CloudFront 将向查看器提供请求的对象。
-
发生以下任何情况时:
-
主源返回您为故障转移配置的 HTTP 状态代码
-
CloudFront 无法连接到主源
-
来自主源的响应需要太长时间(超时)
然后,CloudFront 将请求路由到源组中的辅助源。
注意
对于某些使用案例(如流视频内容),您可能希望 CloudFront 快速故障转移到辅助源。要调整 CloudFront 故障转移到辅助源的速度,请参阅控制源超时和尝试次数。
-
CloudFront 将所有传入的请求路由到主源,即使先前的请求故障转移到辅助源时也是如此。CloudFront 仅在向主源发送请求失败后才向辅助源发送请求。
只有当查看器请求的 HTTP 方法是 GET
、HEAD
或 OPTIONS
时,CloudFront 才会故障转移到辅助源。当查看器发送不同的 HTTP 方法(例如 POST
、PUT
等)时,CloudFront 不会进行故障转移。
下图阐述了源故障转移的工作原理。
创建源组
创建源组
登录 AWS Management Console,并通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/cloudfront/v4/home
。 -
选择要为其创建源组的分配。
-
选择源选项卡。
-
确保此分配有多个源。否则请添加第二个源。
-
在源选项卡的(源组窗格中,选择创建源组。
-
选择源组的源。添加源后,使用箭头设置优先级,即哪个源是主源组,哪个源是辅助源。
-
为此源组输入一个名称。
-
选择要用作故障转移条件的 HTTP 状态代码。您可以选择以下状态代码的任意组合:400、403、404、416、500、502、503 或 504。当 CloudFront 收到具有您指定的状态代码之一的响应时,它会故障转移到辅助源。
注意
只有当查看器请求的 HTTP 方法是
GET
、HEAD
或OPTIONS
时,CloudFront 才会故障转移到辅助源。当查看器发送不同的 HTTP 方法(例如POST
、PUT
等)时,CloudFront 不会进行故障转移。 -
选择创建源组。
请务必将您的源组指定为分配缓存行为的源。有关更多信息,请参阅 名称。
控制源超时和尝试次数
默认情况下,CloudFront 长达 30 秒(尝试 3 次连接,每次 10 秒)尝试连接到源组中的主源,之后故障转移到辅助源。对于某些使用案例(如流视频内容),您可能希望 CloudFront 更快地故障转移到辅助源。您可以调整以下设置,以影响 CloudFront 故障转移到辅助源的速度。如果源是辅助源或不属于源组的源,则这些设置会影响 CloudFront 向查看器返回 HTTP 504 响应的速度。
要更快地进行故障转移,请指定更短的连接超时、更少的连接尝试次数,或者同时指定两者。对于自定义源(包括配置为 静态网站托管的 Amazon S3 存储桶源),您还可以调整源响应超时。
- 源连接超时
-
源连接超时设置影响 CloudFront 尝试建立到源的连接时等待的时间。默认情况下,CloudFront 等待 10 秒以建立连接,但您可以指定 1-10 秒(含)。有关更多信息,请参阅 连接超时。
- 源连接尝试次数
-
源连接尝试设置会影响 CloudFront 尝试连接到源的次数。默认情况下,CloudFront 尝试 3 次进行连接,但您可以指定 1-3(含)。有关更多信息,请参阅 连接尝试次数。
对于自定义源(包括配置为静态网站托管的 Amazon S3 存储桶),此设置还影响在源响应超时的情况下 CloudFront 尝试从源获取响应的次数。
- 源响应超时
注意
这仅适用于自定义源。
源响应超时设置影响 CloudFront 从源接收响应(或接收完整响应)的等待时间。默认情况下,CloudFront 等待 30 秒,但您可以指定 1-60 秒(含)。有关更多信息,请参阅 响应超时(仅自定义源)。
如何更改这些设置
在 CloudFront 控制台
-
对于新源或新分配,您可以在创建资源时指定这些值。
-
对于现有分配中的现有源,可在编辑源时指定这些值。
有关更多信息,请参阅 分配设置参考。
将源故障转移与 Lambda@Edge 函数结合使用
可以将 Lambda@Edge 函数与已使用源组设置的 CloudFront 分配结合使用。要使用 Lambda 函数,请在创建缓存行为时在源组的源请求或源响应触发器中指定它。当您将 Lambda@Edge 函数与源组一起使用时,对于单个查看器请求可以触发两次此函数。例如,考虑以下情景:
-
使用源请求触发器创建 Lambda@Edge 函数。
-
当 CloudFront(对于缓存未命中)向主源发送请求时会触发一次 Lambda 函数。
-
主源使用为故障转移配置的 HTTP 状态代码进行响应。
-
当 CloudFront 向辅助源发送相同的请求时,将再次触发 Lambda 函数。
下图阐述了源故障转移在源请求或响应触发器中包含 Lambda@Edge 函数时的工作方式。
有关如何使用 Lambda@Edge 触发器的更多信息,请参阅为 Lambda@Edge 函数添加触发器。
有关管理 DNS 故障转移的更多信息,请参阅《Amazon Route 53 开发人员指南》中的配置 DNS 故障转移。
将自定义错误页与源故障转移结合使用
可以将自定义错误页面与源组结合使用,方式与将其与未为源故障转移设置的源结合使用的方式类似。
当使用源故障转移时,可将 CloudFront 配置为返回主源和/或辅助源的自定义错误页面:
-
返回主源的自定义错误页 – 如果主源返回未为故障转移配置的 HTTP 状态代码,则 CloudFront 将向查看器返回自定义错误页面。
-
返回辅助源的自定义错误页 – 如果 CloudFront 从辅助源收到故障状态代码,则 CloudFront 返回自定义错误页。
有关将自定义错误页面与 CloudFront 结合使用的更多信息,请参阅生成自定义错误响应。