我在Amazon CloudFront中设置了两个发行版 . 两个起源都指向同一个桶 . 如果找不到请求的资源,则存储区会重定向到API网关 . API网关执行生成资源的Lambda函数,此处调整其大小 . 完成后,它会重定向到可定义的URL(以后称为Lambda重定向URL) . 在有问题的情况下,此重定向URL是一个cdn URL,它作为备用域名(CNAME)映射到其中一个分发 .

下图显示了流程:

enter image description here

现在,为简单起见,我通过CloufFront分发URL访问尚未存在的资源来调用此流程 . 通过两个不同的发行版: I 具有备用域名(CNAME)的分发设置为cdn.example.de而 II 分配没有 . 否则分布是相同的,例如与他们的起源有相同的桶 .

如果访问方向 I ,我在浏览器中获得 too many redirects . 如果访问 II 一切正常,这意味着,我最终得到调整大小的图像,并在地址中有CDN URL .

enter image description here

什么有效:对 I 的请求也是 creates the resource . 因此,成功调用Lambda函数 . 此外,如果我通过我通过II Build 的资源请求一切正常 . 因此,问题是,CloudFront分发的重定向以某种方式被缓存 . 但这是我没有得到的部分:只有在资源成功创建并放回S3存储桶后,Lambda函数才会重定向到CDN . 因此,重定向不应该是最终的 . 应该是CloudFront - > Buckets网站 - > API网关 - > CDN(第一次) - > CloudFront - > Bucket - >交付!

有趣的是,如果我将Lambda重定向URL设置为存储桶 endpoints ,它就像一个魅力 .

Question :如果我使用CloudFront分配结合Lambda函数设置CNAME,我该如何解决 too many redirects 问题 . 这应该是标准的