背景:
我在带有静态网站+ Cloudfront发行版+ Route 53设置的S3存储桶上托管了Javascript。我需要Cloudfront,因为我需要具有SSL支持的自定义域。这很好。例如,可以在https://app.example.org/myscript.js处访问脚本。该URL已提供给客户以嵌入到他们的网页中,我无法更改。
Route 53的设置如下:
app.example.org => Cloudfont Distribution (s3://app.example.org)
我想要的:
我想为新功能设置一个暂存环境。我想将生产请求的10%定向到该脚本的另一个版本。
我尝试过的事情
我尝试用静态webiste + cloudfront用另一个备用域名(例如app-beta.example.org)设置另一个S3存储桶。
我需要使用其他备用子域,因为Cloudfront不允许具有多个分布的相同备用域名。
在Route 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
,因此无论app.example.org => Alias app-beta.example.org
的记录如何,cloudfront发行版(s3://app.example.org)都会接受请求。
我认为这里的Route 53确实会尝试根据权重规则将流量路由到Cloudfront,但是最终当请求到达Cloudfront时,Cloudfront会尊重“替代域名”,并且无论如何都使用(app.example.org)。< / p>
不使用Cloudfront怎么样?
我已经考虑过将EC2或EBS用于提供静态JavaScript文件的Nginx服务器。这可能有效。但是:
将在全球范围内请求javascript文件。使用EC2或EBS对某些用户而言将具有更高的延迟。这是不理想的。
这意味着需要额外的资源来管理和花费。
lambda @ Edge怎么样?
从技术上讲,lambda @ Edge如果更便宜,则是完美的解决方案。是的,它已经很便宜了(每个请求0.0000006美元),但在我们这种情况下,我们将为此支付超过1万美元。 (每月要求脚本> 100亿次,并且需要2个lambda函数进行设置)
问题
还有其他方法可以实现我想要的吗? (即在不更改网址的情况下逐步推出新版本)