通过 CloudFront 源失效转移来优化高可用性 - Amazon CloudFront

通过 CloudFront 源失效转移来优化高可用性

对于需要高可用性的场景,您可以使用源故障转移功能设置 CloudFront。要开始使用,您需要创建一个具有两个源的源组:一个主源和一个辅助源。如果主源不可用,或返回指示故障的特定 HTTP 响应状态代码,则 CloudFront 自动切换到辅助源。

要设置源故障转移,您必须具有一个至少包含两个源的分配。接下来,为包含两个源(将其中一个设置为主源)的分配创建一个源组。最后,创建或更新缓存行为以使用源组。

要查看用于设置源组和配置特定源故障转移选项的步骤,请参阅创建源组

在为缓存行为配置源故障转移后,CloudFront 将针对查看器请求执行以下操作:

  • 当出现缓存命中结果时,CloudFront 将返回请求的对象。

  • 当出现缓存未命中时,CloudFront 将请求路由至源组中的主源。

  • 当主源返回不是为故障转移配置的状态代码(如 HTTP 2xx 或 3xx 状态代码)时,CloudFront 将向查看器提供请求的对象。

  • 发生以下任何情况时:

    • 主源返回您为故障转移配置的 HTTP 状态代码

    • CloudFront 无法连接到主源

    • 来自主源的响应需要太长时间(超时)

    然后,CloudFront 将请求路由到源组中的辅助源。

    注意

    对于某些使用案例(如流视频内容),您可能希望 CloudFront 快速故障转移到辅助源。要调整 CloudFront 故障转移到辅助源的速度,请参阅控制源超时和尝试次数

CloudFront 将所有传入的请求路由到主源,即使先前的请求故障转移到辅助源时也是如此。CloudFront 仅在向主源发送请求失败后才向辅助源发送请求。

只有当查看器请求的 HTTP 方法是 GETHEADOPTIONS 时,CloudFront 才会故障转移到辅助源。当查看器发送不同的 HTTP 方法(例如 POSTPUT 等)时,CloudFront 不会进行故障转移。

下图阐述了源故障转移的工作原理。

源故障转移的工作原理

创建源组

创建源组
  1. 登录 AWS Management Console,并通过以下网址打开 CloudFront 控制台:https://console.aws.amazon.com/cloudfront/v4/home

  2. 选择要为其创建源组的分配。

  3. 选择选项卡。

  4. 确保此分配有多个源。否则请添加第二个源。

  5. 选项卡的(源组窗格中,选择创建源组

  6. 选择源组的源。添加源后,使用箭头设置优先级,即哪个源是主源组,哪个源是辅助源。

  7. 为此源组输入一个名称。

  8. 选择要用作故障转移条件的 HTTP 状态代码。您可以选择以下状态代码的任意组合:400、403、404、416、500、502、503 或 504。当 CloudFront 收到具有您指定的状态代码之一的响应时,它会故障转移到辅助源。

    注意

    只有当查看器请求的 HTTP 方法是 GETHEADOPTIONS 时,CloudFront 才会故障转移到辅助源。当查看器发送不同的 HTTP 方法(例如 POSTPUT 等)时,CloudFront 不会进行故障转移。

  9. 选择创建源组

请务必将您的源组指定为分配缓存行为的源。有关更多信息,请参阅 名称

控制源超时和尝试次数

默认情况下,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 函数与源组一起使用时,对于单个查看器请求可以触发两次此函数。例如,考虑以下情景:

  1. 使用源请求触发器创建 Lambda@Edge 函数。

  2. 当 CloudFront(对于缓存未命中)向主源发送请求时会触发一次 Lambda 函数。

  3. 主源使用为故障转移配置的 HTTP 状态代码进行响应。

  4. 当 CloudFront 向辅助源发送相同的请求时,将再次触发 Lambda 函数。

下图阐述了源故障转移在源请求或响应触发器中包含 Lambda@Edge 函数时的工作方式。

源故障转移如何与 Lambda@Edge 函数结合使用

有关如何使用 Lambda@Edge 触发器的更多信息,请参阅为 Lambda@Edge 函数添加触发器

有关管理 DNS 故障转移的更多信息,请参阅《Amazon Route 53 开发人员指南》中的配置 DNS 故障转移

将自定义错误页与源故障转移结合使用

可以将自定义错误页面与源组结合使用,方式与将其与未为源故障转移设置的源结合使用的方式类似。

当使用源故障转移时,可将 CloudFront 配置为返回主源和/或辅助源的自定义错误页面:

  • 返回主源的自定义错误页 – 如果主源返回未为故障转移配置的 HTTP 状态代码,则 CloudFront 将向查看器返回自定义错误页面。

  • 返回辅助源的自定义错误页 – 如果 CloudFront 从辅助源收到故障状态代码,则 CloudFront 返回自定义错误页。

有关将自定义错误页面与 CloudFront 结合使用的更多信息,请参阅生成自定义错误响应