aws lambda使用

快速提供内容对于任何网站或应用程序具有更好的客户体验都是必不可少的。 如果您将网站或应用程序托管在AWS Cloud中,那么无论从何处访问应用程序,都可以以较低的延迟快速提供内容。 AWS提供了CloudFront服务,用于将内容缓存在每个用户地理位置本地的边缘位置。

在此示例中,我们将向您展示如何使用AWS Lambda函数检索和转换图像,如何在CloudFront边缘位置本地缓存以及如何在原始服务器中更新缓存的图像时使这些缓存无效。 该方法可以应用于任何其他类型的内容。

1.什么是Amazon CloudFront?

Amazon CloudFront是AWS(Amazon Web Services)提供的内容交付网络(CDN)Web服务,它允许通过全球范围内的多个边缘位置访问内容。 Amazon CloudFront当前提供149个边缘位置和11个区域边缘缓存 。

2.什么是AWS Lambda?

AWS Lambda是一个事件驱动的无服务器计算平台,该平台运行代码而无需置备或管理服务器。 AWS Lambda根据事件触发器执行代码(功能)。 例如,一个简单的用例是,每次将图像上传到S3存储桶时,都可以触发Lambda函数来转换和调整图像大小。 AWS Lambda函数也可以通过AWS API Gateway内置的API执行。

3.什么是Amazon S3?

AWS S3(简单存储服务)是一种低成本,安全,耐用,高可用性和水平可扩展的对象存储服务,可以在其中存储,访问和轻松备份数据。 您可以从任何地方存储任何数量的信息。

4.从Origin Server获取图像并将其存储在S3中

假设您有一个媒体服务器,该服务器托管您的网站所需的所有图像,并假定该服务器能够在更新现有图像或添加新图像时触发通知。 使用AWS Lambda,可以对这些图像进行检索,转换,调整大小并将其存储到S3存储桶中。

图1:使用Lambda从Origin Server获取图像

上面的图1显示了AWS Lambda函数,该函数从Media服务器检索原始图像,进行转换并将其发布到S3存储桶。 它还会侦听Message Queue以获取Media Server发布的图像更新,并在S3中刷新图像。

5.使用Amazon CloudFront缓存内容

Amazon CloudFront可以通过边缘缓存加快内容交付速度。 当用户访问您的网站或应用程序并请求内容时,请求将被路由到最近的CloudFront边缘位置。 仅对于第一个用户,在检索内容时会有延迟,并且相同内容的所有后续用户将能够快速检索内容,因为内容将被缓存在边缘位置。

以下是用户对内容的请求发生的过程:

  • CloudFront在其缓存中检查所请求的对象。 如果在缓存中找到请求的对象,则将其返回。
  • 如果在CloudFront缓存中找不到请求的对象,
    • 该请求将被重定向到配置的原始服务器
    • CloudFront将从Origin Server返回的对象缓存在最近的边缘位置,然后返回给用户。

可以将CloudFront中的对象缓存为已配置的TTL(生存时间),一旦TTL过期,该对象将不再可用于从缓存中提供服务,如图2所示。

图2:使用CloudFront缓存图像内容

6.如何在AWS控制台上配置CloudFront

要配置CloudFront,必须先创建CloudFront分配。 选择“ Web分发”进行内容分发,然后选择“ RMTP”分发进行流媒体文件。 对于这种情况,让我们选择Web分发。

6.1创建CloudFront分配

登录到AWS控制台->选择CloudFront服务->创建分配->选择Web分配->入门

要将S3用作原始服务器,请为原始域名选择已创建的S3存储桶。 对于“ 原始路径”,输入存储对象的目录路径。 要将自定义HTTP Server用作源服务器,请为“ 源域名”输入自定义源服务器的DNS名称,为“ 源路径 ”输入上下文路径。

要将S3用作原始服务器,请为原始域名选择已创建的S3存储桶。 对于“ 原始路径”,输入存储对象的目录路径。 要将自定义HTTP Server用作原始服务器,请为Origin Domain Name输入自定义原始服务器的DNS名称,并为Origin Path输入上下文路径,如图3所示。

图3:从AWS控制台创建CloudFront分配

6.2缓存行为设置

如果只允许HTTPS访问,则启用将HTTP重定向到HTTPS。对象缓存中,如果选择了“使用原始缓存标头”,则CloudFront将使用原始服务器响应中的缓存控制标头( max-age ),除非还返回了“ s-max-age ”,在这种情况下为s-max-使用年龄

