Lambda @ Edge是AWS Lambda计算服务的补充,用于自定义cloudfront提供的内容.
显示AWS Lambda与cloudfront的工作的框图AWS显示在下面 :
有四个AWS Lambda可以使用和减去的方式;
查看者请求&减去; 最终用户制作名为Viewer Request to CloudFront的请求
Origin Request : CloudFront将请求转发给原始
Origin Response : CloudFront收到来自原点的回复
Viewer Response : CloudFront将响应发送给查看器
我们可以将Lambda @ Edge用于以下目的 :
更改标题请求和响应时间.
向标题添加Cookie详细信息.根据请求和响应进行AB测试.
根据标题详细信息将URL重定向到另一个站点.
我们可以从标题中获取用户代理,并找出浏览器,操作系统等的详细信息.
要开始使用CloudFront和Lambda @ Edge,我们需要以下 :
创建包含文件详细信息的S3存储桶
创建角色,允许使用CloudFront和Lambda @ Edge的权限
创建CloudFront分配
创建lambda函数
将lambda功能详细信息添加到Cloudfront
检查浏览器中的云端网址
我们将使用CloudFront和Lambda @ Egde进行示例,其中我们将托管页面并在检测到桌面和设备时更改响应.
登录AWS控制台并在S3中创建存储桶并添加.你要显示的html 文件.
单击 S3 和创建存储桶,如下所示 :
现在,单击创建存储桶按钮并添加存储桶的详细信息,如下所示 :
点击创建按钮并上传.html它.
转到AWS控制台并单击 IAM .
现在,点击角色 - >创建角色按钮如图所示 :
选择 S3,Lambda 和 Cloudfront 的权限.最好通过使用ARN详细信息创建仅授予所需功能,存储权限的策略.
在下面讨论的示例中,我们显示完整访问权限许可.如上所示,添加了角色名称角色的前沿的策略.点击创建角色.
lambda @ edge和cloudfront所需的所有策略如上所示.这里还有一个额外的步骤要做,因为云端网站可以跨区域使用,并且它需要我们正在使用的服务之间的信任关系.
现在,对于创建的角色,点击信任关系标签显示和减去;
点击编辑信任关系,如下所示 :
它显示一个政策文件.我们需要在 Principal - >中添加其他服务.我们计划使用的服务.最终信任关系政策文件如下所示 :
单击更新信任策略按钮以保存更改.
转到CloudFront服务如下所示 :
单击CloudFront服务并单击on 创建发行 :
让我们逐个查看这些设置 :
原点设置
Origin设置的各种参数解释为低于和低于;
Origin Domain Name : 这是我们存储html文件的S3存储桶的名称.我们还可以通过创建我们选择的文件夹在S3存储桶中存储图像(如果有).
Origin Path : 在这里您需要输入名称存储文件的文件夹.目前,我们没有此文件夹,因此我们暂时将其保留为空白.
原点ID : 当原始域名为选择.您可以根据自己的选择更改ID.
限制Bucket Access : 在此,我们将选择是选项.在这里,我们需要S3存储桶的安全性,以便没有人可以访问S3存储桶.对于此选项,还有一些选项填充,如原点访问标识,存储区上的注释和授权读取权限.
原点访问标识 : 我们使用了创建新的身份选项.您也可以选择现有身份.这将创建一个新标识,CloudFront将使用该标识从S3存储桶中读取详细信息.
Bucket上的Grand Read Permission : 为此,请选择是.
Origin自定义标题&减号; 我们会在此处将标题留空,因为我们现在不需要详细信息.
接下来,让我们讨论并填写行为设置 for Cloudront distribution :
现在,选择协议 - https或http,以及缓存选项.请注意,默认缓存为86400或24小时.您可以根据要求更改此值.
单击对象缓存(自定义选项)以更改缓存.如果您的网页上有任何视频,您可以使用畅畅的流媒体.在这里,我们保持默认选项.创建lambda函数后,将添加其详细信息.
分发设置的详细信息如下所示 :
分配设置的各种参数在下面和下面解释;
价格等级 : 它包含用户流量来源等详细信息.请注意,我们在此处选择了默认值 - 使用所有边缘位置.
AWS WAF Web ACL : 这是针对Web的应用防火墙选择.在这里,它有无选项.首先,我们需要在AWS中创建防火墙.它为网站提供安全保障.
替代域名&减号; 如果您有域名,可以在此指定域名.
SSL证书 : 这包含为SSL证书选择的所有详细信息.我们将保留默认值.
默认Root对象 : 这里我们将指定我们在S3中上传的文件名.为此,我们需要默认显示.html中的内容.
对于其余部分,我们将保留默认设置.
点击创建发布按钮添加发布.
请注意,分发将花费一些时间来显示已部署的状态.
转到AWS控制台并创建Lambda函数.
在AWS Lambda代码中,我们将获取请求标头并检查用户代理.如果用户代理来自桌面,我们将更改响应显示消息为"DESKTOP:欢迎使用带有Cloudfront的AWS Lambda!"如果设备消息将是"移动设备:来自Lambda @ Edge的您好!"
相应的AWS Lambda代码如下所示 :
let content = ` <\!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Simple Lambda@Edge Static Content Response</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1> </body> </html> `; let content1 = ` <\!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Simple Lambda@Edge Static Content Response</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1> </body> </html> `; exports.handler = (event, context, callback) => { let request = event.Records[0].cf.request; let finalrequest = JSON.stringify(request); let headers = request.headers; let useragent = JSON.stringify(headers["user-agent"][0].value); let str = ""; if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) { str = content; } else { str = content1; } const response = { status: '200', statusDescription: 'OK', body: str+useragent, }; callback(null, response); };
现在,保存Lambda函数.请注意,我们需要发布Lambda函数,以便它可以与所有区域一起使用.要发布,我们需要执行以下操作;
从"操作"下拉菜单中选择发布新版本,如下所示 :
如果您,请单击发布新版本,它会显示以下屏幕 :
现在,输入版本说明,然后单击发布. ARN将显示创建的AWS Lambda函数的版本,如下所示 :
将CloudFront触发器添加到如下所示创建的新版本 :
现在,添加CloudFront的配置详细信息. CloudFront事件具有查看者请求,原始请求,原始响应和查看者响应的选项.
接下来,选择CloudFront分配之前创建的.从活动,我们将选择查看者请求.根据查看者请求,将决定用户代理的桌面/设备,并更改响应.接下来,添加触发器详细信息.
一旦触发添加后,我们需要等待部署CloudFront的分发.
状态更改为已部署后,我们可以测试CloudFront网址并在浏览器中检查域名.
桌面显示浏览器如下图所示.这里我们从viewer-request事件中打印了用户代理.
这是移动设备中的显示.
因此,在上面的示例中,我们使用Lambda @ Edge更改桌面和移动设备上的响应.