将 Amazon S3 源、MediaPackage 通道和自定义源用于 Web 分配 - Amazon CloudFront
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 Amazon S3 源、MediaPackage 通道和自定义源用于 Web 分配

当您创建分配时,可指定 CloudFront 发送文件请求的位置。CloudFront 支持将几个 AWS 资源作为源。例如,您可以指定 Amazon S3 存储桶或 MediaStore 容器、MediaPackage 通道或自定义源,例如 Amazon EC2 实例或您自己的 HTTP Web 服务器。

为您的源使用 Amazon S3 存储桶

当您使用 Amazon S3 作为分配的源时,可将希望 CloudFront 传送的任何对象放在 Amazon S3 存储桶中。您可使用 Amazon S3 支持的任何的方法来使对象进入 Amazon S3 中,例如 Amazon S3 控制台或 API 或第三方工具。您可在存储桶中创建一个层次结构来存储对象,就如您使用任何其他 Amazon S3 存储桶一样。

使用现有 Amazon S3 存储桶作为您的 CloudFront 源服务器不会以任何方式改变存储桶;您仍可如同往常一样使用它来存储和访问 Amazon S3 对象(标准 Amazon S3 价格)。在存储桶中存储对象会产生常规的 Amazon S3 费用。有关使用 CloudFront 的费用的更多信息,请参阅控制台中的 CloudFront 报告

重要

要使存储桶能够用于 CloudFront,其名称必须符合 DNS 命名要求。有关更多信息,请转至《Amazon Simple Storage Service 开发人员指南》中的存储桶限制

在指定您希望 CloudFront 从中获取对象的 Amazon S3 存储桶时,我们建议您使用以下格式访问该存储桶:

bucket-name.s3.region.amazonaws.com

另一种选择可能是使用以下更通用的格式,但请注意,此格式不适用于 2019 年或之后启动的区域:

bucket-name.s3.amazonaws.com

当您以该格式指定存储桶名称时,可以使用以下 CloudFront 功能:

切勿使用以下格式指定存储桶:

  • Amazon S3 路径样式 s3.amazonaws.com/bucket-name

  • Amazon S3 CNAME(如果有)

使用配置为您的源的网站终端节点的 Amazon S3 存储桶

您可以使用 CloudFront 设置一个 Amazon S3 存储桶,该存储桶将配置为作为自定义源的网站终端节点。

  • 当您配置 CloudFront 分配时,对于源,请输入您的存储桶的 Amazon S3 静态网站托管终端节点。此值显示在 Amazon S3 控制台的属性选项卡上的静态网站托管窗格中。例如:

    http://bucket-name.s3-website-region.amazonaws.com

有关指定 Amazon S3 静态网站终端节点的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的网站终端节点

当您以此格式将存储桶名称指定为您的源时,可使用 Amazon S3 重定向和 Amazon S3 自定义错误文档。有关 Amazon S3 功能的更多信息,请参阅 Amazon S3 文档。(CloudFront 也提供自定义错误页面。有关更多信息,请参阅 为特定 HTTP 状态代码创建自定义错误页面。)

使用 Amazon S3 存储桶作为您的 CloudFront 源服务器不会以任何方式更改它。您仍可像往常一样使用它,并且会产生定期 Amazon S3 费用。有关使用 CloudFront 的费用的更多信息,请参阅 CloudFront 定价

注意

如果您使用 CloudFront API 创建包含配置为网站终端节点的 Amazon S3 存储桶的分配,则必须使用 CustomOriginConfig 对该分配进行配置,即使该网站是在 Amazon S3 存储桶中托管。有关使用 CloudFront API 创建分配的更多信息,请参阅《Amazon CloudFront API 参考》中的 CreateDistribution

为您的源使用 MediaStore 容器或 MediaPackage 频道

要使用 CloudFront 流式传输视频,您可以设置配置为 MediaStore 容器的 Amazon S3 存储桶,或使用 MediaPackage 创建通道和终端节点。然后,在 CloudFront 中创建并配置分配以流式传输视频。

有关更多信息和分步说明,请参阅以下主题:

使用 Amazon EC2 或其他自定义源

自定义源是 HTTP 服务器,例如,Web 服务器。HTTP 服务器可以是 Amazon Elastic Compute Cloud (Amazon EC2) 实例,也可以是您私下管理的 HTTP 服务器。配置为网站终端节点的 Amazon S3 源也被视为自定义源。

