我想知道Amazon Web Services中是否有选项,其中两个有两个EC2实例在运行,而我作为开发人员,当两个服务器都在同一服务器上运行时,我可以直接访问我的一个选项域。
访问权限是指通过网络浏览器定期访问网站(例如www.domain.com/some-post/
)
我希望我的网站继续保持活力。我目前在www.domain.com上有一台服务器的EC2服务器。如果我通过Elastic Load Balancer添加另一台服务器,我无法控制负载均衡器向我发送的服务器。
我有一个Wordpress网站,我想升级它的主题,插件和核心文件,所以我只想让我访问该服务器并测试它。我可以打开一个服务器并在公共IP上测试它,我做了它,并且它没有按预期工作,所以我需要在原始地址下运行它以确保如果它运行正常,它会运行好的。
我想到的唯一方法是创建服务器的映像,创建EC2实例,使用不同的域名,将服务器的访问权限限制为我的IP地址,将数据库更改为新域名称,比一切正常后,将域名更改回原始域名,并将弹性IP点指向新服务器。
答案 0 :(得分:2)
不能用ELB实现这种行为。这完全违背了ELB的目的 - 其目的是在与其相关的实例之间均匀分配流量。
通过它的声音,您正在寻找一个测试阶段,您可以使用它来测试新的更新等,而不会损坏实时网站。
您可以随时为您的测试阶段设置域名 - 例如“alpha.mysite.com”。
将环境变量用于此类用例是很常见的做法。您可能在机器上设置了一个环境变量,例如:stage = prod,在您的测试阶段可能是stage = test。然后在您的代码中,您可以获取此环境变量,根据代码运行的阶段执行不同的操作。例如,使用prod / development数据库。
开始使用Code Deploy来推送代码可能是一个想法。这样,您可以让部署挂钩在每个实例上设置环境 - 安装依赖项,加载代码,启动应用程序等。然后使用已部署的实例上已有的环境变量,您的代码将执行正确的操作。
我想你可以将测试阶段放在prod机器上的不同端口上,这样你可以使用相同的域,但这是一个非常糟糕的主意。我认为要获得安全,容错和可扩展的解决方案,您将需要一个额外的DNS名称。而你肯定不应该使用相同的ELB。如果要测试测试应用程序的负载平衡,则应使用额外的ELB。
事实上,有些人甚至不遗余力地使用不同的AWS账户管理测试环境。
您可能也对[{3}}感兴趣,可以帮助您解决此问题。
答案 1 :(得分:1)
如果我理解正确,您在单个ELB后面运行多个实例,并希望能够访问其中一个实例来测试升级。我认为,在性能和测试升级时,您不希望其他用户访问该实例。
我可以想到几种方法来实现这一目标。这是两个实际的: 1.使用AWS控制台或CLI从负载均衡器中删除实例。 ELB的任何请求都不会转到此实例。 在其自己的地址上直接访问要升级的实例。为此,必须将实例上的安全组配置为允许来自外部的HTTP连接。例如,您可以仅允许从您自己的IP和负载均衡器进行访问 2.为测试目的创建另一个ELB。确保您升级的实例仅响应测试ELB,而不是生产ELB。有两种方法可以实现:手动将其从生产ELB中删除,或者对实例进行ELB运行状况检查失败。 (在后一种情况下,测试和生产elb需要不同的健康检查。)
我的建议:当成本成为问题时,请选择第一选项。如果额外ELB的额外成本不是问题,请选择选项2,在升级时手动从生产ELB中删除实例,并在完成和测试后重新附加它。
更新(我意识到我没有完全回答你的问题):为了在不更改数据库中的域的情况下工作,你需要将你正在测试的机器指向正确的主机。
两种选择:
1.在进行与实例的直接http连接时,请确保该实例具有外部IP。将域放在hosts文件中并将其指向ip
2.在寻找额外的测试elb时,要么将主机文件中的域指向其中一个ELB ip,要么运行本地dns服务器,该服务器具有带有CNAME到ELB主机名的域的记录。
答案 2 :(得分:1)
虽然验证单个生产节点的正确升级是一个有效的用例,但在这种情况下,您可能最好在其他域上创建单独的测试环境。 这样,您可以单独测试所有更改/升级 为获得最佳结果,您需要定期将数据库从生产转移到测试环境。您可以编写自动更改数据库中的域的数据库脚本,以便(部分或全部)自动执行生产到测试数据库还原过程。