【问题标题】:Cloudfront Origin Group detect failver using Lambda@EdgeCloudfront Origin Group 使用 Lambda@Edge 检测故障转移
【发布时间】: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


【解决方案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

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

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

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2023-03-24
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多