AWS Beanstalk 应用程序无法部署,因为 awscli-bundle 部署程序中的 Python 版本太旧

Posted

技术标签:

【中文标题】AWS Beanstalk 应用程序无法部署,因为 awscli-bundle 部署程序中的 Python 版本太旧【英文标题】:AWS Beanstalk application cant deploy because Python version within awscli-bundle deployer too old 【发布时间】:2021-09-25 18:59:46 【问题描述】:

我的 AWS Elastic Beanstalk tomcat Java 应用程序在过去六个月一直运行得非常愉快,昨天崩溃了,当我尝试使用克隆重新部署时它失败了

实例:i-0872ed7568a9820f5] 实例上的命令失败。返回 代码:1 输出:(截断)...检测到:Python 2.7 继续使用 此安装程序必须使用 Python 3.6 或更高版本。了解更多信息 请参阅以下博客文章: https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-python-2-7-in-aws-sdk-for-python-and-aws-cli-v1/。 .ebextensions/copyindexes.config 中的命令 01_install_cli 失败。为了 更多详细信息,请使用控制台或 EB CLI 检查 /var/log/eb-activity.log。

我检查了 eb_activity.log,似乎问题出在使用的 awscli-bundle 版本上,但我不明白我在哪里定义它。

Archive:  awscli-bundle.zip
  inflating: awscli-bundle/install
  inflating: awscli-bundle/packages/jmespath-0.10.0.tar.gz
  inflating: awscli-bundle/packages/pyasn1-0.4.8.tar.gz
  inflating: awscli-bundle/packages/docutils-0.15.2.tar.gz
  inflating: awscli-bundle/packages/s3transfer-0.5.0.tar.gz
  inflating: awscli-bundle/packages/virtualenv-16.7.8.tar.gz
  inflating: awscli-bundle/packages/awscli-1.20.1.tar.gz
  inflating: awscli-bundle/packages/six-1.16.0.tar.gz
  inflating: awscli-bundle/packages/rsa-4.7.2.tar.gz
  inflating: awscli-bundle/packages/colorama-0.4.3.tar.gz
  inflating: awscli-bundle/packages/PyYAML-5.4.1.tar.gz
  inflating: awscli-bundle/packages/urllib3-1.26.6.tar.gz
  inflating: awscli-bundle/packages/botocore-1.21.1.tar.gz
  inflating: awscli-bundle/packages/python-dateutil-2.8.2.tar.gz
  inflating: awscli-bundle/packages/setup/setuptools_scm-3.3.3.tar.gz
  inflating: awscli-bundle/packages/setup/wheel-0.33.6.tar.gz
  Unsupported Python version detected: Python 2.7
  To continue using this installer you must use Python 3.6 or later.
  For more information see the following blog post: https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-python-2-7-in-aws-sdk-for-python-and-aws-cli-v1/
  
   (ElasticBeanstalk::ExternalInvocationError)

我查看了 .war 文件的 .ebextensions 文件夹,但看不到定义的版本号

所以我尝试使用较新的平台创建一个新环境,因此认为亚马逊 cli 工具是作为平台的一部分安装的,而不是使用 Tomcat 7 和 Java 7 我尝试了 Tomcat 8.5 Corretto 8 在 64 位 Amazon Linux 2/4.2.2 上运行

现在我在 cfn-init.log 中得到一个不同的错误

