{"library":"mwaa-dr","title":"MWAA Disaster Recovery Solution (mwaa-dr)","description":"mwaa-dr is a Python library that provides a reusable framework for implementing disaster recovery solutions for Amazon Managed Workflows for Apache Airflow (MWAA). It simplifies the creation of Airflow DAGs for exporting and importing MWAA metadata, enabling backup and restore capabilities for critical Airflow components like variables, connections, and DAG run history. The library currently supports various MWAA versions, with the latest PyPI release being 2.2.0, and development is ongoing with updates to support newer Airflow versions.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install mwaa-dr"],"cli":{"name":"mwaa-dr","version":"sh: 1: mwaa-dr: not found"}},"imports":["from mwaa_dr.v_X_Y.dr_factory import DRFactory_X_Y"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom airflow import DAG\nfrom airflow.utils.dates import days_ago\nfrom mwaa_dr.v_2_10.dr_factory import DRFactory_2_10\n\n# Ensure DR_BACKUP_BUCKET Airflow Variable is set in your MWAA environment\n# and MWAA execution role has read/write permissions on it.\n# Example: DR_BACKUP_BUCKET = 'your-mwaa-backup-bucket'\n\n# Initialize the DRFactory for your MWAA/Airflow version\n# For local testing with aws-mwaa-local-runner, use storage_type='LOCAL_FS'\n# and create a 'data' folder in your dags directory.\nfactory = DRFactory_2_10(\n    dag_id='backup_metadata_example',\n    path_prefix='data', # Relative path within the S3 bucket or local_fs\n    storage_type='S3' # Or 'LOCAL_FS' for local development\n)\n\n# Create a backup DAG\nbackup_dag: DAG = factory.create_backup_dag(\n    schedule_interval='@daily', # Example schedule\n    start_date=days_ago(1)\n)\n\n# Create a restore DAG (typically disabled by default, meant for manual trigger)\nrestore_dag: DAG = factory.create_restore_dag(\n    dag_id='restore_metadata_example',\n    start_date=days_ago(1),\n    is_paused_upon_creation=True # Recommended for restore DAGs\n)\n\n# Create a cleanup DAG (for emptying metadata tables before restore, use with caution)\ncleanup_dag: DAG = factory.create_cleanup_dag(\n    dag_id='cleanup_metadata_example',\n    start_date=days_ago(1),\n    is_paused_upon_creation=True # Recommended for cleanup DAGs\n)","lang":"python","description":"This quickstart demonstrates how to use `mwaa-dr` to create a daily metadata backup DAG and a manually triggered restore DAG for an MWAA environment running Apache Airflow 2.10.x. It also shows how to create a cleanup DAG. Before running, ensure you have an S3 bucket configured for backups and the `DR_BACKUP_BUCKET` Airflow variable is set in your MWAA environment. The MWAA execution role must have appropriate S3 permissions.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"2.2.0","pypi_latest":"2.2.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"19.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.2,"import_time_s":null,"mem_mb":null,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2,"import_time_s":null,"mem_mb":null,"disk_size":"22M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"13.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.7,"import_time_s":null,"mem_mb":null,"disk_size":"14M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.9,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"18.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"mwaa-dr","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":2.4,"import_time_s":null,"mem_mb":null,"disk_size":"19M"}]}}