在一个CloudFront分配下托管多个S3来源

时间:2017-11-23 01:21:11

标签: amazon-s3 amazon-cloudfront

是否可以在同一CloudFront分配下托管多个S3来源?假设我有存储桶A和存储桶B都存放静态网站 - 我可以将它们作为原点添加到分发中,并指定路径,例如来自存储桶B的来源/alternate,以便访问http://<distribution>/将您带到存储桶A托管的网站,访问http://<distribution>/alternate会将您带到存储桶B托管的网站?从我到目前为止所读到的内容来看,似乎可能有多个来源,不一定是多个S3起源。

2 个答案:

答案 0 :(得分:1)

您可以将多个S3起源添加到CloudFront分布中

但是,行为被锁定到特定的来源。行为控制路径。因此,如果Origin A / S3 A使用/ static,则/ static不能转到/ Origin B / S3 B

有人建议使用具有相同CNAME的多个CloudFront。那也不行。 CloudFront不允许在多个发行版中使用同一CNAME。

从学术上讲,这可以通过LambdaEdge或检查S3 A的某些其他外部过程来实现,并且如果不可用(例如-在推送新代码时处于维护状态),它可以为/ static更新CF行为到起源B / S3 B。

我希望AWS为这个用例提出一个更优雅的解决方案。就像允许在多个发行版中使用相同的CNAME一样,或与S3存储桶提供某种R53集成(永远不要尝试将两个不同的S3存储桶放在R53之后..可能不会起作用,因为主机头会发生变化)

答案 1 :(得分:0)

您可以附加Lambda函数作为触发器来拦截CloudFront的路由。该实现涉及到 ;但会允许您使用特定的用例。

示例实现https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

Lambda @ Edge https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html