使用 CloudFront 持续部署来安全地测试 CDN 配置更改 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 CloudFront 持续部署来安全地测试 CDN 配置更改

利用 Amazon CloudFront 持续部署,您可以先对一部分生产流量进行测试,从而安全地部署对 CDN 配置的更改。您可以使用暂存分发持续部署策略来将一些来自实际(生产)查看器的流量发送到新的 CDN 配置,并验证其是否按预期运行。您可以实时监控新配置的性能,并在准备就绪时提升新配置以通过主分发为所有流量提供服务。

以下图表说明了使用 CloudFront 持续部署的好处。如果没有该部署,您将必须使用模拟流量来测试 CDN 配置更改。利用持续部署,您可以使用一部分生产流量来测试更改,然后在准备就绪时将更改推广到主分发。


            借助 CloudFront 持续部署和持续部署策略,您可以将一部分生产流量发送到暂存分发,而不是使用模拟流量。

使用 CloudFront 持续部署的工作流程

以下简要工作流程说明了如何通过 CloudFront 持续部署来安全地测试和部署配置更改。

  1. 选择要用作主分发的分发。主分发是目前为生产流量提供服务的分发。

  2. 在主分发中,创建暂存分发。暂存分发作为主分发的副本开始。

  3. 持续部署策略中创建流量配置,并将其附加到主分发。这将决定 CloudFront 如何将流量路由到暂存分发。有关将请求路由到暂存分发的更多信息,请参阅将请求路由到暂存分发

  4. 更新暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发

  5. 监控暂存分发以确定配置更改是否按预期执行。有关监控暂存分发的更多信息,请参阅监控暂存分发

    在监控暂存分发时,您可以:

    • 重新更新暂存分发的配置,以继续测试配置更改。

    • 更新持续部署策略(流量配置),以向暂存分发发送更多或更少流量。

  6. 如果您对暂存分发的性能感到满意,请将暂存分发的配置提升为主分发,这会将暂存分发的配置复制到主分发。这还将禁用持续部署策略,这意味着 CloudFront 会将所有流量路由到主分发。

您可以构建自动化来监控暂存分发的性能(步骤 5),并在满足特定条件时自动升级配置(步骤 6)。

提升配置后,可以在下次要测试配置更改时重用相同的暂存分发。

有关在 CloudFront 控制台、Amazon CLI 或 CloudFront API 中使用暂存分发和持续部署策略的更多信息,请参阅以下部分。

使用暂存分发和持续部署策略

您可以使用 Amazon Command Line Interface(Amazon CLI)或 CloudFront API 在 CloudFront 控制台中创建、更新和修改暂存分发与持续部署策略。

Console

要将暂存分发和持续部署策略用于 Amazon Web Services Management Console,请遵循以下步骤。

创建暂存分发和持续部署策略(控制台)
  1. 登录 Amazon Web Services Management Console,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v3/home

  2. 在导航窗格中,选择 Distributions (分配)

  3. 选择要用作主分发的分发。主分发是当前为生产流量提供服务的分发,您将从中创建暂存分发。

  4. Continuous deployment(持续部署)部分中,选择 Create staging distribution(创建暂存分发)。这将打开 Create staging distribution(创建暂存分发)向导。

  5. Create staging distribution(创建暂存分发)向导中,执行以下操作:

    1. (可选)键入暂存分发的描述。

    2. 选择 Next(下一步)。

    3. 修改暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发

      修改完暂存分发的配置后,选择 Next(下一步)。

    4. 使用控制台指定 Traffic configuration(流量配置)。这将决定 CloudFront 如何将流量路由到暂存分发。(CloudFront 将流量配置存储在持续部署策略中。)

      有关 Traffic configuration(流量配置)中的选项的更多信息,请参阅将请求路由到暂存分发

      完成 Traffic configuration(流量配置)后,选择 Next(下一步)。

    5. 查看暂存分发的配置,包括流量配置,然后选择 Create staging distribution(创建暂存分发)。

在 CloudFront 控制台中完成 Create staging distribution(创建暂存分发)向导后,CloudFront 将执行以下操作:

  • 使用您指定的设置创建暂存分发(在步骤 5c 中)

  • 使用您指定的流量配置创建持续部署策略(在步骤 5d 中)

  • 将持续部署策略附加到您从中创建暂存分发的主分发

当主分发的配置以及附加的持续部署策略部署到边缘站点时,CloudFront 会开始根据流量配置将指定部分的流量发送到暂存分发。

更新暂存分发(控制台)
  1. 通过 https://console.amazonaws.cn/cloudfront/v3/home 打开 CloudFront 控制台

  2. 在导航窗格中,选择 Distributions (分配)

  3. 选择主分发。这是当前为生产流量提供服务的分发,您将从中创建暂存分发。

  4. 选择 View staging distribution(查看暂存分发)。

  5. 使用控制台修改暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发

