Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 CloudFront 源故障转移优化高可用性

对于需要高可用性的场景,您可以使用源故障转移功能设置 CloudFront。要开始使用,请创建一个源组,您将在其中为 CloudFront 指定主源以及 CloudFront 将在主源返回特定 HTTP 状态代码故障响应时自动切换到的次要源。

要设置源故障转移,您必须具有一个至少包含两个源的分配。接下来,为包含两个源(将其中一个设置为主源)的分配创建一个源组。最后,定义一个缓存行为来指定源组作为源。有关为分配指定源组的更多信息,请参阅源 ID

源组中的两个源可以是以下源的任意组合:AWS 源(如 Amazon S3 存储桶或 Amazon EC2 实例)或自定义源(如您自己的 HTTP Web 服务器)。在创建源组时,将 CloudFront 配置为在主源返回您配置的特定状态代码时故障转移到 GET、HEAD 和 OPTIONS HTTP 方法的次要源。

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

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

  • 当出现缓存命中时,CloudFront 将返回请求的文件。

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

  • 当返回尚未为故障转移配置的状态代码(HTTP 2xx 或 HTTP 3xx 状态代码)时,CloudFront 将提供请求的内容。

  • 当主源返回已为故障转移配置的 HTTP 状态代码时,或在超时后,CloudFront 会将请求路由到源组中的备份源。

    注意

    CloudFront 将在连续三次尝试单个请求后无法连接到源时发出连接超时。CloudFront 将在两次连接尝试之间等待最多 10 秒。

CloudFront 将所有传入请求路由至主源,即使早期请求已故障转移到次要源时也是如此。仅在尝试路由至主源时返回为故障转移或超时配置的状态代码的情况下,CloudFront 才将请求发送到次要源。

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


			源故障转移的工作原理

有关更多信息,请参阅下列内容:

创建源组

创建具有两个源的源组。指定一个源为主源,另一个源则为次源,当主源返回特定 HTTP 状态代码故障响应时,CloudFront 将自动切换到次源。

创建源组

  1. Origin and Origin Groups (源和源组) 选项卡上,选择 Create origin group

  2. 选择源组的源,然后选择 Priority (优先级) 箭头以将其中一个源设置为主源。

  3. 选择一个或多个 HTTP 状态代码作为故障转移标准。可以选择以下状态代码的任意组合:500、502、503、504、404 或 403。

  4. 为源组输入唯一的描述性 ID。您无法使用已用于源或其他源组的 ID。

有关为分配指定源组的信息,请参阅源 ID

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

可以将 Lambda@Edge 函数与已使用源组设置的 CloudFront 分配结合使用。要使用 Lambda 函数,请在创建缓存行为时在源组的源请求或源响应触发器中指定它。

当 CloudFront 在缓存未命中的情况下将请求路由至主源时,将为主源触发 Lambda 函数。如果主源返回已为故障转移配置的 HTTP 状态代码,则当 CloudFront 将请求重新路由至第二个源时,将再次触发 Lambda 函数。

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


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

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

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

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

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

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

  • 返回次要源的自定义错误页面。 如果 CloudFront 故障转移到第二个源,则 CloudFront 将返回自定义错误页面。

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