This guide covers all steps needed for setting up your CI-CD workflow with AWS CodeCommit and GitHub under the hood. We will clone a sample django application, configure CodeDeploy agent files and configure CI-CD pipeline in AWS.
Link to sample django project: GitHub
- Clone GitHub repo (Optional)
- Preparing Django project files (Optional)
- Create yaml files to automate AWS CI-CD (Optional)
- Create roles in AWS
- Launching EC2 instance for AWS CI-CD
- Configure AWS Code Deploy
- Configure AWS Code Pipeline
1. Clone GitHub Repo
- Open your chosen command-line interface
- Create new project folder -->
$ mkdir folder_name
- Go in to your project folder -->
$ cd folder_name
- Clone the remote repository -->
$ git clone email@example.com:vinclairvoyant/django-aws_cicd.git
2. Preparing Django project files
For those who have cloned repo need not require any changes to the django files and can skip this step but for others who are deploying their own django project shall continue with below steps:
If you are deploying your own django application then make sure to allow all hosts by Changing ALLOWED_HOSTS in your django settings file as shown below. (Not recommended for security reasons, eventually we want to change this to an IP)
Make sure you have requirements.txt file for installing required dependencies.
3. Create CodeDeploy yml files to automate AWS CI-CD
For this basic tutorial we will create 3 files appspec.yml, before_install.sh & after_install.sh to automate the deployment process handled by AWS CI-CD.
Create appscpec.yml file inside your root project directory where manage.py file is.
Step 1: Create CodeDeploy appspec.yml file
version: 0.0 os: linux files: - source: / destination: /home/ubuntu/django-aws_cicd hooks: BeforeInstall: - location: scripts/before_install.sh AfterInstall: - location: scripts/after_install.sh
Step 2: Create before_install.yml file
#!/usr/bin/env bash # clean codedeploy-agent files for a fresh install sudo rm -rf /home/ubuntu/install # install CodeDeploy agent sudo apt-get -y update sudo apt-get -y install ruby sudo apt-get -y install wget cd /home/ubuntu wget https://aws-codedeploy-us-east-1.s3.amazonaws.com/latest/install sudo chmod +x ./install sudo ./install auto # update os & install python3 sudo apt-get update sudo apt-get install -y python3 python3-dev python3-pip python3-venv pip install --user --upgrade virtualenv # delete app sudo rm -rf /home/ubuntu/django-aws_cicd
Step 3: Create after_install.sh file
#!/usr/bin/env bash # kill any servers that may be running in the background sudo pkill -f runserver # kill frontend servers if you are deploying frontend # sudo pkill -f tailwind # sudo pkill -f node cd /home/ubuntu/django-aws_cicd/ # activate virtual environment python3 -m venv venv source venv/bin/activate install requirements.txt pip install -r /home/ubuntu/django-aws_cicd/requirements.txt # run server screen -d -m python3 manage.py runserver 0:8000
Before we start setting up AWS CI-CD we need to ensure all changes made locally inside django files are pushed to github.
Let's get started configuring AWS for CI-CD pipeline, for this we are going to be using 3 services mainly IAM roles, CodeDeploy & CodePipeline.
4. Create roles in AWS
We want to create 2 IAM roles:
AmazonEC2RoleforAWSCodeDeploy provides EC2 access to S3 bucket to download revision:
AWSCodeDeployRole for CodeDeploy service access to expand tags and interact with Auto Scaling on your behalf.
5. Launching EC2 instance for AWS CI-CD
When launching a new EC2 instance ensure to add IAM