快速构建高效的亚马逊CloudFront内容分发网络指南

内容概述

本文将通过五个步骤详细介绍如何创建一个使用CloudFront进行内容加速的最小架构示例。

  1. 创建S3存储桶以存放内容
  2. 配置CloudFront的基础设置
  3. 测试并使用Route 53进行域名加速接入
  4. 查看CloudFront指标并设置告警
  5. 启用CloudFront日志并将其存储到S3以进行备份

通过本指南,您将学会如何利用CloudFront快速搭建内容分发网络,并有效展示其分发效果。

接下来,让我们依次完成这五个步骤,搭建一个基于CloudFront加速的静态网站。完成后,您将得到的内容加速的最小架构示意图如下:

图片

了解亚马逊云科技CloudFront

CloudFront是亚马逊云科技提供的内容分发网络(CDN)服务。它旨在将数据和内容快速、安全地传递到全球用户,以提供更为快速和可靠的访问体验。

CloudFront的目标是将内容尽可能靠近终端用户,从而减少延迟时间和网络拥塞,为用户提供更佳的响应速度。通过在全球各地的边缘位置(Edge Locations)部署服务器节点,CloudFront能够缓存数据并在用户请求时从离其最近的节点提供数据,从而实现快速响应。

CloudFront支持多种类型的内容,包括静态和动态网页内容、视频和音频流、应用程序加速以及安全性功能等。它还提供多项附加功能,如内容压缩、SSL/TLS加密、访问控制、日志记录和报告等。

使用CloudFront,网站和应用程序能够提供高效、高可用性和安全的内容传递服务,同时减轻源服务器的负载。此外,CloudFront还可以无缝整合其他亚马逊服务,如S3存储桶、EC2实例和Lambda函数等。

图片

步骤一:构建S3存储桶以存放内容

亚马逊S3(Amazon Simple Storage Service)是亚马逊云科技提供的可扩展对象存储服务,使开发人员能够安全、可靠地存储和检索大量数据。

CloudFront支持分发其他云服务提供商的对象存储内容或第三方源站。值得注意的是,CloudFront与S3之间通过专用骨干网进行数据交互。结合使用CloudFront和S3,您将享受到更低的成本以及更佳的可用性和性能。

为快速构建和展示内容分发效果,我们将使用S3对象存储作为内容提供方。

首先,进入S3控制台并点击“创建桶”:

图片

为您的存储桶进行初始配置:

为了提升内容的安全性,建议将存储桶的公共访问权限(public access)设置为“阻止”。在后续步骤中,我们将通过其他方式访问存储桶内容。

图片

S3提供多种强大的自定义功能,此处不做详细展开,其他设置保持默认配置并在初始化页面底部点击“创建存储桶”。

图片

创建S3存储桶后,在S3首页中按照存储桶名称搜索并点击进入:

图片

点击上传需要分发的内容:

图片

上传完成后,您可以在存储桶中查看到上传的内容:

图片

在S3桶中检查该资源是否可访问(如下图),恭喜您!您已成功完成了最小静态源站的构建!

图片

步骤二:构建CloudFront基础配置

接下来,我们将快速构建CloudFront分配(Distribution)配置。请进入CloudFront首页并创建配置:

图片

在CloudFront的配置初始化页面,您将看到CloudFront配置所需的所有基本元素,包括:

Origin –
源服务器,支持多种亚马逊云科技服务类型,包括S3、EC2、ELB、API Gateway等,也支持第三方源站。

Default cache behavior –
默认缓存行为,在这里您可以灵活地配置缓存设置、启用传输压缩、允许请求方法和访问控制等功能。

Function associations –
边缘计算功能,CloudFront支持以“代码即逻辑”的方式满足实际业务中的定制化需求,例如边缘鉴权、跳转、设备判断等。

Web Application Firewall (WAF) –
您可以方便快捷地在初始化页面中启用亚马逊云科技的WAF,帮助抵御来自互联网的恶意流量攻击,且无需复杂的架构改造,即可与CloudFront无缝集成。关于亚马逊WAF的详细信息,请参考我们的WAF部署小指南系列。

Settings –
其他配置,如根据需求选择CloudFront区域、启用HTTP/3、启用IPv6等。

针对上述设置,我们将在后续的指南中深入探讨不同需求和场景的具体配置,敬请期待!