2021-07-17 07:26:02,021 [INFO] -----------------------Starting build-----------------------
2021-07-17 07:26:02,028 [INFO] Running configSets: _OnInstanceBoot
2021-07-17 07:26:02,031 [INFO] Running configSet _OnInstanceBoot
2021-07-17 07:26:02,033 [INFO] Running config AWSEBBaseConfig
2021-07-17 07:26:02,228 [INFO] Command clearbackupfiles succeeded
2021-07-17 07:26:02,234 [INFO] Running config AWSEBCfnHupEndpointOverride
2021-07-17 07:26:02,237 [INFO] Command clearbackupfiles succeeded
2021-07-17 07:26:02,238 [INFO] ConfigSets completed
2021-07-17 07:26:02,238 [INFO] -----------------------Build complete-----------------------
2021-07-17 07:26:37,586 [INFO] -----------------------Starting build-----------------------
2021-07-17 07:26:37,592 [INFO] Running configSets: Infra-EmbeddedPreBuild
2021-07-17 07:26:37,596 [INFO] Running configSet Infra-EmbeddedPreBuild
2021-07-17 07:26:37,599 [INFO] Running config prebuild_0_jthinkws
2021-07-17 07:26:39,257 [ERROR] Command 01_install_cli (wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip; unzip awscli-bundle.zip;  ./awscli-bundle/install -b ~/bin/aws) failed
2021-07-17 07:26:39,257 [ERROR] Error encountered during build of prebuild_0_jthinkws: Command 01_install_cli failed
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
    self._config.commands)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
    raise ToolError(u"Command %s failed" % name)
cfnbootstrap.construction_errors.ToolError: Command 01_install_cli failed
2021-07-17 07:26:39,260 [ERROR] -----------------------BUILD FAILED!------------------------
2021-07-17 07:26:39,260 [ERROR] Unhandled exception during build: Command 01_install_cli failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 176, in <module>
    worklog.build(metadata, configSets)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 135, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 561, in build
    self.run_config(config, worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
    self._config.commands)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
    raise ToolError(u"Command %s failed" % name)
cfnbootstrap.construction_errors.ToolError: Command 01_install_cli failed

我不明白我要如何解决这个问题,因为 01_install_cli 不是我编写的脚本,它不是战争文件的一部分,它是亚马逊使用的内部脚本! p>

【问题讨论】:

【参考方案1】:

没有从基于Amazon Linux 1 的EB 平台到Amazon Linux 2 的自动迁移。您必须在新的 EB 平台中手动执行此操作,如 AWS 文档中所述:

Migrating your Elastic Beanstalk Linux application to Amazon Linux 2

【讨论】:

谢谢,好的,但我没有尝试从 Linux 1 迁移到 Linux 2 我是否必须这样做,即我现有的版本无法像以前那样重新部署。其次,您在哪里将 Amazon Linux 1 配置为 Amazon Linux 2,或者您是说所有 Amazon pklatform 实例现在都是 Linux 2 @PaulTaylor 你没有尝试是什么意思。你写道你做到了:“所以我尝试使用更新的平台创建一个新环境,因此认为亚马逊 cli 工具是作为平台的一部分安装的,而不是使用带有 Java 7 的 Tomcat 7 我尝试了在 64 位亚马逊上运行的带有 Corretto 8 的 Tomcat 8.5 Linux 2/4.2.2"。 only supported version 基于 Amazon Linux 2。 好吧,我发现这有点令人困惑,但我的意思是两件事。首先,为什么不能只克隆我现有的直到昨天才起作用的环境,或者克隆并将平台版本从 2.7.6 更新到 3.4.8。由于这些选项都没有工作,我尝试使用不同的平台分支(Tomcat 8.5 Coretto),但由于上述错误而失败,而且失败似乎发生在甚至部署我的代码之前,所以我不明白我是如何可以解决吗? 嗨 @Marcin 我找到了问题的根源,但不知道如何解决 ***.com/questions/68418789/… 任何帮助表示赞赏,因为这是我的生产应用程序。

以上是关于AWS Beanstalk 应用程序无法部署,因为 awscli-bundle 部署程序中的 Python 版本太旧的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Rails API 应用程序部署到 AWS Elastic Beanstalk

为啥我的 Rails 应用程序无法部署到 AWS Elastic Beanstalk?

超时后无法部署到 AWS Elastic Beanstalk

无法将 Spring Boot v2 Gradle 应用程序部署到 AWS Beanstalk

JPA 无法从 Beanstalk 连接到 AWS RDS,但它可以在本地工作

在 AWS Beanstalk 上部署 SpringBoot - 应用程序启动,连接到 RDS-DB,但浏览器无法连接