【发布时间】:2020-03-29 01:46:27
【问题描述】:
我的设置:
我有一个 Cloudfront 源组,其中存储桶 A 是主存储桶,存储桶 B 是辅助存储桶。在origin-request 上添加Lambda@Edge 来做某个流程。
每当 Cloudfront 收到请求时,我的 Lambda@Edge 都会对其进行修改以匹配我的存储桶的文件夹结构并相应地返回文件。
如果存储桶 A 没有特定文件,则会引发错误,并且 Cloudfront 故障转移会从存储桶 B 请求文件。存储桶 B 的结构与存储桶不同,它应该从未修改的文件路径返回文件桶。
示例:
我的原始请求:/somefile.html
Lambda@Edge 修改此请求以从 Bucket A 获取文件为:/en/somefile.html
如果 Bucket A 没有这个 somefile.html,那么这个请求会发送到 Bucket B。它应该从最初请求的路径返回文件:/somefile.html 而不是 /en/somefile.html
上面的场景很简单,我原来的场景很复杂。基本上 Bucket A 的文件路径是处理后的路径,而 Bucket B 应该从最初请求的路径返回文件。
我想要什么:
使用 Lambda@Edge 如何检测请求是在存储桶 A 上还是在存储桶 B 上?
我尝试过的:
- 我尝试在请求标头中添加某些标头并检查标头是否存在然后它对存储桶 B 的请求。但这似乎不起作用。
【问题讨论】:
-
查看 Lambda 函数内部的
event.Records[0].cf.request.origin.s3.domainName。它应该是存储桶的端点主机名,例如example-bucket.s3.amazonaws.com所以你可以用它来区分第一和第二来源。 -
当然,这是我正在尝试但不确定的一件事。谢谢你????
-
仅供参考,我收到的不是
event.Records[0].cf.request.origin.s3.domainName,而是event.Records[0].cf.request.origin.custom.domainName。它似乎在做作业。谢谢
标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudfront aws-lambda-edge