如果选择Customize (针对Object Caching ),则可以配置Minimum TTL,Maximum TTL和Default TTL,如图4所示。

  • 最小TTL是在CloudFront将请求转发到Origin Server之前,对象停留在缓存中的时间(以秒为单位)。 即使Origin Server的Cache-Control标头的值较低,对象也会被缓存最少的时间。
  • 最大TTL是在CloudFront将请求转发到Origin Server之前,对象停留在缓存中的时间(以秒为单位)。 最大TTL仅在原始服务器返回缓存控制标头时才有效。 即使Origin Server的Cache-Control标头具有更高的值,对象的缓存时间也不会超过此时间。
  • 仅当Origin Server不返回任何缓存控制标头时,默认TTL才有效。

图4: CloudFront分发上的缓存行为设置

6.3查询参数白名单

当您不想按所有查询参数缓存图像或内容,而仅按少数查询参数缓存时,可以将CloudFront配置为仅通过查询字符串白名单按选定的查询参数缓存,如图5所示,因此只有那些查询参数会包含在缓存键中。 仍然将所有查询参数转发到原始服务器。

图5 :CloudFront中的白名单查询参数

创建一个Alias记录以使用CloudFront分布Url映射Route53 CNAME记录,因此对Alias的请求将映射到CloudFront分布,然后再映射到原点。

7.使CloudFront中的缓存对象无效

一旦将对象缓存在CloudFront中,它们将保留在缓存中,直到缓存TTL过期为止。 如果在原始服务器中更新了一个对象,CloudFront不会知道这一点,但是会继续从其缓存中为过时的对象提供服务。 为了避免提供过时的数据对象,CloudFront允许通过不同方式使对象缓存无效。

在AWS文档中 ,您一次可以对每个分发进行多达3,000个文件的失效请求,每个失效请求可以包括多达3000个URL。 请注意,在启动CloudFront缓存失效后,CloudFront需要几分钟的时间才能从所有边缘位置删除对象。 即可能需要一些时间才能获得无效的结果。 失效所需的时间取决于失效请求中包含的对象URL的数量。

7.1通过AWS控制台使对象无效

以下是使来自AWS Console的缓存对象无效的步骤。

  • 登录到AWS管理控制台并打开CloudFront控制台
  • 选择您要使文件无效的分发。
  • 选择分发设置,然后选择无效选项卡。
  • 选择创建无效并输入无效路径,例如“ originserver / image / IMG54330080 *”。 该通配符路径将删除为imageId“ IMG54330080

7.2使用CLI(命令行界面)使对象无效

以下命令为给定分发ID的CloudFront分发创建无效。 命令语法:

aws cloudfront create-invalidation --DistributionId --paths

例:

aws cloudfront create-invalidation --distribution-id K14EK9G5DZUEWO  --paths /originserver/image/IMG54330080*
{"Location": "https://cloudfront.amazonaws.com/2019-01-25/distribution/K14EK9G5DZUEWO/invalidation/IUNZX941WYQR8","Invalidation": {"Id": "IUNZX941WYQR8","Status": "InProgress","CreateTime": "2019-01-17T17:07:57.636Z","InvalidationBatch": {"Paths": {"Quantity": 1,"Items": ["/originserver/image/IMG54330080*"]},"CallerReference": "cli-324234242-463845"}}}

7.3通过AWS开发工具包使对象无效

以下Java代码段用于通过Amazon SDK使对象无效。

AWSCredentials awsCredentials = new DefaultAWSCredentialsProviderChain().getCredentials();AmazonCloudFrontClient client = new AmazonCloudFrontClient(awsCredentials);Paths invalidation_paths = new Paths().withItems("/originserver/image/IMG54330080*", "/image/path/imageA.jpg").withQuantity(1);InvalidationBatch invalidation_batch = new InvalidationBatch(invalidation_paths, "Asset_Image_Cache");CreateInvalidationRequest invalidation = new CreateInvalidationRequest("distributionID", invalidation_batch);CreateInvalidationResult ret = client.createInvalidation(invalidation);System.out.println("Invalidation result: " + ret.toString());

如果您将CloudFront配置为将查询参数转发到Origin Server,则在使文件无效时必须包含查询参数,因为CacheKey是使用创建缓存时包含的查询参数创建的。 例如

http://cdn.originserver.com/image/IMG54330080?category=headshot&type=high-resolution&width=220&height=330&aspectRatio=3.5

或者,您可以在无效网址中使用通配符*。 请注意,在这种情况下,所有具有与URL(带通配符)匹配的CacheKeys的缓存条目都将失效。 例如

http://cdn.originserver.com/image/IMG54330080*

当新对象/更新对象上载到S3时,AWS Lambda函数还可用于使CloudFront对象无效。