您可以参考以下配置进行初始化设置:

Origin
在源服务器设置中,我们将使用步骤一创建的S3存储桶进行内容服务。由于出于安全考虑,S3存储桶的公共访问权限已关闭,因此我们将通过CloudFront OAC(Origin Access Control)方式来获取S3内容:

点击创建访问控制设置:

图片

图片

稍后,创建完CloudFront初始化后,我们将获取到Policy Statement,并在后续步骤中更新到S3的设置中。

图片

其他配置则保持默认设置即可:

图片

图片

图片

创建完成后,您会返回到此Distribution的设置页面,接下来我们将进行两个关键操作:

  • 更新S3的Policy Statement,以便CloudFront能够成功访问S3桶并获取静态内容
  • 申请HTTPS证书以加密您的互联网流量

更新S3的Policy Statement

此时用于S3访问控制的Policy Statement已经生成,点击上方的“Copy Policy”:

图片

该Policy也可以在CloudFront的对应Origin配置中找到:

图片

在S3的Permissions标签中,找到Bucket Policy并粘贴上述复制的Policy,保存设置:

图片

保存成功后,CloudFront便可通过OAC方式访问存储桶中的内容,同时保证存储桶不被外部直接访问。

申请HTTPS证书,

加密您的加速域名的互联网流量

CloudFront提供的Distribution Domain Name(xxxx.CloudFront.net)可直接使用并原生支持HTTPS访问。如果您需要加速的是自有域名,则需要在设置中添加Alternate Domain Name,以便CloudFront支持您的域名加速,其具体步骤如下:

在Distribution的配置首页中,找到Settings配置并点击“编辑”:

图片

在Alternate domain name栏目中输入您所需加速的域名,并点击下面的“request certificate”:

除了在Amazon生成免费证书外,如果您已有申请好的证书,也可以在ACM(Amazon Certificate Manager)进行上传。请注意,为CloudFront使用的证书必须上传至us-east-1区域,避免上传到其他区域而无法关联使用。

图片

图片

在此处填写您的域名并选择DNS验证的方式继续,DNS验证相对方便快捷。此外,若您确认客户端能兼容ECDSA算法证书,也可选择ECDSA算法,它相较于RSA算法在相同安全级别下具有更快的加密和签名速度及更小的证书大小等优势。

图片

点击申请后,页面将自动返回到ACM首页,点击查看,并在您的权威DNS托管商处添加相应的CNAME记录和值,以Route 53为示例:

图片图片

在Route 53中创建记录:

图片

记录创建完成后,返回到ACM对应证书页面,稍等片刻刷新页面,即可看到证书成功颁发:

图片

此时回到CloudFront Settings页面,点击申请证书旁的刷新按钮,选择上述申请成功的证书并保存配置:

图片

请注意,在创建或变更CloudFront Distribution配置后,CloudFront需要一些时间将您的配置部署到全球的节点。当您看到Distribution页面上的Last Modified状态从Deploying变为一个固定时间时,表示配置变更已成功部署:

图片

恭喜您!完成这些步骤后,您已成功创建了基础配置的CloudFront Distribution!

步骤三:测试并使用Route 53进行加速域名接入

接下来,我们将对前面创建的CloudFront配置进行测试,确保无误后将业务域名接入DNS层,使最终用户能够方便快捷地访问。

在您构建的CloudFront Distribution界面,可以找到Distribution domain name内容:

图片

为了方便用户构建应用,可以直接在浏览器中输入CloudFront的Distribution domain name来访问S3桶中的资源,从而查看具体展示效果:

图片

如果您拥有自己的域名(如在步骤二中申请证书时的域名),则可以进行CloudFront绑定测试,以下是一个测试示例:

% curl -I https://cf-demo.xxxx.xxxx/infra.png --resolve cf-demo.xxxx.xxxx:443:`dig +short "您的Distribution domain name"|tail -1`

在上述curl测试用例中,可以看到通过自有域名成功访问CloudFront并获取S3桶中的资源,此处使用HEAD方法进行简洁输出。

请注意,此处测试用例仅展示连通性检查结果。若您的业务环境存在其他复杂逻辑,请进行完整的回归测试。

