|
| 1 | +#!/usr/bin/dumb-init /bin/bash |
| 2 | +export PGPASSWORD=${POSTGRES_PASSWORD} |
| 3 | +export PSQL_HOST=${POSTGRES_HOST} |
| 4 | +export PSQL_PORT="${POSTGRES_PORT:-5432}" |
| 5 | +export PSQL_USER=${POSTGRES_USER} |
| 6 | +export PSQL_DB=${POSTGRES_DATABASE} |
| 7 | +export ENV="${ENV:-manual}" |
| 8 | +export JOB_ID="${JOB_ID:-NA}" |
| 9 | +export DB_BACKUPS_BUCKET="${DB_BACKUPS_BUCKET:-gitcoinbackups}" |
| 10 | +export AWS_DEFAULT_REGION="${AWS_REGION:-us-west-2}" |
| 11 | +export AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY_ID |
| 12 | +export AWS_SECRET_ACCESS_KEY=$S3_SECRET_ACCESS_KEY |
| 13 | +export GZIP="${GZIP:-on}" |
| 14 | +export DB_BACKUP_CLEANSE="${DB_BACKUP_CLEANSE:-off}" |
| 15 | + |
| 16 | +"${JOB_TYPE:?You must set the JOB_TYPE environment variable}" |
| 17 | + |
| 18 | +JOB_DESC="Job: ($JOB_ID) - Type: ($JOB_TYPE) - Environment: ($ENV) -" |
| 19 | + |
| 20 | +echo "$JOB_DESC Started!" |
| 21 | +echo "$PSQL_HOST" |
| 22 | +date |
| 23 | +MONTH=$(date +"%m") |
| 24 | +DAY=$(date +"%d") |
| 25 | +YEAR=$(date +"%Y") |
| 26 | + |
| 27 | +# PSQL_HOST_OPTS="-h $PSQL_HOST -p $PSQL_PORT -U $PSQL_USER" |
| 28 | +S3_DB_BACKUP_PATH="s3://$DB_BACKUPS_BUCKET/$ENV/$YEAR/$MONTH/$DAY" |
| 29 | + |
| 30 | +gunzip_dump () { |
| 31 | + # If GZIP is enabled, compress dump.sql file. |
| 32 | + if [ "$GZIP" = "on" ]; then |
| 33 | + echo "GZip started!" |
| 34 | + gzip -f dump.sql > dump.sql.gz |
| 35 | + echo "GZip completed!" |
| 36 | + fi |
| 37 | +} |
| 38 | + |
| 39 | +backup_db () { |
| 40 | + echo "Database backup started - Database: ($PSQL_DB)" |
| 41 | + # If DB_BACKUP_CLEANSE is enabled, |
| 42 | + if [ "$DB_BACKUP_CLEANSE" = "on" ]; then |
| 43 | + DUMP_OUT="| sed 's/[\\.a-zA-z0-9]*\\@/xxxxx@/g' | sed 's/\\@[\\.a-zA-z0-9]*/@DOMAIN.TLD/g' | sed 's/key=[\\.a-zA-z0-9]*/key=XXXX/g' > dump.sql" |
| 44 | + else |
| 45 | + DUMP_OUT="--file=dump.sql" |
| 46 | + fi |
| 47 | + pg_dump "$PSQL_DB" -h "$PSQL_HOST" -p "$PSQL_PORT" -U "$PSQL_USER" "$DUMP_OUT" |
| 48 | + echo "Backup completed! - Database: ($PSQL_DB)" |
| 49 | + gunzip_dump |
| 50 | +} |
| 51 | + |
| 52 | +if [ "$JOB_TYPE" = "db-backup" ]; then |
| 53 | + backup_db |
| 54 | + echo "Upload started!" |
| 55 | + aws s3 cp dump.sql.gz "$S3_DB_BACKUP_PATH"/"$PSQL_DB".sql.gz |
| 56 | + echo "Upload completed!" |
| 57 | +elif [ "$JOB_TYPE" = "db-backup-all" ]; then |
| 58 | + echo "Dump started - All Databases" |
| 59 | + pg_dumpall "$PSQL_DB" -h "$PSQL_HOST" -p "$PSQL_PORT" --file=dump.sql |
| 60 | + echo "Dump completed! - All Databases" |
| 61 | + gunzip_dump |
| 62 | + echo "Upload started!" |
| 63 | + aws s3 cp dump.sql.gz s3://"$S3_DB_BACKUP_PATH"/all.sql.gz |
| 64 | + echo "Upload completed!" |
| 65 | +elif [ "$JOB_TYPE" = "db-restore" ]; then |
| 66 | + echo "Database restore started - Database: ($PSQL_DB)" |
| 67 | + RESTORATION_KEY=${DB_RESTORATION_KEY:-'stage/latest.sql.gz'} |
| 68 | + # Example: RESTORATION_KEY=stage/2018/04/05/gitcoin.sql.gz |
| 69 | + aws s3 cp s3://"$DB_BACKUPS_BUCKET"/"$RESTORATION_KEY" dump.sql.gz || exit 2 |
| 70 | + gunzip -c dump.sql.gz | psql "$POSTGRES_HOST_OPTS" "$POSTGRES_DATABASE" |
| 71 | + echo "Restore from S3 completed!" |
| 72 | +elif [ "$JOB_TYPE" = "cf-bust" ]; then |
| 73 | + "${CF_DISTIBUTION_ID:?You must set the CF_DISTIBUTION_ID environment variable}" |
| 74 | + echo "Cloudfront cache busting started - Distribution ID: ($CF_DISTIBUTION_ID)" |
| 75 | + aws cloudfront create-invalidation --distribution-id "$CF_DISTIBUTION_ID" --invalidation-batch="Paths={Quantity=1,Items=["/*"]},CallerReference=$(date)" |
| 76 | + echo "Cloudfront cache busting completed - Distribution ID: ($CF_DISTIBUTION_ID)" |
| 77 | +else |
| 78 | + echo "No recognized job type specified!" |
| 79 | +fi |
| 80 | +echo "$JOB_DESC Completed!" |
0 commit comments