我通过Elastic Beanstalk部署我的应用程序,它创建了Elastic load balancer并将我的所有实例放在它后面(3个或更多)。
有没有办法直接联系其中的每个实例?我想在每个实例上触发一个特定的命令(git pull
命令,以便与我的远程仓库中的最新代码同步)。
我有来自PHP SDK
的实例的IP地址和公共DNS列表,但由于防火墙规则将IP地址源限制为端口80上的弹性负载均衡器IP,我似乎无法理解直接访问它们。
有办法吗?
P.S。 SSH端口似乎对所有流量开放,但是如何创建触发器呢?我希望创建一个PHP脚本,通过远程仓库上的webhook自动执行此操作。
答案 0 :(得分:3)
我强烈建议您将EB CLI与git集成用于所有部署,无论多小。这很棒,因为您可以将git分支映射到eb use YOUR_ENV
的环境,然后当您运行eb deploy
并检出该分支时,它将部署到该环境。
确保多台服务器提取正确的代码并且一切都按预期工作有很多工作要做。如果服务器处于启动但尚未准备好进入SSH的情况下,如果您的脚本跳过它并且没有获得新代码,该怎么办?
此外,当新服务器旋转但它正在使用旧应用程序时会发生什么,因为这是EB中的内容?你可以让你的kickstart做一个git pull但是当你还没有准备好推动时会发生什么,新的服务器启动并且单独使用新代码?
我可能会发现另外5个边缘情况而不会出汗。看看eb deploy
,你会很高兴。
答案 1 :(得分:2)
您需要设置CI(或制作简单的Web服务)并在存储库中创建webhook。您的CI需要在Elastic Beanstalk环境下获取所有实例,然后通过SSH调用git pull
。
或者,只需通过.ebxensions
脚本在所有实例中创建一个cron作业。
我认为在Elastic Beanstalk中运行git pull
以便将您的应用与您的git repo同步不是一个好习惯。因为,它滥用了 Application Version 的语义。有时,您无法从应用程序版本确定实例中的应用程序版本。最好在Elastic Beanstalk中创建新的应用程序版本以部署新的应用程序版本。
如果您在Github托管您的仓库,可以查看CodeDeploy。