AWS Elastic Beanstalk 中的 mysqlclient 安装错误

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 中的 mysqlclient 安装错误【英文标题】:mysqlclient installation error in AWS Elastic Beanstalk 【发布时间】:2020-09-18 12:07:24 【问题描述】:

我正在 AWS Elastic Beanstalk 上部署一个带有 mysql 应用程序的 django,因此需要 mysqlclient 库。 mysqlclient 需要安装 python3-develmysql-devel 包,所以我有它的自定义配置文件 01_packages.config:

packages: 
  yum:
    python3-devel: []
    mysql-devel: []

部署失败,日志文件/var/log/cfn-init.log(在 Beanstalk 日志中提到)显示错误:

2020-05-31 02:17:37,565 [INFO] -----------------------Starting build-----------------------
2020-05-31 02:17:37,572 [INFO] Running configSets: Infra-EmbeddedPreBuild
2020-05-31 02:17:37,575 [INFO] Running configSet Infra-EmbeddedPreBuild
2020-05-31 02:17:37,579 [INFO] Running config prebuild_0_doyouknow
2020-05-31 02:17:41,831 [ERROR] mysql-devel is not available to be installed
2020-05-31 02:17:41,831 [ERROR] Error encountered during build of prebuild_0_doyouknow: Yum does no
t have mysql-devel available for installation
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 229, in build
    changes['packages'][manager] = CloudFormationCarpenter._packageTools[manager]().apply(packages,
 self._auth_config)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/rpm_tools.py", line 74, in apply
    raise ToolError("Yum does not have %s available for installation" % pkg_spec)
ToolError: Yum does not have mysql-devel available for installation
2020-05-31 02:17:41,834 [ERROR] -----------------------BUILD FAILED!------------------------

但是,我尝试通过yum install mysql-devel在我的Ec2实例上手动安装它并且安装成功。

我的python版本是3.7,我的requirements.txt文件内容是:

asgiref==3.2.7
Django==3.0.5
django-cors-headers==3.2.1
django-dotenv==1.4.2
django-social-share==1.4.0
mysqlclient==1.4.6
numpy==1.18.4
pandas==1.0.3
Pillow==7.1.1
python-dateutil==2.8.1
pytz==2019.3
six==1.14.0
sqlparse==0.3.1
xlrd==1.2.0

【问题讨论】:

您的 cfn-init.log 日志中是否还有更多内容可以显示 yum 是如何被调用的? @danblack 不幸的是,不,它只是重复相同的部分。 【参考方案1】:

已解决!我已将 mysql-devel 替换为 mariadb-devel 并且它成功运行,然后我能够安装 mysqlcient 库。

我的新01_packages.config

packages: 
  yum:
    python3-devel: []
    mariadb-devel: []

我不知道它的根本原因,但我这样做是因为我注意到手动安装 mysql-develyum install mysql-devel 实际上是安装 mariadb-devel

这是我的 ec2 实例发布详情。也许是因为新的 Amazon Linux Release 2。

$ cat /etc/*-release*
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Amazon Linux release 2 (Karoo)
cpe:2.3:o:amazon:amazon_linux:2

【讨论】:

我做了一些调查,确实似乎用于 Elastic Beanstalk 的旧 Amazon Linux AMI 包含 mysql,但用于 Elastic Beanstalk 的 Amazon Linux 2 AMI 没有。因此,正如 Yasser 所说,当从旧平台升级到新平台时,似乎必须将正确的包添加到配置文件中。我只需要 mariadb-devel。

以上是关于AWS Elastic Beanstalk 中的 mysqlclient 安装错误的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 中的 Python:私有包依赖项

AWS Elastic Beanstalk 中的 mysqlclient 安装错误

一个 AWS 账户中的 Elastic Beanstalk 能否与另一个 AWS 账户中的 RDS 通信?

如何解决 AWS Elastic Beanstalk 中的“容器命令构建失败”一般错误?

AWS Elastic Beanstalk 中的 JDBC 连接字符串

AWS Elastic Beanstalk 中的工作人员“dyno”