如图6所示,将更新的对象上载到S3时,它将触发Lambda函数,该函数会使CloudFront缓存中的对象无效。

图6 :通过Lambda函数使CloudFront对象无效

8.总结

AWS CloudFront是一项功能强大的内容缓存服务,可为您的网站或应用程序的用户快速提供内容,而无需担心网站或应用程序的托管位置以及用户从何处访问您的应用程序。 将此服务与Lambda,S3等其他AWS服务一起使用可帮助创建动态缓存,因此可以将近实时数据快速提供给用户。 如果需要,还可以使CloudFront对象缓存无效。

翻译自: https://www.javacodegeeks.com/2019/02/dynamic-content-caching-with-aws-lambda-s3-and-aws-cloudfront.html

aws lambda使用

aws lambda使用_使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存相关推荐

  1. 使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

    快速提供内容对于任何网站或应用程序具有更好的客户体验至关重要. 如果您将网站或应用程序托管在AWS Cloud中,那么无论从何处访问应用程序,都可以以较低的延迟快速提供内容. AWS提供了CloudF ...

  2. node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API

    node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...

  3. aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈

    aws 堆栈模板 在AWS云堆栈 (例如DynamoDB,S3等)上构建应用程序时,需要针对这些组件编写测试. 您可能首先想到的是拥有一个用于生产的环境和另一个用于测试的环境,然后针对该环境运行测试. ...

  4. aws root账户_所以您继承了一个AWS账户

    aws root账户 Many engineers have found themselves in the unenviable position of being handed the keys ...

  5. java lambda表达式_高性能的 Lambda 表达式,简洁优雅图文并茂

    来源:知乎 Mingqi 链接:https://www.zhihu.com/question/20125256/answer/324121308 有网友问,Lambda 表达式有何用处?如何使用?在P ...

  6. lambda 使用_如何使用Lambda和API网关构建API

    lambda 使用 Do you want to access your database, control your system, or execute some code from anothe ...

  7. aws生态系统集成商_通过通用数据访问扩展AWS生态系统

    aws生态系统集成商 Amazon Web Services(AWS)可帮助组织托管和管理其数据流程,例如构建数据可视化和执行ETL任务. 在CData,我们可以轻松地将AWS Services与异构 ...

  8. aws s3仅允许cloudfront访问_初创公司如何用AWS搭建高扩展性架构

    ‍‍‍‍ 亚信云天的理解 • 初创公司需要快.多.好.省的技术架构 o 快:针对业务需要可以快速获得资源与服务 o 多:拥有丰富的云服务可供选择,能不自己做就不自己做 o 好:强调扩展性和高可用,既不 ...

  9. aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器

    aws lambda使用 by Daniel Ireson 丹尼尔·埃里森(Daniel Ireson) 如何使用AWS Lambda和S3构建无服务器URL缩短器 (How to build a S ...

最新文章

  1. 通过setTimeout处理click,dblclick,mousedown等事件的冲突
  2. lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)
  3. 地方高考信息管理系统方案
  4. 生产系统支撑终端故障处理的三个误区
  5. sql中索引不会被用到的几种情况
  6. 厦门高桔科技有限公司
  7. 无限循环小数四则运算_狐狸笔记 | 0.999999无限循环下去,就等于1吗?
  8. java 读取使用keytool生产的keystore文件
  9. hdu2369 Broken Keyboard(类似dfs)
  10. 非常好用的模糊pid温度控制算法_高度集成高速多点温度PID控制方案
  11. word字体放大后只显示一半_word字体显示不全或是显示一半怎么回事如何解决
  12. PostgreSQL 字典表设计
  13. mac tortoisesvn客户端_TortoiseSVN
  14. 文献学习(part31)--Discovery of time-inconsecutive co-movement patterns of foreign currencies using ...
  15. [WebView] - WebView leaked
  16. lua搭建ui_[专栏作家] Lua写UI的一些使用心得
  17. NVR(网络硬盘录像机)以及其他相近名词DVR、DVS、NVS
  18. ural 1671 Anansi's Cobweb
  19. (附源码)计算机毕业设计ssm高校教材管理系统
  20. 熊kong作品资源链接_Kong雀技术:向世界展示您的设计作品

热门文章

  1. H - Checker FZU - 2041
  2. D - Maximum Value Problem FZU - 2037
  3. Sky Garden
  4. Codeforces Round #762 (Div. 3)
  5. P3975-[TJOI2015]弦论【SAM】
  6. [XSY] 选举(线段树优化dp)
  7. L2-013 红色警报 并查集
  8. JavaFX滚动事件
  9. 自定义ClassLoader和双亲委派机制
  10. python打包exe文件