How do I address "OSError: mysql_config not found" error during Elastic Beanstalk deployment?
Question:
Problem
I am trying to deploy a very simple app on Elastic Beanstalk with a small database backend. I try to install mysqlclient
as part of the process outlined by AWS here. However, when I deploy my app, I get the following error from my Elastic Beanstalk logs as it tries to download the package:
Collecting mysqlclient
Using cached mysqlclient-2.0.1.tar.gz (87 kB)
2020/08/21 20:30:16.419082 [ERROR] An error occurred during execution of command [app-deploy] - [InstallDependency]. Stop running the command. Error: fail to install dependencies with requirements.txt file with error Command /bin/sh -c /var/app/venv/staging-LQM1lest/bin/pip install -r requirements.txt failed with error exit status 1. Stderr: ERROR: Command errored out with exit status 1:
command: /var/app/venv/staging-LQM1lest/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-bz45889a/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pip-install-bz45889a/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-1tyle8mv
cwd: /tmp/pip-install-bz45889a/mysqlclient/
Complete output (12 lines):
/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-bz45889a/mysqlclient/setup.py", line 15, in <module>
metadata, options = get_config()
File "/tmp/pip-install-bz45889a/mysqlclient/setup_posix.py", line 65, in get_config
libs = mysql_config("libs")
File "/tmp/pip-install-bz45889a/mysqlclient/setup_posix.py", line 31, in mysql_config
raise OSError("{} not found".format(_mysql_config_path))
OSError: mysql_config not found
Question
The mysqlclient
is the AWS recommended driver to connect to a MySQL database in RDS using Flask or Django. How do I get it installed with Elastic Beanstalk?
Context
I’ve tried to implement my architecture with either (1) a database within the Elastic Beanstalk environment or (2) a regularly deployed RDS instance outside the Elastic Beanstalk environment. In this case, we’re going with option (1).
I can’t install mysql-server or other packages using apt-get
as suggested here very easily, which is why I hope this isn’t labeled as a duplicate. I don’t have access to the underlying servers. I attempted to using platform hooks and .ebextensions, but I wasn’t able to get that to work. In this post, I’m trying to step back and see if there is another avenue.
Answers:
For Amazon linux 2 you should be able to install it with yum
. Thus, you can have in your .ebextensions
a file called, e.g. 01_packages.config
with the content:
packages:
yum:
MySQL-python: []
You can add further yum dependencies if you require more.
Just wanted to add what worked for me, which was slightly different from the rest.
Go to this link to see how to set up the folder for your yum packages -> https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html
(basically make a .ebextensions folder in your projects root)
Then inside that make a 01_packages.config file as suggested by Marcin, and add in this code:
packages:
yum:
python3-devel: []
mariadb-devel: []
Worked for me uploading to AWS beanstalk and code pipeline via GitHub. Python 3.6 and using flask-mysqldb
Problem
I am trying to deploy a very simple app on Elastic Beanstalk with a small database backend. I try to install mysqlclient
as part of the process outlined by AWS here. However, when I deploy my app, I get the following error from my Elastic Beanstalk logs as it tries to download the package:
Collecting mysqlclient
Using cached mysqlclient-2.0.1.tar.gz (87 kB)
2020/08/21 20:30:16.419082 [ERROR] An error occurred during execution of command [app-deploy] - [InstallDependency]. Stop running the command. Error: fail to install dependencies with requirements.txt file with error Command /bin/sh -c /var/app/venv/staging-LQM1lest/bin/pip install -r requirements.txt failed with error exit status 1. Stderr: ERROR: Command errored out with exit status 1:
command: /var/app/venv/staging-LQM1lest/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-bz45889a/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pip-install-bz45889a/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-1tyle8mv
cwd: /tmp/pip-install-bz45889a/mysqlclient/
Complete output (12 lines):
/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-bz45889a/mysqlclient/setup.py", line 15, in <module>
metadata, options = get_config()
File "/tmp/pip-install-bz45889a/mysqlclient/setup_posix.py", line 65, in get_config
libs = mysql_config("libs")
File "/tmp/pip-install-bz45889a/mysqlclient/setup_posix.py", line 31, in mysql_config
raise OSError("{} not found".format(_mysql_config_path))
OSError: mysql_config not found
Question
The mysqlclient
is the AWS recommended driver to connect to a MySQL database in RDS using Flask or Django. How do I get it installed with Elastic Beanstalk?
Context
I’ve tried to implement my architecture with either (1) a database within the Elastic Beanstalk environment or (2) a regularly deployed RDS instance outside the Elastic Beanstalk environment. In this case, we’re going with option (1).
I can’t install mysql-server or other packages using apt-get
as suggested here very easily, which is why I hope this isn’t labeled as a duplicate. I don’t have access to the underlying servers. I attempted to using platform hooks and .ebextensions, but I wasn’t able to get that to work. In this post, I’m trying to step back and see if there is another avenue.
For Amazon linux 2 you should be able to install it with yum
. Thus, you can have in your .ebextensions
a file called, e.g. 01_packages.config
with the content:
packages:
yum:
MySQL-python: []
You can add further yum dependencies if you require more.
Just wanted to add what worked for me, which was slightly different from the rest.
Go to this link to see how to set up the folder for your yum packages -> https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html
(basically make a .ebextensions folder in your projects root)
Then inside that make a 01_packages.config file as suggested by Marcin, and add in this code:
packages:
yum:
python3-devel: []
mariadb-devel: []
Worked for me uploading to AWS beanstalk and code pipeline via GitHub. Python 3.6 and using flask-mysqldb