Cloudfront Origin Group 使用 Lambda@Edge 检测故障转移

Cloudfront Origin Group detect failver using Lambda@Edge

我的设置:

我有一个 Cloudfront Origin Group,其中 Bucket A 是主 bucket,Bucket B 是辅助 bucket。 Lambda@Edge 添加到 origin-request 以执行特定过程。

每当请求到达 Cloudfront 时,我的 Lambda@Edge 都会修改它以匹配我的存储桶和 returns 文件的文件夹结构。

如果 Bucket A 没有某个文件,它会抛出错误,Cloudfront 故障转移会从 Bucket B 请求文件。Bucket B 的结构与 Bucket it 不同,它应该 return来自存储桶中未修改文件路径的文件。

示例:

我的原始请求:/somefile.html Lambda@Edge 修改此请求以从 Bucket A 获取文件为:/en/somefile.html

如果 Bucket A 没有这个 somefile.html 那么这个请求会转到 Bucket B。它应该 return 来自最初请求路径的文件:/somefile.html 而不是 /en/somefile.html

上面的场景很简单,我原来的场景很复杂。基本上 Bucket A 文件路径是处理路径,而 Bucket B 应该 return 来自最初请求路径的文件。

我想要的:

使用 Lambda@Edge 如何检测请求是在 Bucket A 还是 Bucket B 上?

我试过的:

CloudFront 将在源请求触发器 returns 控件之后尝试联系的源主机名可以在两个位置之一找到。

如果您使用的是 CloudFront 所称的 S3 来源(S3 的 REST 接口),它将位于此处:

event.Records[0].cf.request.origin.s3.domainName 

如果您使用的是 CloudFront 所称的 自定义源 —— 其中包括 S3 网站托管端点以及任何其他非 S3 REST 的源服务器,它就在这里:

event.Records[0].cf.request.origin.custom.domainName

这些可用于确定下一个来源组中两个来源中的哪一个将接收请求。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-event-structure-request