Skip to content

delius-iaps-data-refresh #51

delius-iaps-data-refresh

delius-iaps-data-refresh #51

---
name: delius-iaps-data-refresh
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
on:
workflow_dispatch:
inputs:
manually_specified_snapshot_id: # This is the name of the input
description: 'Snapshot ID'
required: false
trigger_mp_workflow:
description: 'Trigger MP workflow for IAPS [true|false]'
default: 'true'
jobs:
share-latest-manual-snapshot:
runs-on: ubuntu-latest
steps:
- name: install aws-cli
run: |
sudo apt-get update
sudo apt-get install -y python3-pip
sudo pip3 install awscli
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0
with:
role-to-assume: "arn:aws:iam::${{ secrets.IAPS_PRODUCTION_ACCOUNT_ID }}:role/ci-data-refresher"
role-session-name: githubactionsrolesession
aws-region: "eu-west-2"
- name: Get latest overnight backup
if: ${{ github.event.inputs.manually_specified_snapshot_id == '' }}
run: |
overnight_snapshot_identifier=$(aws rds describe-db-snapshots \
--snapshot-type "automated" \
--db-instance-identifier "iaps" \
--query "reverse(sort_by(DBSnapshots, &SnapshotCreateTime))[0].DBSnapshotIdentifier" \
--output text)
if [ -z "$overnight_snapshot_identifier" ]; then
echo "No snapshot found"
exit 1
fi
echo SOURCE_SNAPSHOT_IDENTIFIER=${overnight_snapshot_identifier} >> $GITHUB_ENV
echo SOURCE_SNAPSHOT_IDENTIFIER=${overnight_snapshot_identifier} >> $GITHUB_OUTPUT
- name: Snapshot ID provided
if: ${{ github.event.inputs.manually_specified_snapshot_id != '' }}
run: |
echo SOURCE_SNAPSHOT_IDENTIFIER=${{ github.event.inputs.manually_specified_snapshot_id }} >> $GITHUB_ENV
echo SOURCE_SNAPSHOT_IDENTIFIER=${{ github.event.inputs.manually_specified_snapshot_id }} >> $GITHUB_OUTPUT
- name: Set snapshot name string
run: |
echo DATETIME_STRING="$(echo $SOURCE_SNAPSHOT_IDENTIFIER | sed s/"rds:iaps-"//)" >> $GITHUB_ENV
echo SNAPSHOT_PROD_COPY_NAME="iaps-prod-snapshot-${{env.DATETIME_STRING}}" >> $GITHUB_ENV
- name: Copy snapshot (prod-prod)
run: |
aws rds copy-db-snapshot \
--source-db-snapshot-identifier "${{ env.SOURCE_SNAPSHOT_IDENTIFIER }}" \
--target-db-snapshot-identifier "${{ env.SNAPSHOT_PROD_COPY_NAME }}" \
--region "eu-west-2"
- name: Wait for RDS Snapshot to be ready
if: ${{ github.event.inputs.dry_run == 'false' }}
run: |
for run in {1..5}; do
aws rds wait db-snapshot-available \
--db-snapshot-identifier "${{ env.SNAPSHOT_PROD_COPY_NAME }}" && break || sleep 10 * run
done
- name: Share RDS snapshot with Pre-Prod
run: |
aws rds modify-db-snapshot-attribute \
--db-snapshot-identifier "${{ env.SNAPSHOT_PROD_COPY_NAME }}" \
--attribute-name restore \
--values-to-add "${{ secrets.IAPS_PREPRODUCTION_ACCOUNT_ID }}"
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e1e17a757e536f70e52b5a12b2e8d1d1c60e04ef # v2.0.0
with:
role-to-assume: "arn:aws:iam::${{ secrets.IAPS_PREPRODUCTION_ACCOUNT_ID }}:role/ci-data-refresher"
role-session-name: githubactionsrolesession
aws-region: "eu-west-2"
- name: Set final snapshot name string
run: |
echo FINAL_SNAPSHOT_PROD_COPY_NAME="iaps-refresh-ready-${{ env.DATETIME_STRING }}" >> $GITHUB_ENV
- name: Copy snapshot (prod[shared]-preprod)
run: |
aws rds copy-db-snapshot \
--source-db-snapshot-identifier "arn:aws:rds:eu-west-2:${{ secrets.IAPS_PRODUCTION_ACCOUNT_ID }}:snapshot:${{ env.SNAPSHOT_PROD_COPY_NAME }}" \
--target-db-snapshot-identifier "${{ env.FINAL_SNAPSHOT_PROD_COPY_NAME }}" \
--kms-key-id "arn:aws:kms:eu-west-2:374269020027:alias/rds-hmpps" \
--region "eu-west-2"
- name: Wait for RDS Snapshot to be ready in Pre-Prod
run: |
for run in {1..5}; do
aws rds wait db-snapshot-available \
--db-snapshot-identifier "${{ env.FINAL_SNAPSHOT_PROD_COPY_NAME }}" && break || sleep 10 * run
done
- name: Store identifier in SSM parameter store
run: |
aws ssm put-parameter \
--name "/iaps/snapshot_id" \
--value "${{ env.FINAL_SNAPSHOT_PROD_COPY_NAME }}" \
--type "String" \
--overwrite \
--region "eu-west-2"
- name: Output snapshot identifier
run: |
echo "Snapshot identifier: ${{env.FINAL_SNAPSHOT_PROD_COPY_NAME}}"
- name: Generate token
if: ${{ github.event.inputs.trigger_mp_workflow == 'true' }}
id: generate_token
uses: tibdex/[email protected]
with:
app_id: ${{ secrets.HMPPS_BOT_APP_ID }}
private_key: ${{ secrets.HMPPS_BOT_PRIVATE_KEY }}
- name: Trigger IAPS Workflow
if: ${{ github.event.inputs.trigger_mp_workflow == 'true' }}
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
run: gh workflow run delius-iaps --ref main -F action=deploy --repo ministryofjustice/modernisation-platform-environments