我是否正确使用CloudFront? labmda,s3,cloudfront

时间:2017-12-03 23:18:18

标签: python amazon-s3 aws-lambda amazon-cloudfront zappa

我正在阅读和观看有关 aws lambda s3 CloudFront(CF)的视频。我想在此确认一下,我理解(或不理解)aws cloudfront和更常见的CDN的概念。

目标:我想通过CF从我的应用中提供图片。我打算部署aws lambda函数。在我描述的场景中 - 我的lambda函数是简单的应用程序,可能只有一个端点。 POST端点实现图像上传(从文件创建checsum,检查文件校验和是否已经在s3中 - 保存与否,并返回图像)。图像调整大小,仅在通过查询字符串提供参数时运行。将存储所有图像(原始图像,调整大小,旋转等)。 S3是CF的原点。

部署:当我使用python时 - 我想使用zappa作为部署工具。

示例问题

8:00 : 用户正在从澳大利亚上传图片。之前没有图像,因此将其保存到S3并返回。​​

9:00 同一位用户要求提供图片缩略图。图像被调整大小并返回。在这里,我假设图像调整大小的请求(例如https://app.org/resize/image1.jpeg?width=80&height=80)与response(image.jpg 80x80)一起保存在Cloudfront的澳大利亚边缘节点上。

10:00 用户要求使用相同的查询字符串查找相同的缩略图 - 他从澳大利亚的云端边缘缓存中获取image.jpg 80x80。

我做对了吗?

1 个答案:

答案 0 :(得分:2)

不完全是。您在第一句和最后一句之间的目标段落中描述的内容与CDN完全无关,应由您的应用程序处理。 (即跟踪已上传的内容,以不同方式处理同一文件的后续上传,仅在首次请求时生成缩略图大小等)。

CloudFront的唯一职责是检查所请求的资源是否存在于任何最佳边缘位置,如果是,请检查它,否则检查它是否存在于原点,如果是,则下载并复制到边缘并提供服务,否则回复有错误。

  

9:00同一位用户要求提供图片缩略图。图像已调整大小   并返回。

现在你有一个问题(如果我理解正确并且图像是从CF请求的,它的来源是静态存储,如S3),因为请求的缩略图不存在,S3显然无法生成它。为此,源必须是能够处理来自CF的请求的应用程序服务器。不只是服务他们,而是执行一些逻辑,并可能在服务到CF之前生成缺少的缩略图。

或者,您应该在图片上传时将所有需要的版本生成并存储在S3上。