使用 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 控制台、或 CloudFront API 中使用暂存分配和持续部署策略的更多信息,请参阅以下部分。Amazon CLI

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

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

Console

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

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

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

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

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

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

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

    2. 选择下一步

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

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

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

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

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

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

在 CloudFront 控制台中完成 “创建暂存分发” 向导后,将执行以下 CloudFront 操作:

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

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

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

当主分配的配置(附带持续部署策略)部署到边缘位置时, CloudFront 开始根据流量配置将指定部分的流量发送到暂存分发。

更新暂存分发(控制台)
  1. 打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home

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

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

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

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

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

更新持续部署策略(控制台)
  1. 打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home

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

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

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

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

当使用更新的持续部署策略的主分配配置部署到边缘位置时,会根据更新的流量配置 CloudFront 开始向暂存分配发送流量。

提升暂存分发的配置(控制台)
  1. 打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home

  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-id和。primary-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 秒

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

注意

使用持续部署并且您的主分配设置为 OAC 以进行 S3 存储桶访问时,请更新您的 S3 存储桶策略以允许访问暂存分配。有关 S3 存储桶策略的示例,请参阅向源访问控制授予访问 S3 存储桶的权限

HTTP/3

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

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

在某些情况下,例如资源利用率高的时期,无论持续部署策略中指定了什么,都 CloudFront 可能将所有请求发送到主分发。

CloudFront 无论持续部署策略中指定了什么,都会在流量高峰时段将所有请求发送到主分发。峰值流量是指CloudFront 服务上的流量,而不是分发上的流量。