一旦暂存分发的配置部署到边缘站点,它就会对路由到暂存分发的传入流量生效。

更新持续部署策略(控制台)
  1. 通过 https://console.amazonaws.cn/cloudfront/v3/home 打开 CloudFront 控制台

  2. 在导航窗格中,选择 Distributions (分配)

  3. 选择主分发。这是当前为生产流量提供服务的分发,您将从中创建暂存分发。

  4. Continuous deployment(持续部署)部分中,选择 Edit policy(编辑策略)。

  5. 修改持续部署策略中的流量配置。在完成后,选择保存更改

当主分发的配置以及更新的持续部署策略部署到边缘站点时,CloudFront 会开始根据更新的流量配置将流量发送到暂存分发。

提升暂存分发的配置(控制台)
  1. 通过 https://console.amazonaws.cn/cloudfront/v3/home 打开 CloudFront 控制台

  2. 在导航窗格中,选择 Distributions (分配)

  3. 选择主分发。这是当前为生产流量提供服务的分发,您将从中创建暂存分发。

  4. Continuous deployment(持续部署)部分中,选择 Promote(提升)。

  5. 键入 confirm,然后选择 Promote(提升)。

提升暂存分发时,CloudFront 会将配置从暂存分发复制到主分发。CloudFront 还将禁用持续部署策略,并将所有流量路由到主分发。

提升配置后,可以在下次要测试配置更改时重用相同的暂存分发。

CLI

要将暂存分发和持续部署策略用于 Amazon CLI,请使用以下过程。

创建暂存分发(CLI)
  1. aws cloudfront get-distributiongrep 命令结合使用以获取要用作主分发分发的 ETag 值。主分发是当前为生产流量提供服务的分发,将从中创建暂存分发。

    以下命令是一个示例。在以下示例中,将 primary_distribution_ID 替换为主分发的 ID。

    aws cloudfront get-distribution --id primary_distribution_ID | grep 'ETag'

    复制 ETag 值,因为您需要它来执行下一个步骤。

  2. 使用 aws cloudfront copy-distribution 命令创建暂存分发。以下示例命令使用转义字符(\)和换行符来提高可读性,但您应在该命令中省略这些字符。在以下示例命令中:

    • primary_distribution_ID 替换为主分发的 ID。

    • primary_distribution_ETag 替换为主分发的 ETag 值(您已在上一步中获得)。

    • (可选)将 CLI_example 替换为所需的调用方参考 ID。

    aws cloudfront copy-distribution --primary-distribution-id primary_distribution_ID \ --if-match primary_distribution_ETag \ --staging \ --caller-reference 'CLI_example'

    该命令的输出显示了有关暂存分发及其配置的信息。复制暂存分发的 CloudFront 域名,因为您在下一步中需要使用它。

创建持续部署策略(带输入文件的 CLI)
  1. 使用以下命令创建名为 continuous-deployment-policy.yaml 的文件,其中包含 create-continuous-deployment-policy 命令的所有输入参数。以下命令使用转义字符(\)和换行符来提高可读性,但您应在该命令中省略这些字符。

    aws cloudfront create-continuous-deployment-policy --generate-cli-skeleton yaml-input \ > continuous-deployment-policy.yaml
  2. 打开刚创建的名为 continuous-deployment-policy.yaml 的文件。编辑该文件以指定所需的持续部署策略设置,然后保存该文件。当您编辑该文件时:

    • StagingDistributionDnsNames 部分中:

      • Quantity 的值更改为 1

      • 对于 Items,粘贴暂存分发的 CloudFront 域名(您已在上一步中保存)。

    • TrafficConfig 部分中:

      • 选择 TypeSingleWeightSingleHeader)。

      • 删除其他类型的设置。例如,如果您需要基于权重的流量配置,请将 Type 设置为 SingleWeight,然后删除 SingleHeaderConfig 设置。

      • 要使用基于权重的流量配置,请将 Weight 的值设置为介于 .01(百分之一)和 .15(百分之十五)之间的十进制数。

      有关 TrafficConfig 中的选项的更多信息,请参阅将请求路由到暂存分发基于权重的配置的会话粘性

  3. 使用以下命令通过 continuous-deployment-policy.yaml 文件中的输入参数创建持续部署策略。

    aws cloudfront create-continuous-deployment-policy --cli-input-yaml file://continuous-deployment-policy.yaml

    复制命令输出中的 Id 值。这是持续部署策略 ID,您在下一步中需要它。

