如何连接到 Elastic Load Balancer 后面的特定实例
Posted
技术标签:
【中文标题】如何连接到 Elastic Load Balancer 后面的特定实例【英文标题】:How to connect to specific instance behind Elastic Load Balancer 【发布时间】:2016-01-01 05:00:01 【问题描述】:我正在通过 Elastic Beanstalk 部署我的应用程序,它会创建 Elastic 负载均衡器并将我的所有实例都放在它后面(3 个或更多)。
有没有办法直接联系这些实例?我想在每个实例上触发一个特定的命令(git pull
命令与我的远程仓库中的最新代码同步)。
我有来自php SDK
的实例的 IP 地址和公共 DNS 列表,但由于防火墙规则将 IP 地址的来源限制为端口 80 上的弹性负载均衡器 IP,我似乎无法直接访问它们.
有办法解决吗?
附: SSH 端口似乎对所有流量都开放,但我怎样才能创建一个触发器呢?我希望创建一个 PHP 脚本,通过远程 repo 上的 webhook 自动执行此操作。
【问题讨论】:
【参考方案1】:我强烈建议您在所有部署中使用带有 git 集成的 EB CLI,无论多么小。这很棒,因为您可以使用 eb use YOUR_ENV
将 git 分支映射到环境,然后当您运行 eb deploy
并检查该分支时,它将部署到该环境。
要确保多台服务器提取正确的代码并且一切都按预期工作,需要做很多工作。如果服务器正在启动但还没有为 SSH 做好准备,因此您的脚本跳过了它并且它没有获取新代码怎么办?
另外,当新服务器启动但它使用旧应用程序时会发生什么,因为那是 EB 中的内容?你可以让你的 kickstart 做一个 git pull 但是当你还没有准备好推送时会发生什么,一个新的服务器启动并且单独使用新代码?
我可能不费吹灰之力就可以再找到 5 个边缘案例。看看eb deploy
,你会很高兴的。
【讨论】:
嗨,这可以用 AWS php sdk 完成吗?我问是因为这个东西在客户端机器上运行,需要从管理区域的页面执行 这是从命令行运行的,可能有 SDK 工具,但我对此表示怀疑。您可以使用exec()
之类的东西从 php 中触发它。运行它的服务器应该有一个独立的代码库,这样你就可以从 git 中提取然后部署。它看起来像exec("cd /path/to/code && git pull && eb deploy")
。我质疑客户端从基于 Web 的工具部署的用例,并建议工程师处理它,但你可能有你的理由。【参考方案2】:
您需要设置一个 CI(或制作一个简单的 Web 服务)并在您的存储库中创建一个 Webhook。您的 CI 需要获取 Elastic Beanstalk 环境下的所有实例,然后通过 SSH 调用 git pull
。
或者,只需通过 .ebxensions
脚本在所有实例中创建一个 cron 作业。
我认为在 Elastic Beanstalk 中运行 git pull
以将您的应用程序与您的 git 存储库同步并不是一个好的做法。因为,它误用了 Application Version 语义。有时,您无法从 应用程序版本 确定您的实例中的应用程序版本。最好在 Elastic Beanstalk 中创建一个新的 Application Version 来部署新的应用程序版本。
如果你在 Github 中托管你的 repo,你可以查看CodeDeploy。
【讨论】:
嗨,谢谢您的回答.. 我会尝试更多地研究 CI 和 SSH.. 关于 CodeDeploy 我也想到了这一点,但后来我在亚马逊博客上读到“CodeDeploy 是针对直接管理其 EC2 实例的客户,而不是使用 AWS Elastic Beanstalk 等应用程序管理服务的客户”。我实际上正在使用 AWS Elastic Beanstalk,它并没有说明您在使用 beantalk 时应该使用什么(我绝对可以上传新的应用程序版本,但这对于像这里或那里的一行代码这样的小修复来说太麻烦了,简单的错误修复)[1] goo.gl/nEVcwU “我绝对可以上传新的应用程序版本,但是对于小修复来说太麻烦了” - 但那是你的应用程序的一个新版本,所以你应该这样做.如果您不想这样做,那么您可能不应该使用 Beanstalk 或 CodeDeploy。而是手动部署,并使用 Fabric 或类似工具通过 SSH 推送更新。以上是关于如何连接到 Elastic Load Balancer 后面的特定实例的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Load Balancing 非终止 SSL 连接上的代理协议
无法从 Elastic Beanstalk Docker 连接到 RDS
将 ElastiCache 连接到 Elastic Beanstalk 实例