背景:我有一个Javascript托管在S3 bucket上,静态网站+Cloudfront发布+Route 53设置。
我有一个Javascript托管在S3 bucket上,静态网站+Cloudfront分发+Route 53设置。我需要Cloudfront,因为我需要支持SSL的自定义域名。这工作很好。作为一个例子,该脚本可以在以下地址访问。https:/app.example.orgmyscript.js。. 这个URL是给客户嵌入到他们的网页上的,我无法更改。
Route 53的设置是这样的。
app.example.org => Cloudfont Distribution (s3://app.example.org)
我想要的是:
我想为新功能建立一个暂存环境。我想将10%的生产请求引导到另一个版本的脚本。
我尝试了什么?
我曾试过用不同的替代域名(如app-beta.example.org)设置另一个S3 bucket与静态webiste + cloudfront,但我需要使用不同的替代子域名,因为Cloudfront不允许在多个发行版中使用相同的替代域名。
我需要使用不同的替代子域名,因为Cloudfront不允许使用相同的替代域名进行多个分发。
在路由 53 中,我设置了这样的别名 A 记录。
app-beta.example.org => Alias Cloudfont Distribution (s3://app-beta.example.org)
app.example.org => Alias app-beta.example.org (weighted 10)
app.example.org => Alias Cloudfont Distribution (s3://app.example.org) (weighted 100)
为什么不成功?
结果发现这样做是不行的。
因为请求的域名是一样的 app.example.org
云端分发(s3:/app.example.org)将拾取该请求,而不管该请求的记录是什么。app.example.org => Alias app-beta.example.org
.
我想这里Route 53确实尝试根据权重规则将流量路由到cloudfront,但最终当请求到达cloudfront时,cloudfront会尊重 "替代域名 "并使用(app.example.org)。
那不使用cloudfront呢?
我曾想过使用EC2或EBS为nginx服务器提供静态javascript文件。这可能是可行的。但是。
javascript文件将在全球范围内被请求。使用EC2或EBS意味着对一些用户来说,它将有更高的延迟。这并不理想。
这意味着需要管理额外的资源和成本。
lambda@Edge怎么样?
从技术上讲,lambda@Edge是一个完美的解决方案,如果它更便宜的话。是的,它已经很便宜了(每个请求0.0000006美元),但在我们的情况下,我们将为它支付超过1万美元。(该脚本每月被请求>100亿次,设置需要2个lambda函数)
问题
有没有其他方法可以达到我想要的目的?(即在不改变URL的情况下逐步推出新版本)