Professional Documents
Culture Documents
Deploying A Django Application To Elastic Beanstalk - AWS Elastic Beanstalk
Deploying A Django Application To Elastic Beanstalk - AWS Elastic Beanstalk
Deploying A Django Application To Elastic Beanstalk - AWS Elastic Beanstalk
Clean up (#python-django-stopping)
Prerequisites
To use any AWS service, including Elastic Beanstalk, you need to have an AWS account and credentials. To learn more
and to sign up, visit https://aws.amazon.com/ (https://aws.amazon.com/) .
To follow this tutorial, you should have all of the Common Prerequisites (./python-development-environment.html) for
Python installed, including the following packages:
Python 3.6
pip
virtualenv
awsebcli
Note
Creating environments with the EB CLI requires a service role (./concepts-roles-service.html) . You can create a service
role by creating an environment in the Elastic Beanstalk console. If you don't have a service role, the EB CLI attempts
to create one when you run eb create.
The following steps demonstrate the commands you must enter for Unix-based systems and Windows, shown on
separate tabs.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 1/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
C:\>%HOMEPATH%\eb-virt\Scripts\activate
(eb-virt) C:\>
You'll see (eb-virt) prepended to your command prompt, indicating that you're in a virtual environment.
Note
The rest of these instructions show the Linux command prompt in your home directory ~$. On Windows this is
C:\Users\USERNAME>, where USERNAME is your Windows login name.
Note
The Django version you install must be compatible with the Python version on the Elastic Beanstalk Python
configuration that you choose for deploying your application. For information about deployment, see Deploy
your site with the EB CLI (#python-django-deploy) in this topic.
For more information about current Python platform versions, see Python
(https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python) in
the AWS Elastic Beanstalk Platforms document.
For Django version compatibility with Python, see What Python version can I use with Django?
(https://docs.djangoproject.com/en/2.1/faq/install/#what-python-version-can-i-use-with-django) Django 2.2 is
incompatible with the Elastic Beanstalk Python 3.6 platform. The latest compatible version is Django 2.1.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 2/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
This command lists all of the packages installed in your virtual environment. Later, you use the output of this
command to configure your project for use with Elastic Beanstalk.
C:\>%HOMEPATH%\eb-virt\Scripts\activate
(eb-virt) C:\>
You'll see the (eb-virt) prefix prepended to your command prompt, indicating that you're in a virtual
environment.
Note
The rest of these instructions show the Linux command prompt ~$ in your home directory and the Linux home
directory ~/. On Windows these are C:\Users\USERNAME>, where USERNAME is your Windows login name.
2. Use the django-admin startproject command to create a Django project named ebdjango.
This command creates a standard Django site named ebdjango with the following directory structure.
~/ebdjango
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py
(eb-virt) ~$ cd ebdjango
5. Check the server log to see the output from your request. To stop the web server and return to your virtual
environment, press Ctrl+C.
By default, Elastic Beanstalk looks for a file named application.py to start your application. Because this doesn't
exist in the Django project that you've created, you need to make some adjustments to your application's
environment. You also must set environment variables so that your application's modules can be loaded.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 4/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
C:\Users\USERNAME\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate
2. Run pip freeze, and then save the output to a file named requirements.txt.
Elastic Beanstalk uses requirements.txt to determine which package to install on the EC2 instances that run
your application.
4. In the .ebextensions directory, add a configuration file (./ebextensions.html) named django.config with the
following text.
Example ~/ebdjango/.ebextensions/django.config
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: ebdjango/wsgi.py
This setting, WSGIPath, specifies the location of the WSGI script that Elastic Beanstalk uses to start your
application.
Reactivate your virtual environment whenever you need to add packages to your application or run your
application locally.
~/ebdjango/
|-- .ebextensions
| `-- django.config
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 5/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
Next, you'll create your application environment and deploy your configured application with Elastic Beanstalk.
Immediately after deployment, you'll edit Django's configuration to add the domain name that Elastic Beanstalk
assigned to your application to Django's ALLOWED_HOSTS. Then you'll redeploy your application. This is a Django
security requirement, designed to prevent HTTP Host header attacks. For more information, see Host header
validation (https://docs.djangoproject.com/en/2.1/topics/security/#host-headers-virtual-hosting) .
This command creates an application named django-tutorial. It also configures your local repository to create
environments with the latest Python 3.6 platform version.
2. (Optional) Run eb init again to configure a default key pair so that you can use SSH to connect to the EC2
instance running your application.
~/ebdjango$ eb init
Do you want to set up SSH for your instances?
(y/n): y
Select a keypair.
1) my-keypair
2) [ Create new KeyPair ]
Select a key pair if you have one already, or follow the prompts to create one. If you don't see the prompt or need
to change your settings later, run eb init -i.
Note
If you see a "service role required" error message, run eb create interactively (without specifying an
environment name) and the EB CLI creates the role for you.
This command creates a load balanced Elastic Beanstalk environment named django-env. Creating an
environment takes about 5 minutes. As Elastic Beanstalk creates the resources needed to run your application, it
outputs informational messages that the EB CLI relays to your terminal.
4. When the environment creation process completes, find the domain name of your new environment by running
eb status.
~/ebdjango$ eb status
Environment details for: django-env
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 6/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
5. Open the settings.py file in the ebdjango directory. Locate the ALLOWED_HOSTS setting, and then add your
application's domain name that you found in the previous step to the setting's value. If you can't find this setting
in the file, add it to a new line.
...
ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']
6. Save the file, and then deploy your application by running eb deploy. When you run eb deploy, the EB CLI
bundles up the contents of your project directory and deploys it to your environment.
~/ebdjango$ eb deploy
Note
If you are using Git with your project, see Using the EB CLI with Git (./eb3-cli-git.html) .
7. When the environment update process completes, open your website with eb open.
~/ebdjango$ eb open
This opens a browser window using the domain name created for your application. You should see the same
Django website that you created and tested locally.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 7/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
If you don't see your application running, or get an error message, see Troubleshooting deployments
(./troubleshooting-deployments.html) for help with how to determine the cause of the error.
If you do see your application running, then congratulations, you've deployed your first Django application with
Elastic Beanstalk!
For this example, we'll enable Django's admin console and configure a few other settings.
Example ~/ebdjango/ebdjango/settings.py
...
# Internationalization
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'US/Pacific'
USE_I18N = True
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 8/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
USE_L10N = True
USE_TZ = True
~/ebdjango/$ eb deploy
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 9/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
Example ~/ebdjango/ebdjango/settings.py
4. Run manage.py collectstatic to populate the static directory with static assets (JavaScript, CSS, and images)
for the admin site.
~/ebdjango$ eb deploy
6. View the admin console by opening the site in your browser, appending /admin/ to the site URL, such as the
following.
http://djang-env.p33kq46sfh.us-west-2.elasticbeanstalk.com/admin/
7. Log in with the username and password that you configured in step 2.
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 10/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
You can use a similar procedure of local updating/testing followed by eb deploy. Elastic Beanstalk does the work of
updating your live servers, so you can focus on application development instead of server administration!
1. Create a configuration file (./ebextensions.html) named db-migrate.config with the following content.
Example ~/ebdjango/.ebextensions/db-migrate.config
container_commands:
01_migrate:
command: "django-admin.py migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: ebdjango.settings
This configuration file runs the django-admin.py migrate command during the deployment process, before
starting your application. Because it runs before the application starts, you must also configure the
DJANGO_SETTINGS_MODULE environment variable explicitly (usually wsgi.py takes care of this for you during
startup). Specifying leader_only: true in the command ensures that it is run only once when you're deploying
to multiple instances.
~/ebdjango$ eb deploy
Clean up
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 11/12
3/15/2020 Deploying a Django application to Elastic Beanstalk - AWS Elastic Beanstalk
To save instance hours and other AWS resources between development sessions, terminate your Elastic Beanstalk
environment with eb terminate.
This command terminates the environment and all of the AWS resources that run within it. It doesn't delete the
application, however, so you can always create more environments with the same configuration by running eb create
again. For more information on EB CLI commands, see Managing Elastic Beanstalk environments with the EB CLI
(./eb-cli3-getting-started.html) .
If you're done with the sample application, you can also remove the project folder and virtual environment.
~$ rm -rf ~/eb-virt
~$ rm -rf ~/ebdjango
Next steps
For more information about Django, including an in-depth tutorial, see the official documentation
(https://docs.djangoproject.com/en/2.1/) .
If you want to try out another Python web framework, check out Deploying a flask application to Elastic Beanstalk
(./create-deploy-python-flask.html) .
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html 12/12