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
Contents
- 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 git@github.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.
Folder/file structure:
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
mkdir scripts
vi scripts/before_install.yml
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
vi scripts/after_install.yml
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.
AWS CI-CD Configuration:
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
Top comments (0)