Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 CloudFront 持续部署安全测试 CDN 配置更改
借助 Amazon CloudFront 持续部署,您可以先使用生产流量子集进行测试,从而安全地部署对 CDN 配置的更改。您可以使用暂存分发和持续部署策略来将一些来自实际(生产)查看器的流量发送到新的 CDN 配置,并验证其是否按预期运行。您可以实时监控新配置的性能,并在准备就绪时提升新配置以通过主分发为所有流量提供服务。
下图显示了使用 CloudFront 持续部署的好处。如果没有该部署,您将必须使用模拟流量来测试 CDN 配置更改。利用持续部署,您可以使用一部分生产流量来测试更改,然后在准备就绪时将更改推广到主分发。
使用 CloudFront 持续部署的工作流程
以下高级工作流程说明了如何通过 CloudFront 持续部署安全地测试和部署配置更改。
-
选择要用作主分发的分发。主分发是目前为生产流量提供服务的分发。
-
在主分发中,创建暂存分发。暂存分发作为主分发的副本开始。
-
在持续部署策略中创建流量配置,并将其附加到主分发。这决定了如何将流量 CloudFront 路由到暂存分配。有关将请求路由到暂存分发的更多信息,请参阅将请求路由到暂存分发。
-
更新暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发。
-
监控暂存分发以确定配置更改是否按预期执行。有关监控暂存分发的更多信息,请参阅监控暂存分发。
在监控暂存分发时,您可以:
-
如果您对暂存分发的性能感到满意,请将暂存分发的配置提升为主分发,这会将暂存分发的配置复制到主分发。这还会禁用持续部署策略,这意味着将所有流量 CloudFront 路由到主分发。
您可以构建自动化来监控暂存分发的性能(步骤 5),并在满足特定条件时自动升级配置(步骤 6)。
提升配置后,可以在下次要测试配置更改时重用相同的暂存分发。
有关在 CloudFront 控制台、或 CloudFront API 中使用暂存分配和持续部署策略的更多信息,请参阅以下部分。Amazon CLI
使用暂存分发和持续部署策略
您可以在 CloudFront 控制台中、使用 Amazon Command Line Interface (Amazon CLI) 或 CloudFront API 创建、更新和修改暂存分配和持续部署策略。
- Console
-
要将暂存分发和持续部署策略用于 Amazon Web Services Management Console,请遵循以下步骤。
创建暂存分发和持续部署策略(控制台)
登录Amazon Web Services Management Console并打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home。
-
在导航窗格中,选择 Distributions (分配)。
-
选择要用作主分发的分发。主分发是当前为生产流量提供服务的分发,您将从中创建暂存分发。
-
在 Continuous deployment(持续部署)部分中,选择 Create staging distribution(创建暂存分发)。这将打开 Create staging distribution(创建暂存分发)向导。
-
在 Create staging distribution(创建暂存分发)向导中,执行以下操作:
-
(可选)键入暂存分发的描述。
-
选择下一步。
-
修改暂存分发的配置。有关您可以更新的设置的更多信息,请参阅更新主分发和暂存分发。
修改完暂存分发的配置后,选择 Next(下一步)。
-
使用控制台指定 Traffic configuration(流量配置)。这决定了如何将流量 CloudFront 路由到暂存分配。(将流量配置CloudFront 存储在持续部署策略中。)
有关 Traffic configuration(流量配置)中的选项的更多信息,请参阅将请求路由到暂存分发。
完成 Traffic configuration(流量配置)后,选择 Next(下一步)。
-
查看暂存分发的配置,包括流量配置,然后选择 Create staging distribution(创建暂存分发)。
在 CloudFront 控制台中完成 “创建暂存分发” 向导后,将执行以下 CloudFront 操作:
当主分配的配置(附带持续部署策略)部署到边缘位置时, CloudFront 开始根据流量配置将指定部分的流量发送到暂存分发。
一旦暂存分发的配置部署到边缘站点,它就会对路由到暂存分发的传入流量生效。
当使用更新的持续部署策略的主分配配置部署到边缘位置时,会根据更新的流量配置 CloudFront 开始向暂存分配发送流量。
升级暂存发行版时,会将配置从暂存发行版 CloudFront 复制到主发行版。 CloudFront 还会禁用持续部署策略并将所有流量路由到主分发。
提升配置后,可以在下次要测试配置更改时重用相同的暂存分发。
- CLI
-
要将暂存分发和持续部署策略用于 Amazon CLI,请使用以下过程。
创建暂存分发(CLI)
-
将 aws cloudfront get-distribution 和 grep 命令结合使用以获取要用作主分发分发的 ETag
值。主分发是当前为生产流量提供服务的分发,将从中创建暂存分发。
以下命令是一个示例。在以下示例中,将 primary_distribution_ID
替换为主分发的 ID。
aws cloudfront get-distribution --id primary_distribution_ID
| grep 'ETag'
复制 ETag
值,因为您需要它来执行下一个步骤。
-
使用 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)
-
使用以下命令创建名为 continuous-deployment-policy.yaml
的文件,其中包含 create-continuous-deployment-policy 命令的所有输入参数。以下命令使用转义字符(\)和换行符来提高可读性,但您应在该命令中省略这些字符。
aws cloudfront create-continuous-deployment-policy --generate-cli-skeleton yaml-input \
> continuous-deployment-policy.yaml
-
打开刚创建的名为 continuous-deployment-policy.yaml
的文件。编辑该文件以指定所需的持续部署策略设置,然后保存该文件。当您编辑该文件时:
-
使用以下命令通过 continuous-deployment-policy.yaml
文件中的输入参数创建持续部署策略。
aws cloudfront create-continuous-deployment-policy --cli-input-yaml file://continuous-deployment-policy.yaml
复制命令输出中的 Id
值。这是持续部署策略 ID,您在下一步中需要它。
将持续部署策略附加到主分发(带输入文件的 CLI)
-
使用以下命令将主分发的配置保存到一个名为 primary-distribution.yaml
的文件中。将 primary_distribution_ID
替换为主分发的 ID。
aws cloudfront get-distribution-config --id primary_distribution_ID
--output yaml > primary-distribution.yaml
-
打开刚创建的名为 primary-distribution.yaml
的文件。编辑文件,进行以下更改:
完成后保存该文件。
-
使用以下命令更新主分发以使用持续部署策略。将 primary_distribution_ID
替换为主分发的 ID。
aws cloudfront update-distribution --id primary_distribution_ID
--cli-input-yaml file://primary-distribution.yaml
当主分配的配置(附带持续部署策略)部署到边缘位置时, CloudFront 开始根据流量配置将指定部分的流量发送到暂存分发。
更新暂存分发(带输入文件的 CLI)
-
使用以下命令将暂存分发的配置保存到一个名为 staging-distribution.yaml
的文件中。将 staging_distribution_ID
替换为暂存分发的 ID。
aws cloudfront get-distribution-config --id staging_distribution_ID
--output yaml > staging-distribution.yaml
-
打开刚创建的名为 staging-distribution.yaml
的文件。编辑文件,进行以下更改:
完成后保存该文件。
-
使用以下命令更新暂存分发的配置。将 staging_distribution_ID
替换为暂存分发的 ID。
aws cloudfront update-distribution --id staging_distribution_ID
--cli-input-yaml file://staging-distribution.yaml
一旦暂存分发的配置部署到边缘站点,它就会对路由到暂存分发的传入流量生效。
更新持续部署策略(带输入文件的 CLI)
-
使用以下命令将持续部署策略的配置保存到一个名为 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
-
打开刚创建的名为 continuous-deployment-policy.yaml
的文件。编辑文件,进行以下更改:
完成后保存该文件。
-
使用以下命令更新持续部署策略。将 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_ETag
和 staging_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 秒
有关更多信息,请参阅限额。
HTTP/3
您不能将持续部署与支持 HTTP/3 的分发结合使用。
CloudFront 将所有请求发送到主发行版的情况
在某些情况下,例如资源利用率高的时期,无论持续部署策略中指定了什么,都 CloudFront 可能将所有请求发送到主分发。
CloudFront 无论持续部署策略中指定了什么,都会在流量高峰时段将所有请求发送到主分发。峰值流量是指CloudFront 服务上的流量,而不是分发上的流量。