This article is a work in progress…
The Amazon Web Services (AWS) website has instructions for doing this, but they are mostly tailored to doing it on a Linux machine. Here’s how to do it on Windows 7.
Prerequisites
- Download and unzip the Elastic Beanstalk command line tools package (eb)
Add eb to the path
set PATH=%PATH%;C:\Users\andygilbertson\AWS-ElasticBeanstalk-CLI-2.6.0\eb\windows\
pip install http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.7.2.tar.gz
Steps
Open up a command prompt (cmd.exe, not PowerShell)
Create a virtual environment
cd C:\
virtualenv --python=C:\Python27\python.exe Users\andygilbertson\envs\django_aws_hello
This will create a mini Python installation in the directory. You can go there and see the files to confirm.
Go into the newly created “Scripts” directory
cd C:\Users\andygilbertson\envs\django_aws_hello\Scripts
Then activate the virtual environment
activate
Now you’ll see your virtual environment name in parentheses to indicate you are in your virtual environment
Inside your virtual env, install django and python
pip install django==1.6.2
easy_install MySQL-python==1.2.5
Start the Django project locally
cd..
django-admin.py startproject hellodjango
Go into the newly created root folder for your local Django site
cd hellodjango
Create the requirements.txt file
pip freeze > requirements.txt
After freezing, requirements.txt should look like this:
Django==1.6.2
mysql-python==1.2.5
Initialize the Git repository
git init .
Make sure you’re in the project directory
cd C:\Users\andygilbertson\envs\django_aws_hello\hellodjango
Run eb init
eb init
Now you’ll have to fill in a bunch of Elastic Beanstalk settings.
Settings to choose
- Environment Tier: WebServer::Standard::1.0
- Solution stack: 32bit Amazon Linux 2013.09 running Python 2.7
- Environment type: LoadBalanced
- Create an RDS DB instance: y
On your local computer, create an .ebextensions directory in the top-level directory of your source bundle. In this example, we use /root/mysite/.ebextensions.
mkdir .ebextensions
Create a configuration file (myapp.config)
container_commands:
01_syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: mysite/wsgi.py
- option_name: DJANGO_SETTINGS_MODULE
value: mysite.settings
- option_name: AWS_SECRET_KEY
value: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
- option_name: AWS_ACCESS_KEY_ID
value: AKIAIOSFODNN7EXAMPLE
- Make sure you fill in all four of the option_settings with your data.
- Make sure your config file doesn’t have tab characters. Use only spaces for indenting
Save this .config file in the newly created .ebextensions directory
Edit your settings.py file (/root/mysite/settings.py). Add this for the DATABASES object:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
Add these files to the Git repository and commit the changes
git add .
git commit -m "eb configuration"
git aws.push
New you can run eb start to actually initialize Elastic Beanstalk with all the settings
eb start
When it’s all up and running (it takes about 15 minutes) you should be able to get some status info
eb status --verbose
When the server status is Green, you should be able to grab the supplied URL and plug it into your browser. If everything went according to plan, you’ll see Django’s basic welcome page.
If you see the Elastic Beanstalk starter page (not Django’s), you may have to run Git aws.push again.
git aws.push
Troubleshooting
One of the first places to look is the AWS Console. Go to Elastic Beanstalk, find your environment. On the left you’ll see “Logs”. “Snapshot Logs” and read through them to find errors.
Closing Up Shop
To stop the Elastic Beanstalk server/environment
eb stop
To delete the Elastic Beanstalk server/environment
eb delete
To deactivate your virtual environment
cd C:\Users\andygilbertson\envs\django_aws_hello\Scripts
deactivate