当您使用作为您自己的 HTTP 服务器的自定义源时,可指定服务器的 DNS 名称、HTTP 和 HTTPS 端口以及您在从源中获取对象时希望 CloudFront 使用的协议。

当您使用自定义源时,大部分 CloudFront 功能都受支持,但下列情况除外:

  • RTMP 分配 – 不支持。

  • 私有内容 – 虽然您可使用签名 URL 从自定义源分配内容,对于访问自定义源的 CloudFront,源必须可公共访问。有关更多信息,请参阅使用签名 URL 和签名 Cookie 提供私有内容

请遵照将 Amazon EC2 实例和其他自定义源与 CloudFront 结合使用的准则。

  • 在为同一 CloudFront 源提供内容的所有服务器上托管和提供相同的内容。有关更多信息,请参阅源设置主题中的 您创建或更新分配时指定的值

  • 记录所有服务器上的 X-Amz-Cf-Id 标头项;CloudFront 需要此信息进行调试。

  • 限制对自定义源所侦听的 HTTP 和 HTTPS 端口的访问请求。

  • 在您实现的过程中,使所有服务器的时钟同步。请注意,CloudFront 对签名 URL 和签名 Cookie、访问日志和报告使用协调世界时 (UTC)。此外,如果您使用 CloudWatch 指标监控 CloudFront 活动,请注意,CloudWatch 也使用 UTC。

  • 使用冗余服务器来处理故障。

  • 有关使用自定义源来提供私有内容的信息,请参阅 在自定义源上限制对文件的访问

  • 有关请求和响应行为以及受支持的 HTTP 状态代码的信息,请参阅 请求和响应行为

如果您为自定义源使用 Amazon EC2,我们建议您执行下列操作:

  1. 使用 Amazon 系统映像为 Web 服务器自动安装软件。有关的更多信息,请参阅 Amazon EC2 文档

  2. 使用 Elastic Load Balancing 负载平衡器来处理通过多个 Amazon EC2 实例的流量,并使您的应用程序与 Amazon EC2 实例的变更隔离。例如,如果您使用负载平衡器,则可添加和删除 Amazon EC2 实例,而无需更改您的应用程序。有关更多信息,请参阅 Elastic Load Balancing 文档

  3. 当您创建 CloudFront 分配时,请为源服务器的域名指定负载平衡器的 URL。有关更多信息,请参阅 创建分配

使用 CloudFront 源组

您可以为您的 CloudFront 源指定源组,例如,在您希望为需要高可用性的场景配置源故障转移的情况下。使用源故障转移为 CloudFront 指定主源以及 CloudFront 将在主源返回特定 HTTP 状态代码故障响应时自动切换到的次要源。

要查看设置源组的步骤并了解更多信息,请参阅通过 CloudFront 源故障转移优化高可用性

在您已经从 Amazon S3 分发内容时添加 CloudFront

如果您将对象存储在 Amazon S3 存储桶中,您可以让用户直接从 S3 中获取这些对象,也可以将 CloudFront 配置为从 S3 中获取这些对象并将其分发到用户。

注意

要了解通过 CloudFront 对您的源使用 Amazon S3 存储桶(包括当您的 Amazon S3 存储桶配置为网站终端节点时)的更多信息,请参阅将 Amazon S3 源、MediaPackage 通道和自定义源用于 Web 分配

如果您的用户频繁访问您的对象(因为在使用量较大的情况下,CloudFront 数据传输价格低于 Amazon S3 数据传输价格),则使用 CloudFront 可能会更经济高效。此外,使用 CloudFront 时下载速度也比仅使用 Amazon S3 时更快,因为您的对象存储在离您用户更近的位置。

注意

如果您希望 CloudFront 尊重 Amazon S3 跨源资源共享设置,请将 CloudFront 配置为将 Origin 标头转发到 Amazon S3。有关更多信息,请参阅根据请求标头缓存内容

如果您当前使用自己的域名(如 example.com)直接从您的 Amazon S3 存储桶中分发内容,而不是使用 Amazon S3 存储桶的域名(如 MyAWSBucket.s3.us-west-2.amazonaws.com),则可以按照以下过程添加 CloudFront 而不会造成中断。

