Amazon web services 为什么每次Elastic Beanstalk向其实例发出命令时总是超时?

Amazon web services 为什么每次Elastic Beanstalk向其实例发出命令时总是超时?,amazon-web-services,amazon-elastic-beanstalk,Amazon Web Services,Amazon Elastic Beanstalk,我在Amazon Elastic Beanstalk上部署了一个PHP应用程序。但我注意到一个问题,每次我通过git aws.push将代码更改推送到Elastic Beanstalk时,部署的应用程序都没有接收到更改。我检查了我的应用程序Beanstalk环境中的事件日志,并注意到每次Beanstalk问题: 将新版本部署到实例 它后面总是跟着: 以下实例未在允许的命令超时时间内响应(它们可能最终自行完成): [i-D5xxx] 当我尝试请求快照日志时,也会发生同样的情况。豆茎问题: requ

我在Amazon Elastic Beanstalk上部署了一个PHP应用程序。但我注意到一个问题,每次我通过git aws.push将代码更改推送到Elastic Beanstalk时,部署的应用程序都没有接收到更改。我检查了我的应用程序Beanstalk环境中的事件日志,并注意到每次Beanstalk问题:

将新版本部署到实例

它后面总是跟着:

以下实例未在允许的命令超时时间内响应(它们可能最终自行完成): [i-D5xxx]

当我尝试请求快照日志时,也会发生同样的情况。豆茎问题:

requestEnvironmentInfo正在启动

几分钟后,它再次出现:

以下实例未在允许的命令超时时间内响应(它们可能最终自行完成):[i-D5xxxx]


默认情况下,如果您的命令没有及时完成,Elastic Beanstalk会在8分钟(设置中定义的480秒)后“抛出超时异常”。 您可以将更高的时间设置为30分钟(1800秒)


阅读这里:

我有过几次这个问题。它似乎只影响特定的实例。因此,可以通过终止EC2实例(通过管理控制台上的EC2页面完成)来解决这个问题。此后,Elastic Beanstalk将检测到有0个健康实例,并自动启动一个新实例

如果这是一个生产环境,而您只有一个实例,并且希望停机时间最短

  • 将最小实例数配置为2,Beanstalk将为您启动另一个实例
  • 通过EC2选项卡终止有问题的实例,Beanstalk将为您启动另一个实例,因为最小实例数为2
  • 将最小实例配置回1,Beanstalk将删除两个实例中的一个

  • 在部署的情况下,除了关闭EC2实例并等待Elastic Beanstalk作出反应,或者处理最小和最大实例之外,另一种方法是在目标环境上执行重建环境

    如果以前的部署由于超时而失败,那么新版本仍将针对环境进行注册,但由于超时,它似乎无法运行(根据我的经验,该实例似乎仍在运行旧版本)

    在使用新版本的情况下,重建环境似乎会重置一些东西

    显然,一段时间的停机会带来负面影响。

    这里也有同样的问题(单个t1.micro实例)

    通过管理控制台上的EC2页面(而不是从EB页面)重新启动EC2实例解决了问题。

    Beanstalk部署(以及其他功能,如获取日志)通过向实例发送SQS命令来工作。SQS客户机部署到实例并大约每20秒检查一次队列(请参阅/var/log/cfn hup.log): 2018-05-30 10:42:38605[调试]正在接收队列的消息

    如果SQS客户端在t1/t2实例上崩溃或出现网络问题,那么它将无法从Beanstalk接收命令,部署将超时。重新启动实例将重新启动SQS客户端,并且它可以再次接收命令

    修复SQS客户端的更简单方法是重新启动cfn hup服务:

    sudo service cfn-hup restart
    

    我认为这是正确的处理方法。 我认为正确的处理方法是通过做什么来找出超时的原因

    如果您需要在调查超时原因之前尽快修复此问题,则需要执行哪些操作

    但是,如果需要增加超时时间,请参见以下内容:

    将配置文件添加到名为.ebextensions的文件夹中的源代码中,并将其部署到应用程序源捆绑包中

    例如:

    option_settings:
      "aws:elasticbeanstalk:command":
        Timeout: 2400
    
    *“值”表示超时前的时间长度(以秒为单位)

    参考:

    从Elastic Beanstalk management dashboard中的“操作”菜单中选择“重启应用程序服务器”,然后选择“eb部署”为我修复它


    在检查了两天的随机问题后,我一个接一个地重新启动了两个EC2实例,以确保没有停机。该网站运行良好,但过了一段时间,该网站开始抛出错误504


    当我检查http服务器时,nginx关闭,并抛出“硬盘空间不足”。“增加了硬盘大小”,elastic beanstalk创建了新实例,问题得到了解决。

    对我来说,问题是我的VPC安全组规则。根据需要,您需要允许端口123上的出站流量,以便NTP正常工作。我关闭了端口,因此时钟在漂移,因此EC2对来自Elastic Beanstalk环境的命令没有响应,部署(只是超时)无法获取日志,等等


    感谢@Logan Pick在您的评论中提供的提示。

    Hi-我今天突然遇到了同样的问题,我的一个应用程序有一个小的增量更新。我想这一定是亚马逊终端的一个(希望是暂时的)问题。我在环境更新和日志方面也经历了同样的事情(4月24日)。我有一个负载平衡的环境,但我认为只有一个实例在运行。由于更新和日志都发生了这种情况,我不认为这是网络问题(即作曲家在获取回购时超时。)ardford和@Simon Robb-这个问题解决了吗?@Chris Carson不幸的是,没有-我必须重建我的环境,从那以后一切都很顺利。@SimonRobb是的,我也必须这样做。我不认为这是一个暂时的问题——似乎发生在很多人身上。感谢您的回复。我通过来之不易的经验以及与Amazon支持人员的对话发现,这与您正在使用的实例的大小有关。t1.micro实例通常无法响应option_settings: "aws:elasticbeanstalk:command": Timeout: 2400