我的网站有一个子域api.example.com,我希望实现以下目标:
针对映射到api.example.com的S3静态网站具有1个CloudFront分布
已将API网关自定义域名映射到相同的子域api.example.com
我完成此设置的步骤是:
创建一个API网关自定义域api.example.com并设置我要公开为v1(目前为版本1)的API的基本映射
在Route 53中,我创建了一个CNAME记录api.example.com,指向第1步中API网关的Edge优化目标域名
注意:至此,我得到了预期的https://api.example.com/v1
的200条回复我创建了一个S3存储桶,并将其设置为用于静态网站托管。所有文件都已成功上传并且可以正常工作。
我创建了一个新的Cloudfront发行版,其来源位于S3存储桶中。此时,对于此Cloudfront发行版,我无法将CNAME记录设置为api.example.com,因为API网关中设置的第一个自定义域名已经使用了该记录,并且AWS提供了CNAMEAlreadyExistsException-因此我将此字段留空。可以按预期访问S3存储桶的CloudFront分发。
在为S3存储桶生成的CloudFront分布下,我添加另一个来源(API网关自定义域名)并创建Bevahior规则以将v1 / *调用路由到API网关自定义域名。
在这一点上,事情不再落伍: -访问https://api.example.com时,我从API网关发行版中获得了{“ message”:“ Fobidden”}。但是,URL https://api.example.com/v1仍返回预期结果。
问题:我有什么需要设置的内容,以便URL https://api.example.com可以返回S3静态网站的内容吗?
注意 :此外,我在S3存储桶云前分布中有一个空的CNAME字段,而在Route53中使用相同的CNAME定义了一个事实cloudfront发行版提示我一条警告消息,指出这种情况可能会使我暴露在漏洞中。
答案 0 :(得分:4)
对于上述用例,您仅需要一个Cloudfront发行版(已映射到api.example.com),该发行版就可以使用以下命令将流量转发到S3和API Gateway(均作为源添加到同一发行版)不同的行为配置。您可以通过以下方式配置行为:将/ v1 / *流量路由到API网关,将其他流量路由到S3。
设置起源和行为时,您需要遵循的配置很少。