Sets up the following AWS infrastructure:
- Networking:
- VPC
- Public and private subnets
- Routing tables
- Internet Gateway
- Key Pairs
 
- Security Groups
- Load Balancers, Listeners, and Target Groups
- IAM Roles and Policies
- ECS:
- Task Definition (with multiple containers)
- Cluster
- Service
 
- Auto scaling config
- RDS
- Health Checks and Logs
Check out the tutorial.
- 
Install Terraform 
- 
Sign up for an AWS account 
- 
Create two ECR repositories, django-appandnginx.
- 
Fork/Clone 
- 
Build the Django and Nginx Docker images and push them up to ECR: $ cd app $ docker build -t <AWS_ACCOUNT_ID>.dkr.ecr.us-west-1.amazonaws.com/django-app:latest . $ docker push <AWS_ACCOUNT_ID>.dkr.ecr.us-west-1.amazonaws.com/django-app:latest $ cd .. $ cd nginx $ docker build -t <AWS_ACCOUNT_ID>.dkr.ecr.us-west-1.amazonaws.com/nginx:latest . $ docker push <AWS_ACCOUNT_ID>.dkr.ecr.us-west-1.amazonaws.com/nginx:latest $ cd .. 
- 
Update the variables in terraform/variables.tf. 
- 
Set the following environment variables, init Terraform, create the infrastructure: $ cd terraform $ export AWS_ACCESS_KEY_ID="YOUR_AWS_ACCESS_KEY_ID" $ export AWS_SECRET_ACCESS_KEY="YOUR_AWS_SECRET_ACCESS_KEY" $ terraform init $ terraform apply $ cd .. 
- 
Terraform will output an ALB domain. Create a CNAME record for this domain for the value in the allowed_hostsvariable.
- 
To apply the migrations, run the following command, making sure to replace YOUR_SUBNET_1,YOUR_SUBNET_2, andYOUR_SECURITY_GROUPwith the values that were outputted to your terminal from theterraform applycommand:$ aws ecs run-task \ --cluster production-cluster \ --task-definition django-migration-task \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[YOUR_SUBNET_1, YOUR_SUBNET_2],securityGroups=[YOUR_SECURITY_GROUP],assignPublicIp=ENABLED}"
- 
Now you can open https://your.domain.com/admin. Note thathttp://won't work.
- 
To collect the static files, navigate to the "deploy" folder, create and activate a Python virtual environment, install the requirements, and then run the following command, making sure to replace <AWS_ACCOUNT_ID>with your AWS account ID:(env)$ python update-ecs.py \ --cluster=production-cluster \ --service=production-service \ --image="<AWS_ACCOUNT_ID>.dkr.ecr.us-west-1.amazonaws.com/django-app:latest" \ --container-name django-appYou can use the same command to bump the Task Definition and update the Service.