Deployment Process¶
Deploying to AWS¶
Backend
Prerequisites:
- AWS Simple Email Service Domain and SMTP Credentials
- AWS VPC and Security groups:
- VPC: hotosm-network-production-default-vpc-<region>
- Security Groups:
- hotosm-network-production-<NetworkEnvironment>-ec2s-security-group
- hotosm-network-production-<NetworkEnvironment>-elbs-security-group
- cfn-config
- S3 bucket for storing cfn-config json files
cfn-config create <stack-name> scripts/aws/cloudformation/tasking-manager.template.js -t <cfn-template-bucket> -c <cfn-config-bucket>
Frontend
This step is optional if you choose to setup CI/CD
First the environment variables in ./frontend/.env
, then run the following code. <TaskingManagerReactBucket>
is the name of the bucket in the cloudformation stack created above.
cd ./frontend/
yarn
yarn build
aws s3 sync build/ <TaskingManagerReactBucket> --delete
Performing Updates¶
When deploying updates to the infrastructure or code, follow the steps below.
Backup Database¶
Before updating it's always recommended to backup the database. You can make a snapshot in AWS RDS console, or run the database dump directly. Make sure you have set your security group to allow access to the database on your local machine.
PGPASSWORD=<PostgresPassword> pg_dump -Fc \
-h <RDS_URI> \
-U <PostgresUser> \
-f backup.dump \
<PostgresDB>
Update backend infrastructure¶
If the deployment contains any changes to the cloudformation template, then we must update the infrastructure prior to deployment. These changes are deliberately outside the CI/CD process to prevent accidental deletion of data.
- Pull the latest changes locally
- Run the
cfn-config update
command, keeping in mind to update any new parameters that were added.
cfn-config update tm4-production \
scripts/aws/cloudformation/tasking-manager.template.js \
-t hot-cfn-config -c hot-cfn-config
Deploy Code to Production¶
Make sure you have set up CI/CD properly first. We use a simple git branch model to manage different deployments/environments, so adjust the branch names as needed.
git checkout develop
git fetch
git pull origin develop
git checkout deployment/hot-tasking-manager
git pull origin deployment/hot-tasking-manager
git rebase develop
git push origin deployment/hot-tasking-manager
In the event that the changes to be deployed are frontend only, you may instead rebase and push the deployment/hot-tasking-manager-frontend
branch. This will be significantly faster and less disruptive than a standard deployment, which has to replace compute resources.