AWS Elastic Beanstalk 中的 mysqlclient 安装错误

Yas*_*sen 9 mysql amazon-ec2 amazon-elastic-beanstalk

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

packages: 
  yum:
    python3-devel: []
    mysql-devel: []
Run Code Online (Sandbox Code Playgroud)

部署失败,日志文件/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!------------------------
Run Code Online (Sandbox Code Playgroud)

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

我的 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
Run Code Online (Sandbox Code Playgroud)

Yas*_*sen 13

解决了!我已经更换mysql-develmariadb-devel它成功地工作,那么我能够安装mysqlcient库。

我的新01_packages.config

packages: 
  yum:
    python3-devel: []
    mariadb-devel: []
Run Code Online (Sandbox Code Playgroud)

我不知道它的根本原因,但是我这样做了,因为我注意到手动安装mysql-develthroughyum 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
Run Code Online (Sandbox Code Playgroud)

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

小智 6

2023 年新 Linux 平台的后续行动:

mariadb-devel 不再是包的名称。相反,使用

packages:  
  yum:  
    python3-devel: []
    mariadb105-devel.x86_64: []
Run Code Online (Sandbox Code Playgroud)

对于未来版本,您可以通过以下方式检查可以安装哪些软件包:

  1. 通过会话管理器连接到具有 EB 的 EC2 实例。
  2. 跑步yum list available
  3. 搜索 mariadb-devel 的变体(甚至 mysql-devel,如果他们带回来的话)。