排查无法成功启动的 Elastic Beanstalk 实例问题

排查无法成功启动的 Elastic Beanstalk 实例问题

我有一个小型的 Elastic Beanstalk 环境,很少用于演示,但已经运行多年了。

截至 12 月 7 日(正如我所说,它很少使用),出现了一个问题:一个实例将启动,几分钟后将终止。由于它现在低于自动缩放属性,它将启动另一个实例……几分钟后将终止。这种情况显然在过去 6 周内一直在重复。

据我所知,自去年九月以来环境没有任何变化。

通过 Elastic Beanstalk 仪表板检索日志将返回包含以下内容的 cfn-init.log:

2018-01-19 21:58:42,290 [DEBUG] Writing content to /opt/elasticbeanstalk/bin/download_source_bundle
2018-01-19 21:58:42,290 [DEBUG] Retrieving contents from https://s3.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/eb_patching_resources/download_source_bundle.py
2018-01-19 21:58:42,342 [DEBUG] Setting mode for /opt/elasticbeanstalk/bin/download_source_bundle to 000750
2018-01-19 21:58:42,343 [DEBUG] Setting owner 0 and group 0 for /opt/elasticbeanstalk/bin/download_source_bundle
2018-01-19 21:58:42,343 [DEBUG] Running command 01downloadVersion
2018-01-19 21:58:42,343 [DEBUG] No test for command 01downloadVersion
2018-01-19 22:00:26,265 [ERROR] Command 01downloadVersion (/opt/elasticbeanstalk/bin/download_source_bundle) failed
2018-01-19 22:00:26,268 [DEBUG] Command 01downloadVersion output: 
2018-01-19 22:00:26,269 [ERROR] Error encountered during build of Infra-WriteApplication2: Command 01downloadVersion failed
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 505, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 241, in build
    changes['commands'] = CommandTool().apply(self._config.commands)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/command_tool.py", line 103, in apply
    raise ToolError("Command %s failed" % name)
ToolError: Command 01downloadVersion failed
2018-01-19 22:00:26,273 [ERROR] Unhandled exception during build: Command 01downloadVersion failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 135, in <module>
    worklog.build(detail.metadata, configSets)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 117, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 496, in build
    self.run_config(config, worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 505, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/construction.py", line 241, in build
    changes['commands'] = CommandTool().apply(self._config.commands)
  File "/usr/lib/python2.6/site-packages/cfnbootstrap/command_tool.py", line 103, in apply
    raise ToolError("Command %s failed" % name)
ToolError: Command 01downloadVersion failed

不幸的是,我在任何日志中都看不到有关此命令失败原因的更多详细信息。我已验证它尝试下载的 download_source_bundle.py 文件是有效的。

我不能 100% 确定上述命令是导致终止的原因,但我在日志中没有看到其他错误。在 Google 上搜索字符串“在构建 Infra-WriteApplication2 时遇到错误:命令 01downloadVersion 失败”,会返回询问类似问题的人,然后说这是由于 IAM 权限造成的……但是,IAM 权限至少自 9 月以来就没有改变过。日志中的其他行是指从https://s3.amazonaws.com,所以我不认为这是一个出站网络问题。

因此,问题是:

  1. 有什么可以解释为什么在没有环境变化的情况下这种情况会突然发生?

  2. 有什么方法可以让我获取有关命令失败原因的更多信息吗?

  3. 如果命令可能不是导致实例终止的原因,我还能在哪里查找?

答案1

首先,不要想着“什么都没变”。显然,有些事情已经发生了变化,否则它就会起作用。变化可能是你的,也可能是 AWS 的,但有些事情确实发生了变化。

根据错误Command 01downloadVersion failed,从存储版本到 EC2 实例的 S3 存储桶下载版本似乎存在问题。

该问题可能是以下任一问题:

  • 权限不足,无法下载版本,或
  • 该版本已从 S3 存储桶中删除。

Elastic Beanstalk 将应用程序版本存储在 S3 中。

您可以使用以下命令查看应用程序在 S3 中的存储位置:

aws elasticbeanstalk describe-application-versions

在响应中,找到与您的应用程序当前使用的版本相对应的版本。在那里,您将看到类似以下内容:

"SourceBundle": {
    "S3Bucket": "my-bucket",
    "S3Key": "path/to/my/version.zip"
}

查看那里以确保数据没有被删除。

除此之外,请仔细检查 EC2 实例从 S3 存储桶下载版本的 IAM 权限是否正确,以及 S3 存储桶没有阻止下载文件的存储桶策略。

相关内容