I have deployed a Django project (MyProj
) to Amazon beanstalk using the eb CLI. This project is physically located at ~/MyProj
. It has an app, named myapp
, which needs to execute external python scripts. For this purpose, I have my_launcher.py
in ~/MyProj/myapp
directory. A code snippet in my_launcher.py is
:
import os
import importlib
PROJECTS_DIR = os.path.join(os.path.expanduser(os.environ.get('LOCATION')), 'app/python/')
MY_MODULE = os.path.join(PROJECTS_DIR, 'MyModule/my_script.py')
spec = importlib.util.spec_from_file_location('my_script', My_MODULE)
MyModule = importlib.util.module_from_spec(spec)
spec.loader.exec_module(MyModule)
The reason for using the environment variable LOCATION
is to dynamically set the location of external python scripts. I have defined this environment variable and some others through the AWS admin console under the Elastic Beanstalk section. In my example, I have:
LOCATION = '/home/ec2-user/company/'
This script fails at the last line with the error:
PermissionError at /myapp
[Errno 13] Permission denied: '/home/ec2-user/company/app/python/MyModule/my_script.py'
The things I have done so far to no avail:
After reading many online pages (e.g., Django [Errno 13] Permission denied: '/var/www/media/animals/user_uploads'), I thought the issue is Linux permissions on the location where the executable python scripts are (i.e.,
/home/ec2-user/company/app/python/
). For the sake of testing this hypothesis (even though I know it is a bad approach for production), I ran the commandsudo chmod -R 777 company
while being in/home/ec2-user
directory. I redeployed the project and even rebooted the EC2 instance all together. This didn't help.I moved the
company
directory inside~/MyProj/myapp
(and updated the environment variableLOCATION
on the server) thinking that thewsgi
user does not have execution permission on any directory outside~/MyProj/myapp
. This didn't help.
I highly appreciate any help.
By the way, I am using python 3.6 and Django 2.1.7.