我的设置:
我有一个Cloudfront Origin Group,其中存储桶A是主存储桶,存储桶B是辅助存储桶。在origin-request
上添加了Lambda @ Edge来执行特定的过程。
无论何时向Cloudfront发送请求,我的Lambda @ Edge都会对其进行修改以匹配存储桶的文件夹结构,并相应地返回文件。
如果存储桶A没有某个文件,则会引发错误,并且Cloudfront故障转移会从存储桶B请求该文件。存储桶B与存储桶B的结构不同,它应从未修改的文件路径中返回文件桶。
示例:
我的原始请求:/somefile.html
Lambda @ Edge修改了此请求,以从存储桶A获取文件至:/en/somefile.html
如果存储桶A没有此somefile.html,则此请求将发送到存储桶B。它应从最初请求的路径:/somefile.html
而不是/en/somefile.html
返回文件
以上场景非常简单,我原来的场景非常复杂。基本上,存储桶A的文件路径是经过处理的路径,而存储桶B应该从最初请求的路径返回文件。
我想要的:
使用Lambda @ Edge如何检测请求是在存储区A还是存储区B上?
我尝试过的事情:
答案 0 :(得分:1)
在两个位置之一中找到CloudFront在原始请求触发返回控制之后将尝试联系的原始主机名。
如果您使用的是CloudFront所说的 S3起源(S3的REST接口),它将在这里:
event.Records[0].cf.request.origin.s3.domainName
如果您使用的是CloudFront所谓的自定义来源-包括S3网站托管端点以及任何其他非S3 REST的来源服务器,则位于此处:
event.Records[0].cf.request.origin.custom.domainName
这些可用于确定起源组中的两个起源中的哪一个下一步将接收请求。