Cloudfront Origin Group detect failver using Lambda@Edge

℡╲_俬逩灬. 提交于 2020-01-24 20:55:47

问题


My setup:

I have a Cloudfront Origin Group where Bucket A is a primary bucket and Bucket B is a secondary bucket. Lambda@Edge is added on origin-request to do a certain process.

Whenever a request comes to Cloudfront, my Lambda@Edge modifies it to match the folder structure of my bucket and returns file accordingly.

If Bucket A doesn't have a certain file it throws an error and Cloudfront failover requests the file from Bucket B. Bucket B doesn't have the same structure as Bucket it, it should return the file from unmodified file path in the bucket.

Example:

My Original Request: /somefile.html Lambda@Edge modifies this request to get the file from Bucket A to: /en/somefile.html

If Bucket A doesn't have this somefile.html then this request goes to Bucket B. It should return file from the originally requested path: /somefile.html and not /en/somefile.html

The above scenario is very simple, my original scenario is much complex. Basically Bucket A file path is processed path while Bucket B should return file from an originally requested path.

What I want:

Using Lambda@Edge how can I detect if the request is on Bucket A or bucket B?

What I have tried:

  • I tried adding certain header in request headers and check if the header exists then its request to Bucket B. But this doesn't seem to be working.

回答1:


The hostname of the origin that CloudFront will try to contact after an origin-request trigger returns control can be found in one of two places.

If you are using what CloudFront calls an S3 origin (the REST interface to S3) it will be here:

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

If you are using what CloudFront calls a custom origin -- which includes S3 website hosting endpoints as well as any other origin server that isn't S3 REST, it's here:

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

These can be used to determine which of two origins in an origin group will receive the request, next.

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



来源:https://stackoverflow.com/questions/59172937/cloudfront-origin-group-detect-failver-using-lambdaedge

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!