【问题标题】:How to access Amazon S3 data via AWS CloudFront in r?如何通过 r 中的 AWS CloudFront 访问 Amazon S3 数据?
【发布时间】:2021-09-10 14:47:36
【问题描述】:

我在 rStudio 中构建了一个闪亮的 Web 应用程序,它使用访问密钥、秘密访问密钥和区域通过 Sys.setenv() 中的 EC2 从 Amazon S3 存储桶中提取数据,但我想使用 AWS CloudFront。我已经通过 AWS 在线控制台为有问题的 Amazon S3 存储桶设置了 CloudFront 分配,但不太了解如何实际确保通过 CloudFront 而不是 EC2 提取数据。我也可能误解了 Amazon S3 和 EC2/CloudFront 之间的关系,因此非常感谢任何信息。

【问题讨论】:

  • 你应该包含一些关于你想用 cloudfront 实现什么的信息

标签: r amazon-web-services amazon-s3


【解决方案1】:

Cloudfront 位于 S3 存储桶(或 http“源”)的“前面”并接收传入请求,并将其转发到源。然后它缓存响应。 Cloudfront 是一个“内容分发网络”,这意味着它在各处都有边缘节点,并将请求流量路由到附近的边缘节点,从而最大限度地利用亚马逊网络上的网络路径数量(快速、高质量和与 AWS 的其余部分具有良好的连接性)并最大限度地减少路径的消费者级部分(这是缓慢的、潜在的和不可靠的)。

这种缓存和边缘 cdn 可以显着加快处理速度 - 对于远程用户或高度重复的请求(例如对于繁忙的网站)。但是它会对你在 R 中的表现产生什么影响呢?如果 R 在 EC2 实例中运行,那么您已经非常靠近 s3 服务器,因此靠近边缘 cdn 服务器对您没有帮助。

Cloudfront 提供超文本协议,因此对 Cloudfront 的请求将通过 https 进行,但它确实 为 s3 api 提供服务,因此您的 s3 代码必须更改为更加基于 http 的进程。您必须以与您在 S3 中使用的 Sigv4 aws 签名不同的方式解决您的 authNZ。

Amazon S3 与 EC2/CloudFront 的关系

您几乎可以将 Cloudfront 视为源之前的负载平衡器。该来源可能是 S3,也可能是 http 服务器,可能在 EC2 实例上。但它的消费者始终是 http 客户端。消费者可能在 EC2 上,也可能在其他地方运行,但他们仍然使用 https。所以选择EC2/Cloudfront这句话让我有点困惑,因为EC2在客户端,而cloudfront“更接近”等式的S3源端。

【讨论】:

  • 如果您的 Shiny 服务器正在拉取数据,并且 Shiny 在与 S3 相同的账户内的 EC2 上运行,您可以设置 VPC 端点。这允许 EC2 通过 Amazon 网络直接连接到 S3(类似于在没有缓存时 cloudfront 对 HTTP 请求的处理方式)并且通过为 EC2 分配 IAM 角色,您可能可以绕过对访问密钥的需求环境变量
  • 无论是否使用 VPC 端点,Ec2 IAM 角色都是个好主意!
  • 谢谢两位,我现在有更好的理解,并将实施建议!
猜你喜欢
  • 2021-08-12
  • 2019-01-06
  • 2020-10-08
  • 2013-04-06
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 2017-12-30
  • 2021-06-26
相关资源
最近更新 更多