Deploying from AWS Elastic Beanstalk Console

May 8, 2020, 2:29 p.m.

Django AWS Production · 5 min read

Deploying from AWS Elastic Beanstalk Console

Last Modified: Sept. 15, 2020, 10:57 a.m.

Amazon Web Services provides users two options for Elastic Beanstalk (EB) deployment:

(1) the AWS Elastic Beanstalk Command Line Interface (EB CLI)

(2) the AWS Elastic Beanstalk console

This Django + AWS Elastic Beanstalk tutorial will demonstrate how to deploy a Django web app within the AWS EB console provided on the AWS site. Create a free tier AWS account before following the instructions listed below. 

 

NOTE: AWS EB is currently only compatible with the Django version 2.1.15 or below. Using a newer version of the web framework will cause compatibility issues upon deployment. 

 

Django AWS Elastic Beanstalk

Deploying your Django project using the AWS Elastic Beanstalk console requires certain configuration settings and files to be added to your project before upload. This includes a requirements.txt file, an .ebextensions file, and a django.config file. 

 

Elastic Beanstalk requirements.txt

macOS Terminal

(env)User-Macbook:mysite user$
(env)User-Macbook:mysite user$ pip freeze > requirements.txt

Windows Command Prompt

(env) C:\Users\Owner\desktop\code\env\mysite>
(env) C:\Users\Owner\desktop\code\env\mysite> pip freeze > requirements.txt

Start with your local server running your completed app. Ctrl + C and stop running the server. You should still be in the mysite folder with your virtual environment activated.

Then save all of your installed apps in a requirements.txt file created by the command pip freeze > requirements.txt. This will allow Elastic Beanstalk to use all of the packages installed locally.

 

View requirements.txt file

env > mysite > requirements.txt

Django==2.1.15
...

Open the requirements.txt file in your code editor. Only edit the file if there is a package listed with a version 0.0.0. Delete this version 0.0.0 package, if listed, to prevent errors upon deployment. Save the changes made to the file. 

 

Create an .ebextensions folder

macOS Terminal

(env)User-Macbook:mysite user$ mkdir .ebextensions

Windows Command Prompt

(env) C:\Users\Owner\desktop\code\env\mysite> mkdir .ebextensions

In the CLI, run the command mkdir .ebextensions to create an .ebextensions folder. This folder will hold the Django + AWS Elastic Beanstalk settings.

 

Create a django.config file

env > mysite > .ebextensions > (New File) django.config

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: mysite/wsgi.py

Open the new folder .ebextensions in your code editor and create a new file named django.config.

Place the above ebextensions option_settings configurations in the file to allow AWS EB to find the wsgi.py file and properly forward requests in production.

If your project is not called mysite, change it to the correct name. 

 


 

Deploy Django to AWS Elastic Beanstalk Console

With the proper configurations added, we can move on to zipping your root directory and deploying it to the AWS Elastic Beanstalk console. 

 

Zip your Django project

Next, locate your Django project in Windows File Explorer or Mac Finder and zip all of the files located within the project directory.

Do not zip the project folder itself.

The items being zipped should include the .ebextensions, main, and mysite folders along with the database, manage.py, and requirements.txt files.

Zip project

 

AWS Elastic Beanstalk Upload Zip

Login to your AWS account and open the Elastic Beanstalk console. Click the "Create Application" button on the right side of the screen.

Then name your application in the Application Information section. You can keep the Application tags section blank.

Select "Python" for your platform and the rest of the Platform section will auto-fill.

Finally, under Application code select "Upload your code". A new section will appear called Source code origin where you need to select "Local file" and upload the folder zipped in the previous step.

Once the folder is done uploading, click "Create Application" at the bottom of the page to continue. AWS EB will then begin launching your project.

Upload project to EB consoleGIF

 


 

Open your project in the browser

When your project is done deploying, you will be brought to the environment dashboard. To view the deployed project, click the Elastic Beanstalk domain listed at the top of the page.

If your environment is producing WARN events, make sure you have followed all of the previous steps and configured the files correctly.

Deployed project

 


 

Handling more specific errors

ERROR: Your WSGIpath refers to a file that does not exist

If you are getting "ERROR Your WSGIPath refers to a file that does not exist." :

Check the django.config file and make sure it has the right code and formatting. Save the changes to the file, re-zip the project, then deploy again.

 

If you are still getting "ERROR Your WSGIPath refers to a file that does not exist." :

If this error is still occurring after you redeploy, go to the environment page and select Configuration on the side menu.

Under the Software category, click "Edit" and find the WSGIPath.

Change the path to mysite/wsgi.py then save the changes and wait for the environment to update.

Add your project's name in place of mysite if your project's root directory is not named mysite

 

ERROR: .ebextensions not working

If your .ebextensions folder is not working correctly, check that it is added to the root directory of your project.

This is the folder created by the command django-admin startproject. It is also the folder that contains the database, manage.py, and requirements.txt.

 

ERROR: 500

If you are getting a 500 error and everything seems to be configured properly, check that the requirements.txt file does not have a package listed with a version 0.0.0.

This package with a 0.0.0 version number causes the requirements.txt file to not be read correctly. Deleting the package and redeploying should solve the issue.


0
Subscribe now

Subscribe to stay current on our latest articles and promos





Post a Comment
Join the community

0 Comments