测试无误后,您可以在权威DNS上进行业务域名接入,修改自有域名的CNAME记录指向CloudFront的Distribution domain name,以Route 53为例:

图片

成功加入CNAME记录后,进行DNS记录检查,以确认是否已成功接入。

jsnwong@b0be837ca33a ~ % dig cf-demo.xxxxx.xxxxxx  

恭喜您!现在您可以直接访问您的域名,充分享受CloudFront为您提供的高性能、高可用的CDN加速服务!

步骤四:CloudFront指标查看及告警设置

CloudFront原生提供多样化的Metrics指标供用户使用,如下表所示:

_ABCD
1标准Metrics备注Additional Metrics(按需启用)备注
2Requests请求数统计4xx Error rate4xx细节统计,如401/403等
3Data transferDTO统计5xx Error rate5xx细节统计,如502/503等
4Error rate4xx/5xx统计Origin latency回源延迟
5__Cachehit rate缓存命中率

如需启用Additional Metrics,您可在CloudFront控制台的Telemetry – Monitoring中找到需要启用的Distribution并进行启用。

图片

在CloudFront页面中,您可以轻松查看创建的Distribution对应的Metrics,同时也可以在CloudWatch中查看指标并设置告警。

请注意,CloudFront Metrics数据存放于us-east-1区域,如选择CloudWatch作为入口,请切换至us-east-1以查看CloudFront对应指标。

图片

接下来,对上述步骤构建的CloudFront Distribution进行告警设置,这里以4xx告警为例。

在CloudWatch页面的Metrics – All metrics中,找到CloudFront指标入口,或使用您的Distribution ID进行搜索,以找到Distribution对应的4xx指标并勾选:

图片

勾选后,前往Graphed metrics标签,并点击Actions中的铃铛图标:

图片

在告警构建过程中,您可以根据业务需求选择告警设置的灵敏度。有关CloudWatch告警的详细原理,请参考:Using Amazon CloudWatch alarms

以下图为例,period为1分钟,threshold为90,datapoints to alarm为1 out of 1,表示:若在某一分钟出现了4xx状态码且大于阈值90,则触发告警。

如果您的业务不是高敏感业务,可以容忍一定的错误率,通过调整相应参数以实现合理告警。例如:

  • period为1分钟,threshold为90,datapoints to alarm为10 out of 7,表示在10分钟内,如果其中7分钟(连续或不连续)出现了4xx状态码且大于阈值90,则触发告警。

图片

接下来,选择创建新的topic,并为此topic命名,同时确认需要接收告警的接收方:

图片

创建后点击下一步:

图片

为您的告警命名,并填写必要的告警内容:

图片

最后一步进行告警配置审查并创建告警:

图片

请注意,创建告警后,如果您设置的接收方为邮箱,您将收到订阅确认邮件,请点击确认订阅,以便接受告警信息:

图片

图片

进行告警测试,持续请求一个不存在的对象,以触发4xx告警:

告警示例:

图片

恭喜您!至此,您已为您的Distribution创建了告警,以便及时接收到异常信息,确保业务的高可用性。

步骤五:启用CloudFront标准日志并存入S3存储桶进行备份

除了使用CloudWatch Metrics监控CloudFront服务外,对于某些特定场景,您可能需要利用亚马逊云科技的其他服务进行定制化的数据查询,此时可以选择将CloudFront日志保存至S3,以便进行更多的后续操作。

请根据步骤一的指引,创建一个专门存放日志的S3存储桶。建议将供网站内容的S3桶与存放日志的桶分开使用,以避免因操作失误导致日志泄露的风险。

创建用于存放日志的S3桶后,进入需要开启标准日志服务的Distribution界面,在Setting中点击“Edit”。

图片

找到“Standard logging”,点击“on”启用,并选择专门存放CloudFront日志的S3桶。由于在步骤一中创建S3桶时未启用ACL功能,您可以点击报错信息中的“Enable ACLs”来自动启用S3的ACL。

图片

启用成功后,点击页面底部保存配置即可。

图片

至此,您已完成所有CloudFront的基础配置操作!

总结

通过以上五个步骤,我们完成了亚马逊云科技CloudFront的启用和配置,了解了接入、监控、告警设置以及基本日志归档。对于CloudFront有更深层需求的用户,可以参考CloudFront部署小指南后续文章,以选择更加适合您的方案。