首页 文章

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

提问于
浏览
36

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

将新版本部署到实例

它总是紧随其后:

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

当我尝试请求快照日志时,会发生同样的事情 . Beanstalk问题:

requestEnvironmentInfo正在启动

然后几分钟之后再次出现:

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

7 回答

  • 0

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

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

  • 5

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

    {
        "Namespace": "aws:elasticbeanstalk:command",
        "OptionName": "Timeout",
        "Value": "1800"
    }
    

    在这里阅读:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html

  • 40

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

    If this is a production environment and you have only 1 instance and you want minimal down time

    • 将最小实例配置为2,并且Beanstalk将为您启动另一个实例 .

    • 通过EC2选项卡终止有问题的实例,Beanstalk将为您启动另一个实例,因为最小实例为2

    • 将最小实例配置为1,Beanstalk将删除您的两个实例中的一个 .

  • 0

    Beanstalk部署(以及Get Logs等其他功能)通过向实例发送SQS命令来工作 . SQS客户端大约每20秒部署到实例并检查队列(请参阅/var/log/cfn-hup.log):2018-05-30 10:42:38,605 [DEBUG]接收队列消息https://sqs.us-east-2.amazonaws.com/124386531466/93b60687a33e19 ...

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

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

    sudo service cfn-hup restart
    
  • 1

    在部署的情况下,关闭EC2实例并等待Elastic Beanstalk做出反应或使用最小和最大实例进行操作的替代方法是在目标环境中执行Rebuild环境 .

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

    重建环境似乎会重置使用新版本的东西 .

    显然,在一段时间的停机时间方面存在缺点 .

  • 0

    我认为这是解决这个问题的正确方法 . 我认为处理这个问题的正确方法是通过做this answer suggests找出超时的原因 .

    chongzixin's answer是在调查超时原因之前需要这个固定的ASAP需要做的事情 .

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

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

    例:

    option_settings:
      "aws:elasticbeanstalk:command":
        Timeout: 2400
    

    *“value”表示超时前的时间长度(以秒为单位) .

    参考:https://serverfault.com/a/747800/496353

  • 1

    "Restart App Server(s)"来自Elastic Beanstalk管理仪表板中的"Actions"菜单,后跟 eb deploy 为我修复了它 .

    Visual cue for the first instruction

相关问题