将持续部署策略附加到主分发(带输入文件的 CLI)
  1. 使用以下命令将主分发的配置保存到一个名为 primary-distribution.yaml 的文件中。将 primary_distribution_ID 替换为主分发的 ID。

    aws cloudfront get-distribution-config --id primary_distribution_ID --output yaml > primary-distribution.yaml
  2. 打开刚创建的名为 primary-distribution.yaml 的文件。编辑文件,进行以下更改:

    • 将持续部署策略 ID(从上一步中复制的)粘贴到 ContinuousDeploymentPolicyId 字段中。

    • ETag 字段重命名为 IfMatch,但不更改字段的值。

    完成后保存该文件。

  3. 使用以下命令更新主分发以使用持续部署策略。将 primary_distribution_ID 替换为主分发的 ID。

    aws cloudfront update-distribution --id primary_distribution_ID --cli-input-yaml file://primary-distribution.yaml

当主分发的配置以及附加的持续部署策略部署到边缘站点时,CloudFront 会开始根据流量配置将指定部分的流量发送到暂存分发。

更新暂存分发(带输入文件的 CLI)
  1. 使用以下命令将暂存分发的配置保存到一个名为 staging-distribution.yaml 的文件中。将 staging_distribution_ID 替换为暂存分发的 ID。

    aws cloudfront get-distribution-config --id staging_distribution_ID --output yaml > staging-distribution.yaml
  2. 打开刚创建的名为 staging-distribution.yaml 的文件。编辑文件,进行以下更改:

    • 修改暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发

    • ETag 字段重命名为 IfMatch,但不更改字段的值。

    完成后保存该文件。

  3. 使用以下命令更新暂存分发的配置。将 staging_distribution_ID 替换为暂存分发的 ID。

    aws cloudfront update-distribution --id staging_distribution_ID --cli-input-yaml file://staging-distribution.yaml

一旦暂存分发的配置部署到边缘站点,它就会对路由到暂存分发的传入流量生效。

更新持续部署策略(带输入文件的 CLI)
  1. 使用以下命令将持续部署策略的配置保存到一个名为 continuous-deployment-policy.yaml 的文件中。将 continuous_deployment_policy_ID 替换为持续部署策略的 ID。以下命令使用转义字符(\)和换行符来提高可读性,但您应在该命令中省略这些字符。

    aws cloudfront get-continuous-deployment-policy-config --id continuous_deployment_policy_ID \ --output yaml > continuous-deployment-policy.yaml
  2. 打开刚创建的名为 continuous-deployment-policy.yaml 的文件。编辑文件,进行以下更改:

    • 根据需要修改持续部署策略的配置。例如,您可以从使用基于标头的流量配置更改为使用基于权重的流量配置,也可以更改基于权重的配置的流量百分比(权重)。有关更多信息,请参阅 将请求路由到暂存分发基于权重的配置的会话粘性

    • ETag 字段重命名为 IfMatch,但不更改字段的值。

    完成后保存该文件。

  3. 使用以下命令更新持续部署策略。将 continuous_deployment_policy_ID 替换为持续部署策略的 ID。以下命令使用转义字符(\)和换行符来提高可读性,但您应在该命令中省略这些字符。

    aws cloudfront update-continuous-deployment-policy --id continuous_deployment_policy_ID \ --cli-input-yaml file://continuous-deployment-policy.yaml

当主分发的配置以及更新的持续部署策略部署到边缘站点时,CloudFront 会开始根据更新的流量配置将流量发送到暂存分发。

提升暂存分发的配置(CLI)
  • 使用 aws cloudfront update-distribution-with-staging-config 命令将暂存分发的配置提升为主分发。以下示例命令使用转义字符(\)和换行符来提高可读性,但您应在该命令中省略这些字符。在以下示例命令中:

    • primary_distribution_ID 替换为主分发的 ID。

    • staging_distribution_ID 替换为暂存分发的 ID。

    • primary_distribution_ETagstaging_distribution_ETag 分别替换为主分发和暂存分发的 ETag 值。确保主分发的值是第一个,如示例所示。

    aws cloudfront update-distribution-with-staging-config --id primary_distribution_ID \ --staging-distribution-id staging_distribution_ID \ --if-match 'primary_distribution_ETag,staging_distribution_ETag'

提升 暂存分发时,CloudFront 会将配置从暂存分发复制到主分发。CloudFront 还将禁用持续部署策略,并将所有流量路由到主分发。

提升配置后,可以在下次要测试配置更改时重用相同的暂存分发。

API

要使用 CloudFront API 创建暂存分发和持续部署策略,请使用以下 API 操作:

有关您在这些 API 调用中指定的字段的更多信息,请参阅以下内容:

创建暂存分发和持续部署策略后,使用 UpdateDistribution(在主分发上)将持续部署策略附加到主分发。

