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 上?
我试过的:
- 我尝试在请求 header 中添加某些 header 并检查 header 是否存在然后它对 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
这些可用于确定下一个来源组中两个来源中的哪一个将接收请求。
我的设置:
我有一个 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 上?
我试过的:
- 我尝试在请求 header 中添加某些 header 并检查 header 是否存在然后它对 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
这些可用于确定下一个来源组中两个来源中的哪一个将接收请求。