2016-02-24 67 views
1

我想知道亚马逊网络服务中是否有选项,两个有两个EC2实例正在运行,而我作为开发人员可以直接访问一个当两台服务器在同一个域中服务时,我选择的是。在ELB下的特定EC2实例上访问特定网站

通过访问,我的意思是通过网络浏览器经常访问的网站(例如www.domain.com/some-post/

我希望我的网站多达继续是和生活。我目前在www.domain.com下有一台EC2服务器。如果我通过Elastic Load Balancer添加另一台服务器,则无法控制负载平衡器向我发送的服务器。

我有一个WordPress的网站,我想升级它的主题,插件和核心文件,所以我只希望我有权访问该服务器并对其进行测试。我可以打开一个服务器并在一个公共IP上测试它,我做到了,并且它没有像预期的那样工作,所以我需要在原始地址下运行它,以确保如果它运行正常,它会运行好吧活着。

我认为这样做的唯一方法是创建一个服务器映像,创建一个EC2实例,使用不同的域名,限制对我的IP地址访问服务器,将数据库更改为新的域名,而不是一切正常后,将域更改回原始状态,并将弹性IP指向新服务器。

回答

2

不,你不能用ELB实现这种行为。这完全违背了ELB的目的 - 谁的目的是在与其关联的实例之间平均分配流量。

通过它的声音,你正在寻找一个测试阶段,你可以用它来测试新的更新等,而不会损坏现场。

您可以随时在您的测试阶段为您的域名设置DNS名称 - 例如“alpha.mysite.com”。

对于像这样的用例,使用环境变量是很常见的做法。你可能在产品上设置了环境变量,例如:stage = prod,在你的测试阶段可能是stage = test。然后在你的代码中,你可以得到这个环境变量,根据代码运行的阶段做一些不同的事情。例如,使用prod/development数据库。

这可能是一个想法,开始使用Code Deploy推送您的代码。这样,您可以让部署钩子在每个实例上设置您的环境 - 安装依赖关系,加载代码,启动应用程序等。然后使用已部署到的实例上的环境变量,您的代码将执行正确的操作。

我想你可以把测试阶段放在你的prod机器上的不同端口上,这样你可以使用相同的域名,但这是一个非常糟糕的主意。我认为要获得安全,容错和可扩展的解决方案,您将需要额外的DNS名称。而且你绝对不应该使用相同的ELB。如果你想测试你的测试应用程序的负载平衡,你应该使用额外的ELB。

事实上,有些人甚至用不同的AWS账户来管理测试环境。

您可能也有兴趣Code Pipeline来帮助您。

1

如果我理解正确,您会在单个ELB后面运行多个实例,并希望能够访问其中一个实例以测试升级。我认为,在性能和测试升级的同时,您不希望其他用户访问该实例。

我可以想到一些方法来实现这一点。以下是两个实用的实例:
1.使用AWS控制台或CLI从负载平衡器中移除实例。没有任何要求ELB的请求会进入这个实例。 直接在自己的地址上访问要升级的实例。为此,必须将实例上的安全组配置为允许来自外部的HTTP连接。例如,您可以只允许从您自己的IP和负载平衡器访问。
2.创建另一个ELB用于测试目的。确保您要升级的实例只响应测试ELB,而不响应生产ELB。有两种方法可以完成此任务:或者手动将其从生产ELB中删除,或者对实例的ELB运行状况检查失败。 (在后一种情况下,测试和生产elb需要不同的健康检查)。

我的建议:当成本是一个问题时,请选择一个。当额外ELB的额外成本不成问题时,请选择选项2,在升级时手动从生产ELB中移除实例,并在完成并测试后重新附加实例。

更新(我意识到我没有完全回答你的问题):为了在不改变数据库中的域的情况下工作,你需要将你正在测试的机器指向正确的主机。 有两种选择:
1.当直接http连接到实例时,请确保该实例具有外部IP。将该域放入主机文件并将其指向ip。
2.当需要额外的测试elb时,请将hosts文件中的域指向其中一个ELB ip,或者运行一个本地dns服务器,该服务器将具有CNAME域的记录记录到ELB主机名。

+1

问题是我想在同一个域上测试它。这是因为缓存插件,数据库中配置站点的方式,即.htaccess规则。有很多事情需要改变,我想确切地知道,如果我升级并运行,它肯定能够正常运行。 –

+0

是的,我刚刚意识到这一点,现在正在编辑我的答案,坚持;-) –

1

虽然验证单个生产节点的正确升级是有效的用例,但在这种情况下,您最好在不同的域上创建单独的测试环境。
这样,您可以单独测试所有更改/升级。
为了获得最佳结果,您需要定期将数据库从生产转移到测试环境。您可以编写数据库脚本,这些脚本会自动更改数据库中的域,以便您可以(部分或完全)自动执行生产到测试数据库还原过程。

+0

似乎现在有办法做到这一点,这是我首先想到的,尽管我发布了一个问题也许有人将会提出解决这个问题的创造性方法。 –