CDN 迁移
概览
内容分发网络 (CDN) 的作用是在全球分散的服务器之间分发内容,在 Web 应用程序分发中起至关重要的作用。如此一来,CDN 可提高应用程序的性能、安全性和可用性。AWS 为客户提供其原生 CDN Amazon CloudFront,该 CDN 在 AWS 全球网络的基础上以最高的可靠性标准进行构建。
其基于即用即付的单一模式,适用于从视频流到动态 API 交付等不同类型的应用程序,可通过私有定价协议进行优化。CloudFront 的开发人员偏好使用其所熟悉的 AWS DevOps 工具的原生集成,例如用于可观测性的 CloudWatch、用于访问控制的 AWS Identity and Access Management(IAM)以及用于基于基础设施即代码(IaC)部署的 AWS Cloud Development Kit(CDK)。
如果您决定将 CDN 从第三方提供商迁移到 CloudFront,请考虑以下步骤,以提高迁移成功的几率。
规划迁移
规划步骤指的是对项目进行定义的项目管理活动。
首先,需要确定迁移过程中所包含 Web 财产的范围。例如,您可能决定暂时使用第三方 CDN 保留流媒体服务网站,同时将视频交付本身迁移到 CloudFront。然后,确定主要项目进度节点及其相应的时间表,例如:
- [1 周] 使用 AWS 服务创建符合需求的目标设计
- [1 周] 进行配置和验证
- [3 周] 将生产流量逐步推出到 CloudFront
- [1 周] 进行微调,以优化成本、安全性和性能
将生产流量推出到 CloudFront 的持续时间取决于迁移的复杂程度。请考虑以下推出策略:
- 从低风险的 Web 财产开始 - 可能是流量较低或对业务影响较小的域名。这种方法可将业务风险降至最低,让您在没有太大压力的情况下进行故障排除。还能让您在移动更关键的 Web 财产时更有信心。
- 逐步迁移地理区域 - 如果您在不同的国家/地区开展业务,则可以分阶段在这些国家/地区进行迁移,从用户流量最少的国家/地区开始。这可以使用 Route 53 的地理位置路由等 DNS 功能加以实现。
- 逐步转移流量 - 对于最关键的 Web 财产,使用 Route 53 加权路由等 DNS 功能,以较小的增量路由流量。首先,将 1% 到 5% 的生产流量路由到 CloudFront,然后等待一段时间(如 24 小时),以加热 CDN 并发现潜在问题,然后逐步递增。
- 逐步启用功能 - 为减少迁移过程中的移动部件,可以逐步启用功能。例如,您可以从一开始就使用 AWS WAF 添加保护,但将其保持在监控计数模式下,以避免无意中阻止合法流量(误报)。您可以之后再更改 AWS WAF 的目标设置。
项目的时间表应与现有第三方合同的到期日保持一致,以便有足够的时间提前发出通知,并在合同之间留出足够的重叠时间,以便安全地推出变更。
在这一阶段,重要的是决定进行迁移所需的人力资源,是内部工程师还是在具备 CloudFront 和 AWS WAF 能力的 AWS 合作伙伴的帮助下进行迁移。
使用 AWS 服务创建目标设计
这一步骤由系统架构师牵头,与安全和应用程序团队合作,使用 CloudFront 和其他 AWS 服务生成目标内容分发网络 (CDN) 设计。每个 CDN 在其配置构建块和默认设置方面都有不同的方法,因此建议首先了解使用 AWS WAF 配置 CloudFront 的心理模型,以便在 AWS 上生成最优的目标设计。
根据所提供的内容,将每个 Web 财产分成不同的部分。对于由特定路径或路由(如 /api/*)标识的每个部分,定义技术要求以及如何使用 AWS 服务以满足这些要求:
- 如何确保与原始服务器的连接安全? 考虑不同的源隐藏技巧。
- 是否需要缓存? 如果是,需要多长时间以及使用哪一缓存密钥? 使用 CloudFront 缓存策略。
- 此路径需要哪些功能? 使用 Gzip/Brotli 进行文本压缩或 API 加速等部分功能,可使用 CloudFront 原生实现。其他功能则需使用 CloudFront 的边缘功能(例如图像优化、HTTP 重定向和 A/B 测试)编写自定义代码。
- 需要哪些安全控制? 根据威胁建模,可使用 AWS WAF 实施大多数安全控制,例如地理封锁、机器人管理以及防范 DDoS 攻击。
以下是 Web 财产的简化高级目标设计:

对架构师而言,将 CDN 迁移到 CloudFront 是一个绝佳机会,可让现有设置摆脱传统配置,实施现代化改造,并从内容分发行业的最新技术进步中获益。
最后,考虑如何实现可观测性,以便在迁移期间快速检测问题并作出反应,同时验证迁移是否达到预期的业务目标。您可以使用 CloudWatch 指标监控架构的不同组件,并根据指标创建警报。例如,当 CloudFront 上的 5xx 错误率超过一定阈值时,就会发出警报。还可根据 CloudFront 和 AWS WAF 生成的访问日志,使用 AWS 托管分析服务创建自定义控制面板。
客户迁移到 CloudFront 通常是为实现以下业务目标:
- 降低总体内容分发和安全成本 - 使用 AWS Cost Explorer 成本管理服务监控此类成本,并验证是否实现迁移的财务目标。
- 提高 Web 应用程序的稳定性和性能 - 使用 CloudWatch RUM,利用 Google 核心 Web 关键指标等 KPI,衡量 Web 应用程序在自身客户群体中的性能。其他 CDN 性能 KPI 包括缓存命中率,可使用 CloudWatch 指标进行监控。注意,CDN 可能以不同的方式计算 CHR。
- 提高安全覆盖率 - 进行渗透测试,例如 DDoS 模拟,以验证 AWS WAF 保护如何提高安全覆盖率。CloudWatch 会为每个已配置的 AWS WAF 规则发布指标。
进行 CloudFront 配置
这一步中,在实际开始迁移之前,DevOps 团队将负责准备所需的配置(例如 CloudFront 分配、AWS WAF WebACL 和新的负载均衡器)。可使用 AWS 管理控制台手动进行更改。但是,如果您熟悉 CDK、CloudFormation 或 Terraform 等 IaC 工具,最好使用这些工具进行自动化部署和未来的更改。
注意,AWS 的新功能需要数周时间才能在 CloudFormation 中推出,CDK 也是如此。要在组织中大规模部署跨团队的 AWS WAF WebACL,可考虑使用 AWS Firewall Manager 作为替代方案。通过该替代方案,可以构建安全治理,中央安全团队可在其中进行审计、执行合规性,并快速应对新出现的威胁。阅读本文,详细了解使用防火墙管理器进行 AWS WAF 治理的可能性。
通常,需准备以下配置构件:
- CloudFront 的配置,如缓存、路由等
- 正在使用的任何边缘功能的代码
- 其他基础设施组件的配置,如用于存储的 S3 或用于图像处理的 Lambda
- 对现有基础设施的更改,例如实施源隐藏
- AWS WAF WebACL 中的规则
- 可观测性(日志、控制面板、警报等)
- 如果使用 CDK,用于部署基于 CDK 配置的 CI/CD 管道
- 团队成员或合作伙伴的 IAM 权限,以便执行相关任务
通过应用最低权限的概念,AWS IAM 让您能够允许对相关资源执行特定操作,以避免人为错误导致配置错误。例如,可将 UploadServerCertificate 权限仅在办公时间授予执行证书相关迁移任务的操作员。注意,在 CloudFront 中,如果操作员拥有访问 CloudFront 分配的 IAM 权限,则可以更改其配置的所有路由。
最后,在将配置推广到生产环境之前,在暂存环境中对其进行测试和验证。要进行测试,可使用以下常用方法,人为地将测试客户端路由到 CloudFront:
- 更改操作系统本地主机文件(如 /etc/hosts),指向离您最近的 CloudFront 边缘 IP。通过对发行版的域名(如 *.cloudfront.net)运行 DNS 查询,以发现离您最近的边缘 IP
- 配置测试客户端,以使用私有 DNS,该 DNS 已有指向 CloudFront 的修改过的 CNAME 记录
逐步迁移生产流量
开始迁移之前,建议提前将已标记迁移的记录的 DNS 生存时间 (TTL) 缩短为较短的持续时间(如 1 分钟)。如果迁移期间遇到影响用户的问题,其将帮助您快速回滚到以前的 CDN。可使用 ThousandEyes 或 Catchpoint 等工具,验证 DNS 更改是否已传播到 DNS 解析器,是否已超过现有配置的 TTL。
现在,根据您选择的迁移策略,开始逐步将生产流量转移到 CloudFront。迁移期间,如果需要在代理生产流量时对 CloudFront 配置进行更改,请考虑使用 CloudFront 持续部署,以安全测试更改。
如果出现对查看者或关键业务服务存在重大影响的问题,可通过还原 DNS 记录,以可控的方式进行回滚。如果出现的问题并不严重,可考虑保留问题,并在账户团队和/或 AWS Support 的帮助下进行故障排除。
迁移后注意事项
有时,由于时间限制,完美配置所有设置可能并不现实。前述步骤可能主要针对 Web 应用程序的核心功能,但仍有许多机会对配置进行微调。例如,可以进行以下操作:
- 提高缓存命中率,以卸载源,并提高终端用户的性能
- 减少 AWS WAF 中的误报
- 优化交付应用程序的总体成本
最后,必须查看冗余 CDN 资源。您可能希望在有限的时间内保留全部或部分日志,例如查看无法导出的审计/本地日志。然而,这些资源最终将停止使用,届时建议您清理所有与之相关的残留配置和设置。一些示例包括:
- 禁用不再提供流量的前提供商的资源
- 删除过时的集成、证书存储或第三方监控服务
- 禁用任何未使用的 CNAME 和证书