Skip to content

Instantly share code, notes, and snippets.

@karimbutt
Last active September 1, 2020 10:08
Show Gist options
  • Save karimbutt/a2369ab2f553a988f7f581c5d26eaba2 to your computer and use it in GitHub Desktop.
Save karimbutt/a2369ab2f553a988f7f581c5d26eaba2 to your computer and use it in GitHub Desktop.
s3_db_backup
#!/bin/bash
set -eu
set -o pipefail
# check mandatory variables
[[ -n $BKP_APP_NAME ]]
[[ -n $BKP_AWS_ACCESS_KEY_ID ]]
[[ -n $BKP_AWS_SECRET_ACCESS_KEY ]]
[[ -n $BKP_AWS_S3_BUCKET ]]
[[ -n $BKP_AWS_S3_BUCKET_PATH ]]
[[ -n $BKP_AWS_S3_KMS_KEY_ID ]]
# configure aws vars for awscli
export AWS_ACCESS_KEY_ID=${BKP_AWS_ACCESS_KEY_ID}
export AWS_SECRET_ACCESS_KEY=${BKP_AWS_SECRET_ACCESS_KEY}
# configure timestamp
TIMESTAMP=$( date '+%Y-%m-%d_%H.%M' )
# configure backup filename
BKP_FILE="psq-bkp-${BKP_APP_NAME}-${TIMESTAMP}.dump"
# do psql backup with heroku cli
heroku pg:backups:download \
--app "${BKP_APP_NAME}" \
--output="${BKP_FILE}"
# check and compress backup
if [[ -r "${BKP_FILE}" ]]; then
file "$BKP_FILE"
du -m "${BKP_FILE}"
gzip -9 "${BKP_FILE}"
BKP_FILE="${BKP_FILE}.gz" # now it has .gz apendix
else
exit 1
fi
# check/install awcli
if [[ ! -x $( command -v aws ) ]]; then
pip install awscli
else
echo "awscli is already isntalled"
fi
# upload it to s3
aws s3 cp "${BKP_FILE}" \
"s3://${BKP_AWS_S3_BUCKET}/$BKP_AWS_S3_BUCKET_PATH/" \
--sse aws:kms \
--sse-kms-key-id "${BKP_AWS_S3_KMS_KEY_ID}"
# get rid of backup file after upload
rm -f "${BKP_FILE}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment