当前位置:网站首页>使用 Lambda 函数URL + CloudFront 实现S3镜像回源
使用 Lambda 函数URL + CloudFront 实现S3镜像回源
2022-07-01 13:47:00 【亚马逊云开发者】

1.背景说明
亚马逊云科技S3是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。各种规模和行业的客户都可以在S3存储和保护任意量的数据。为提高数据安全性,很多客户会选择将现有数据迁移至S3。
在迁移存储于第三方的数据至S3时,某些时候需要以“镜像回源”的方式完成以减少业务中断时间。“镜像回源”通常是指从S3获取的文件不存在时,需要从第三方源获取该文件并存放至S3。由于S3本身不提供“镜像回源”的功能,因此需要考虑自行实现。
一般情况下存储在S3的文件会通过CloudFront供外部使用,而CloudFront源组支持故障转移功能。一个可行的方案是借助CloudFront源组故障转移时利用备用源从第三方同步文件并保存至S3再返回给客户端。
在Lambda函数URL发布之前,通常需要在EC2部署一个简单的应用来作为备用源。这需要对“镜像回源”数据量有准确的估算否则会造成回源异常或者EC2资源浪费,借助Lambda则可以有效避免这些问题。
Lambda函数URL是Lambda在4月份新发布的一个特性,允许直接通过函数的URL断点调用Lambda函数。借用此特性,可以在不使用API Gateway或者ALB的情况下使用Lambda完成一些类似webhook、表单校验之类的简单功能,并且不会产生额外的Lambda费用。后文将介绍如何通过Lambda函数URL+CloudFront来实现“镜像回源”这一功能。
方案的总体架构图如下。

其工作原理说明如下:
1)终端设备向CloudFront请求文件
2)CloudFront向S3(主源站)请求文件
3)文件不存在则返回403至CloudFront
4)CloudFront根据源站组配置尝试请求Lambda函数URL(备用源站)
5)Lambda从第三方源获取文件
6)Lambda将文件保存至S3桶
7)Lambda返回302至CloudFront,附带地址为原始文件从而使客户端重新请求该文件
8)CloudFront再次向S3(主源站)请求文件
9)S3返回文件至CloudFront,CloudFront边缘节点根据缓存策略配置缓存文件
10)CloudFront返回文件至终端设备
2.配置指引
本方案总体配置流程为:
1.创建S3桶
2.创建并配置Lambda函数
3.创建并配置CloudFront分发
S3桶创建较为简单,本文略过,Lambda函数、CloudFront分发配置说明如下文。
2.1 Lambda函数配置
1)进入Lambda控制台,点击“创建函数”开始创建Lambda函数

2)按截图所示设置Lambda函数名、运行环境

3)展开“高级设置”,选择启用函数URL,为了方便演示将授权类型设置为“NONE”,实际生产环境可根据需要配置

4)函数代码可从如下地址复制。注意,链接中的示例代码使用了Python Requests库,因此需要为Lambda添加层以包含该库,操作方式如下图
https://github.com/ensean/lambda_sync_from_3rd_origin/blob/master/lambda_hanlder.py

5)添加层时层类型为“指定ARN”,同时指定ARN值。ARN可从如下链接根据区域、Python库类型查询
https://github.com/keithrozario/Klayers/tree/master/deployments/python3.9

6)进入Lambda函数配置界面,编辑常规配置。例如根据需要同步的文件大小调整超时时限

7)选择左侧权限菜单,点击执行角色,为角色配置S3桶访问权限

8)进入角色权限配置页面,点击“添加权限” → “附加策略”

9)为方便演示在弹出的策略中根据搜索选择“AmazonS3FullAccess”策略,后续生产环境可根据需要调整

10)选择环境变量菜单,如图所示添加环境变量external_endpoint, s3_bucket, service_endpoint

11)选择函数URL菜单,复制函数URL备用

2.2 CloudFront配置
1)创建CloudFront分发,源域选择S3桶,并配置CloudFront通过OAI访问S3桶。其他保持默认配置,创建CloudFront分发


2)进入CloudFront分发配置,切换至“源”标签页,点击“创建源”

3)在源域配置界面填入Lambda函数URL域名,其余保持默认配置,点击创建源

4)点击“创建源组”

