delius-iaps-data-refresh #51
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
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 | |