在您已经从 Amazon S3 分发内容时添加 CloudFront

  1. 使用以下过程之一创建 CloudFront 分配:

    当您创建分配时,请指定您的 Amazon S3 存储桶名称作为源服务器。

    重要

    要使存储桶能够用于 CloudFront,其名称必须符合 DNS 命名要求。有关更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的存储桶限制

    如果您对 Amazon S3 使用别名记录 (CNAME),请也为您的分配指定 CNAME。

  2. 创建一个测试网页并在该网页中添加您的 Amazon S3 存储桶中公开可读对象的链接,然后测试这些链接。对于此初步测试,请在对象 URL 中使用此分配的 CloudFront 域名,例如 http://d111111abcdef8.cloudfront.net/images/image.jpg

    有关 CloudFront URL 格式的更多信息,请参阅在 CloudFront 中自定义文件的 URL 格式

  3. 如果您使用 Amazon S3 别名记录 (CNAME),您的应用程序则使用您的域名(例如,example.com)来引用您 Amazon S3 存储桶的对象,而不是使用您的存储桶名称(例如,DOC-EXAMPLE-BUCKET1.s3.amazonaws.com)。要继续使用您的域名来引用对象,而不是使用分配的 CloudFront 域名(例如,d111111abcdef8.cloudfront.net),您需要通过您的 DNS 服务提供商更新您的设置。

    要使 Amazon S3 CNAME 发挥作用,您的 DNS 服务提供商必须具有针对您的域的 CNAME 资源记录集,当前将对域的查询路由到您的 Amazon S3 存储桶。例如,如果用户请求该对象:

    http://example.com/images/image.jpg

    该请求将自动重新路由,并且用户将看到该对象:

    http://DOC-EXAMPLE-BUCKET1.s3.amazonaws.com/images/image.jpg

    要将查询按指定路线发送到您的 CloudFront 分配而不是您的 Amazon S3 存储桶,您需要使用 DNS 服务提供商提供的方法来为您的域更新别名记录 (CNAME) 资源记录集。此更新后的 CNAME 记录将从您的域开始将 DNS 查询重定向到分配的 CloudFront 域名。有关更多信息,请参阅 DNS 服务提供商提供的文档。

    注意

    如果您使用 Route 53 作为您的 DNS 服务,则可使用 CNAME 资源记录集或别名资源记录集。有关编辑资源记录集的信息,请参阅编辑资源记录集。有关别名资源记录集的信息,请参阅在别名资源记录集和非别名资源记录集之间进行选择。这两个主题都位于《Amazon Route 53 开发人员指南》中。

    有关对 CloudFront 使用别名记录 (CNAME) 的更多信息,请参阅通过添加备用域名 (CNAME) 将自定义 URL 用于文件

    在您更新 CNAME 资源记录集后,将更改传播到整个 DNS 系统可能需要长达 72 个小时的时间,虽然通常传播的速度较快。在此期间,会继续将您的内容的一些请求按指定路线发送到您的 Amazon S3 存储桶,而其他请求将被发送到 CloudFront。

将 Amazon S3 存储桶移至其他区域

如果您使用 Amazon S3 作为 CloudFront 分配的源,并且您将存储桶移至其他区域,则在满足下面两个条件的情况下,CloudFront 需花费最多 1 个小时来更新其记录以包含区域更改:

  • 您使用 CloudFront 源访问身份 (OAI) 限制对存储桶的访问。

  • 您将存储桶移至需要签名版 4 以进行身份验证的 Amazon S3 区域。

在使用 OAI 时,CloudFront 使用区域(以及其他值)来计算用于从存储桶中请求对象的签名。有关 OAI 的更多信息,请参阅使用源访问身份限制对 Amazon S3 内容的访问。有关 Amazon S3 区域及其支持的签名版本的列表,请参阅 Amazon Web Services 一般参考的“区域和终端节点”一章中的 Amazon Simple Storage Service (Amazon S3)

要强制更快地更新 CloudFront 的记录,您可以通过更新 CloudFront 控制台中常规选项卡上的注释字段来更新您的 CloudFront 分配。在更新分配时,CloudFront 会立即检查您的存储桶所在的区域;将更改传送到所有边缘站点用时不超过 15 分钟。