要更新暂存分发的配置,请使用 UpdateDistribution(在暂存分发上)修改暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发

要将暂存分发的配置提升为主分发,请使用 UpdateDistributionWithStagingConfig

有关您在这些 API 调用中指定的字段的更多信息,请参阅 Amazon 开发工具包或其他 API 客户端的 API 参考文档。

监控暂存分发

要监控暂存分发的性能,您可以使用 CloudFront 为所有分发提供的相同的指标、日志和报告。例如:

  • 您可以在 CloudFront 控制台中查看默认 CloudFront 分发指标(例如,总请求数和错误率),也可以启用其他指标(例如,按状态码划分的缓存命中率和错误率),但这需要支付额外费用。您也可以根据这些指标创建警报。

  • 您可以查看标准日志实时日志,以获取有关暂存分发收到的请求的详细信息。标准日志包含以下两个字段,可帮助您识别在 CloudFront 将请求路由到暂存分发之前最初将请求发送到的主分发:primary-distribution-idprimary-distribution-dns-name

  • 您可以在 CloudFront 控制台中查看和下载报告,例如缓存统计数据报告。

了解持续部署的工作方式

以下主题说明了 CloudFront 持续部署的工作方式。

将请求路由到暂存分发

在使用 CloudFront 持续部署时,您无需更改有关查看器请求的任何内容。查看器无法使用 DNS 名称、IP 地址或 CNAME 将请求直接发送到暂存分发。相反,查看器将请求发送到主(生产)分发,CloudFront 会根据持续部署策略中的流量配置设置将其中一些请求路由到暂存分发。有两种类型的流量配置:

基于权重

基于权重的配置将指定百分比的查看器请求路由到暂存分发。在使用基于权重的配置时,您也可以启用会话粘性,这有助于确保 CloudFront 将来自同一查看器的请求视为单个会话的一部分。有关更多信息,请参阅基于权重的配置的会话粘性

基于标头

当查看器请求包含特定的 HTTP 标头(您可以指定标头和值)时,基于标头的配置会将请求路由到暂存分发。不包含指定的标头和值的请求将路由到主分发。在本地测试中或在您能够控制查看器请求时,此配置很有用。

注意

路由到暂存分发的标头必须包含前缀 aws-cf-cd-

基于权重的配置的会话粘性

在使用基于权重的配置将流量路由到暂存分发时,您也可以启用会话粘性,这有助于确保 CloudFront 将来自同一查看器的请求视为单个会话的一部分。在启用会话粘性时,CloudFront 会设置 Cookie,以便单个会话中的来自同一查看器的所有请求都由一个分发(主分发或暂存分发)提供服务。

启用会话粘性时,还可以指定空闲持续时间。如果查看器在这段时间内处于空闲状态(未发送任何请求),则会话将过期,并且 CloudFront 会将来自该查看器的将来请求视为一个新会话。您可以将空闲持续时间指定为秒数,从 300(五分钟)到 3600(一小时)。

在以下情况下,CloudFront 将重置所有会话(甚至是活动会话)并将所有请求视为新会话:

  • 您禁用或启用持续部署策略

  • 您禁用或启用会话粘性设置

更新主分发和暂存分发

当主分发附加了持续部署策略时,以下配置更改适用于主分发和暂存分发:

  • 所有缓存行为设置,包括默认缓存行为

  • 所有源设置(源和源组)

  • 自定义错误响应(错误页面)

  • 地理限制

  • 默认根对象

  • 日志记录设置

  • 描述(评论)

您还可以更新分发的配置中引用的外部资源,例如缓存策略、响应标头策略、CloudFront 函数或 Lambda@Edge 函数。

主分发和暂存分发不共享缓存

主分发和暂存分发不共享缓存。当 CloudFront 向暂存分发发送第一个请求时,其缓存为空。当请求到达暂存分发时,它会开始缓存响应(如果已配置为执行此操作)。

持续部署的配额和其他注意事项

CloudFront 持续部署受以下配额和其他注意事项的约束。

配额

  • 每个 Amazon Web Services 账户 的最大暂存分配数:20

  • 每个 Amazon Web Services 账户 的最大持续部署策略数:20

  • 在基于权重的配置中,您可以发送到暂存分发的流量的最大百分比:15%

  • 会话粘性空闲持续时间的最小和最大值:300–3600 秒

有关更多信息,请参阅配额

HTTP/3

您不能将持续部署与支持 HTTP/3 的分发结合使用。

CloudFront 将所有请求发送到主分发的情况

在某些情况下(例如,资源利用率较高的时段),无论持续部署策略中指定的内容如何,CloudFront 都可能将所有请求发送到主分发。

无论持续部署策略中指定的内容如何,CloudFront 都会在流量高峰时段将所有请求发送到主分发。