不是什么花都可以代表爱情,玫瑰做到了,
不是什么石头都能代表永恒,钻石做到了,
不需要预置和管理服务器,您就可以在靠近最终用户的站点运行代码,以低延迟响应您的最终用户,Lambda@Edge 做到了!
您只需将您的 Node.js 代码上传到 Amazon Lambda,并部署到 Lambda@edge ,Lambda 会在靠近最终用户的 Amazon Web Services 站点上自动运行和伸缩代码,从而改善延迟、减少原始负载,实现高可用性。
您的代码由 Amazon CloudFront 事件触发,Amazon CloudFront 是一种全球内容分发网络(CDN)服务,可以安全地以低延迟和高传输速度向浏览者分发数据、视频、应用程序和API。
如何轻松入手 Lambda@Edge?
身为伊克罗德的解决方案架构师专业团队一员,编号018,现在和大家分享一个Demo,利用 Lambda@edge Origin Response 来展示 Lambda@edge 的执行情况。
架构示意图:
Step1:用户请求内容到 CloudFront
Step2:CloudFront 将请求转发给 Server
Step3:Server 响应内容并 Cache 到 CloudFront
Step4:Origin Response Trigger 执行 Lambda 函数
Step5:Lambda@edge 将执行结果返回给 CloudFront
Step6:CloudFront 将接收到的内容返回给用户
创建EC2,并安装配置Nginx,配置Cloudfront并将其源设定为EC2 DNS
我们此次 Demo 的目的是展示如何通过 Lambda@edge 修改 Origin Response 增加Cache-Control 参数。以下是具体步骤:
Step1:
创建 Lambda 函数
代码如下:
'use strict'; | |
// 利用Lambda@edge修改Origin Response 参数,增加Cache-Control | |
exports.handler = (event, context, callback) => { | |
const { response } = event.Records[0].cf; | |
const { headers } = response; | |
const CacheControl = 'Cache-Control'; | |
const defaultTimeToLive = 3600; // 3600 Seconds | |
if (response.status === '200') { | |
if (!headers[CacheControl.toLowerCase()]) { | |
headers[CacheControl.toLowerCase()] = [{ | |
key: CacheControl, | |
value: `public, max-age=${defaultTimeToLive}`, | |
}]; | |
} | |
} | |
callback(null, response); | |
}; |
Step2:
测试 lambda 函数
温馨提示:AWS lambda 测试库有很多已经写好的测试用例,小伙伴们可以根据自己的需求选择测试用例。
我们选用 Modify Response Header 做测试。
测试用例生成后,选择 Test 测试程序执行,看到 succeeded 的界面,我们基本就验证了此 Lambda 可以正常部署了。
Step3:
部署 Lambda@edge
选择想要部署的Distribution。
选择触发为 Origin Response,并点击部署。
温馨提示:此处可能因为 Role 权限不足导致无法部署,不过接下来这篇参考文档就能轻松解决问题。
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-permissions.html
Step4:
查看部署
成功部署后,我们可以在 CloudFront 界面查看 Lambda 的部署情况,浏览到页面并点击Edit。
从下图我们可以看到已经成功部署:
Step5:
刷新浏览器查看,Cache-Control 有没有添加进去:
可以看到,Cache-Control 成功添加。