5)根据提示选择S3源为主,Lambda函数URL源为备,故障转移条件选择403、404

6)在CloudFront控制台选择左侧“策略”菜单,在“缓存”标签页点击“创建缓存策略”

7)在缓存策略配置界面录入缓存策略名,同时调整最短TTL至0,其余TTL值可保持默认,然后创建缓存策略

8)进入CloudFront分发“行为”标签页,选择默认行为并编辑

9)在行为编辑界面设置“源和源组”为步骤5)创建的源组,同时调整缓存策略为步骤7)创建的缓存策略,然后保存更改


10)通过CloudFront访问类似如下文件,观察浏览器控制台网络请求情况。若出现类似下图结果,且文件正常保存至S3桶“file/2022/03/18/ea27cb786ffb474682a8feb5.jpg”则说明镜像回源配置成功 https://d281txxxxxxxx.cloudfront.net/file/2022/03/18/ea27cb786ffb474682a8feb5.jpg

3. 总结
Lambda函数URL作为新发布的功能,允许用户直接通过互联网访问Lambda,而且本功能没有额外的计费。本文提供示例借助CloudFront源组的故障转移功能和Lambda函数URL可快速实现S3“镜像回源”功能。读者还可以根据自身业务需要通过Lambda函数URL来实现一些轻量级的微服务应用。
4. 参考资料
https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html
https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/
https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html
本篇作者

李寅祥
亚马逊云科技解决方案架构师
负责基于亚马逊云科技云计算方案架构的咨询和设计,在国内推广亚马逊云科技云平台技术和各种解决方案。曾就职于IBM,负责企业私有云方案咨询和架构设计,在基础架构方面有丰富经验。


听说,点完下面4个按钮
就不会碰到bug了!

边栏推荐
- 盲盒NFT数字藏品平台系统开发(搭建源码)
- QT社团管理系统
- 自定义注解实现验证信息的功能
- 6年技术迭代,阿里全球化出海&合规的挑战和探索
- [anwangbei 2021] Rev WP
- Understand the window query function of tdengine in one article
- SAP 智能机器人流程自动化(iRPA)解决方案分享
- 一文读懂TDengine的窗口查询功能
- 刘对(火线安全)-多云环境的风险发现
- Anti fraud, refusing to gamble, safe payment | there are many online investment scams, so it's impossible to make money like this
猜你喜欢

Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its

“国防七子”经费暴增,清华足足362亿元,甩第二名101亿 |全国高校2022预算大公开...

当你真的学会DataBinding后,你会发现“这玩意真香”!

使用CMD修复和恢复病毒感染文件

Interpretation of R & D effectiveness measurement framework

Fiori 应用通过 Adaptation Project 的增强方式分享

Spark source code (V) how does dagscheduler taskscheduler cooperate with submitting tasks, and what is the corresponding relationship between application, job, stage, taskset, and task?

Etcd summary mechanism and usage scenarios

开源实习经验分享:openEuler软件包加固测试

When you really learn databinding, you will find "this thing is really fragrant"!
随机推荐
一文读懂TDengine的窗口查询功能
【剑指 Offer】55 - II. 平衡二叉树
[anwangbei 2021] Rev WP
6年技术迭代,阿里全球化出海&合规的挑战和探索
User defined annotation realizes the function of verifying information
Analysis report on production and marketing demand and investment forecast of global and Chinese diamond powder industry Ⓤ 2022 ~ 2027
Collation and review of knowledge points of Microcomputer Principle and interface technology - pure manual
Explain IO multiplexing, select, poll, epoll in detail
spark源码阅读总纲
word2vec训练中文词向量
A Fletter version of Notepad
孔松(信通院)-数字化时代云安全能力建设及趋势
Social distance (cow infection)
Global and Chinese polypropylene industry prospect analysis and market demand forecast report Ⓝ 2022 ~ 2027
QT社团管理系统
微机原理与接口技术知识点整理复习–纯手打
队列的基本操作(C语言实现)
Anti fraud, refusing to gamble, safe payment | there are many online investment scams, so it's impossible to make money like this
3.4 data query in introduction to database system - select (single table query, connection query, nested query, set query, multi table query)
spark源码(五)DAGScheduler TaskScheduler如何配合提交任务,application、job、stage、taskset、task对应关系是什么?