✨ Airflow 3.0 Compatible Implementation
This is an updated implementation supporting Apache Airflow 3.0.6 with the native OpenLineage provider. If you're looking for the original Airflow 2.x implementations, please refer to:
- Blog post: Automate data lineage on Amazon MWAA with OpenLineage
- Original repository: aws-samples/aws-mwaa-openlineage (Airflow 2.x)
- DR implementation: aws-samples/mwaa-disaster-recovery (Airflow 2.x)
Key improvements in this version:
- ✅ Native OpenLineage provider (no custom plugins needed)
- ✅ Airflow 3.0.6 compatibility with latest features
- ✅ Multi-region disaster recovery with metadata backup/restore
- ✅ Multiple deployment modes (Standard, Blue-Green, HA, Full HA)
- ✅ Production-ready with comprehensive documentation and examples
This CDK project creates a complete, production-ready MWAA environment with OpenLineage integration for automatic data lineage tracking using Apache Airflow 3.0.6.
- ✅ Airflow 3.0.6 with native OpenLineage provider
- ✅ Automated deployment with AWS CDK
- ✅ Marquez for lineage visualization
- ✅ Four deployment modes: Standard, Blue-Green MWAA, HA Marquez, Full HA
- ✅ Disaster Recovery with multi-region MWAA, metadata backup/restore, and failover orchestration
- ✅ Production-ready with security best practices
- ✅ Zero-downtime switching for Blue-Green deployments
- ✅ Comprehensive documentation with troubleshooting guides
- ✅ Sample DAGs demonstrating lineage capture
- ✅ Performance testing suite for capacity validation
- ✅ No custom plugins needed - uses native provider
This project supports four deployment modes. Choose based on your requirements:
| Mode | MWAA | Marquez | Cost/Month | Use Case |
|---|---|---|---|---|
| Standard | Single | Single EC2 | ~$350 | Development, testing |
| Blue-Green MWAA | Dual (Blue+Green) | Single EC2 | ~$700 | Zero-downtime MWAA updates |
| HA Marquez | Single | ALB+ASG+RDS | ~$650 | High availability lineage |
| Full HA | Dual (Blue+Green) | ALB+ASG+RDS | ~$1,000 | Production, mission-critical |
See DEPLOYMENT_MODES.md for detailed comparison and switching instructions.
Looking for advanced deployment patterns? Check out the examples/ directory:
Multi-region MWAA with metadata backup/restore and automated failover orchestration.
- disaster-recovery/ — Foundational two-region MWAA infrastructure (VPC, S3, MWAA in both regions)
- metadb-backup-restore/ — MetaDB backup/restore via Glue, plus failover orchestrator (Step Functions) with health check, region flip, and SNS notifications
See examples/README.md for deployment order and architecture overview.
Choose your deployment mode based on requirements. All modes use the same codebase with different configuration flags in cdk.json.
Best for: Development, testing, proof of concept
Cost: ~$350/month
Setup time: ~30 minutes
Configuration: enable_blue_green: false, enable_ha_marquez: false
Prerequisites:
- AWS CLI configured
- AWS CDK installed (
npm install -g aws-cdk) - Python 3.9+ with pip
- Virtual environment activated
# 1. Clone the repository
git clone https://github.com/dgghosalaws/mwaa-openlineage-cdk.git
cd mwaa-openlineage-cdk
# 2. Set up virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# 3. Install dependencies
pip install -r requirements.txt
# 4. Bootstrap CDK (first time only)
cdk bootstrap
# 5. Deploy all stacks (uses app.py by default)
cdk deploy --all
# Or deploy individually:
# cdk deploy mwaa-openlineage-network-dev
# cdk deploy mwaa-openlineage-marquez-dev
# cdk deploy mwaa-openlineage-mwaa-devWhat gets deployed:
- Single Marquez EC2 instance (t3.medium)
- Containerized PostgreSQL database
- MWAA environment (mw1.small)
- VPC with public/private subnets
Stacks created:
mwaa-openlineage-network-devmwaa-openlineage-marquez-devmwaa-openlineage-mwaa-dev
Best for: Zero-downtime Airflow version upgrades
Cost: ~$700/month
Setup time: ~45 minutes
Configuration: enable_blue_green: true, enable_ha_marquez: false
# 1. Edit cdk.json
{
"context": {
"enable_blue_green": true,
"enable_ha_marquez": false
}
}
# 2. Deploy all stacks
cdk deploy --all
# 3. Upload zero-downtime DAG to both environments
ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
REGION=$(aws configure get region)
aws s3 cp assets/dags/example_blue_green_zero_downtime.py \
s3://mwaa-openlineage-mwaa-blue-dev-${REGION}-${ACCOUNT}/dags/
aws s3 cp assets/dags/example_blue_green_zero_downtime.py \
s3://mwaa-openlineage-mwaa-green-dev-${REGION}-${ACCOUNT}/dags/
# 4. Test instant switching
python3 switch_zero_downtime.py --to green
python3 switch_zero_downtime.py --to blueWhat gets deployed:
- Two MWAA environments (Blue and Green)
- Single Marquez EC2 instance (shared)
- Parameter Store for active environment tracking
- Zero-downtime switching capability
Blue-Green Features:
- ✅ Zero-downtime switching (< 1 second)
- ✅ Both environments always AVAILABLE
- ✅ Instant failover capability
- ✅ Safe testing of Airflow upgrades
- ✅ Quick rollback via Parameter Store
Stacks created:
mwaa-openlineage-network-devmwaa-openlineage-marquez-devmwaa-openlineage-mwaa-bluegreen-dev
See BLUE_GREEN_DEPLOYMENT.md for complete guide.
Best for: High availability lineage tracking
Cost: ~$650/month
Setup time: ~35 minutes
Configuration: enable_blue_green: false, enable_ha_marquez: true
# Edit cdk.json
{
"context": {
"enable_blue_green": false,
"enable_ha_marquez": true
}
}
# Deploy
cdk deploy --allWhat gets deployed:
- Single MWAA environment
- Internal Application Load Balancer (ALB)
- Auto Scaling Group (2-4 EC2 instances)
- RDS PostgreSQL Multi-AZ
- Enhanced security and automatic failover
Stacks created:
mwaa-openlineage-network-devmwaa-openlineage-marquez-ha-devmwaa-openlineage-mwaa-dev
See ALB_ACCESS_GUIDE.md for HA Marquez details.
Best for: Production, mission-critical workloads
Cost: ~$1,000/month
Setup time: ~60 minutes
Configuration: enable_blue_green: true, enable_ha_marquez: true
# 1. Edit cdk.json
{
"context": {
"enable_blue_green": true,
"enable_ha_marquez": true,
"region": "us-east-1"
}
}
# 2. Deploy all stacks
cdk deploy --all
# 3. Upload zero-downtime DAG to both environments
ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
REGION=$(aws configure get region)
aws s3 cp assets/dags/example_blue_green_zero_downtime.py \
s3://mwaa-openlineage-mwaa-blue-dev-${REGION}-${ACCOUNT}/dags/
aws s3 cp assets/dags/example_blue_green_zero_downtime.py \
s3://mwaa-openlineage-mwaa-green-dev-${REGION}-${ACCOUNT}/dags/
# 4. Test instant switching
python3 switch_zero_downtime.py --to green --region ${REGION}
python3 switch_zero_downtime.py --to blue --region ${REGION}What gets deployed:
- Two MWAA environments (Blue and Green) with zero-downtime switching
- Internal ALB with Auto Scaling (2-4 instances)
- RDS PostgreSQL Multi-AZ
- Complete redundancy - no single point of failure
Full HA Features:
- ✅ Zero-downtime MWAA switching (< 1 second)
- ✅ High availability Marquez (ALB + ASG + RDS)
- ✅ No single point of failure
- ✅ Production-grade reliability
Stacks created:
mwaa-openlineage-network-devmwaa-openlineage-marquez-ha-devmwaa-openlineage-mwaa-bluegreen-dev
See FULL_HA_GUIDE.md for complete HA deployment guide.
| Criteria | Standard | Blue-Green | HA Marquez | Full HA |
|---|---|---|---|---|
| Use Case | Dev/Test/POC | Zero-Downtime MWAA | HA Lineage | Mission-Critical |
| MWAA Environments | 1 | 2 | 1 | 2 |
| Marquez | Single EC2 | Single EC2 | ALB + ASG + RDS | ALB + ASG + RDS |
| Availability | Single instance | Dual MWAA | Multi-AZ Marquez | Complete HA |
| Failover | Manual | Instant (MWAA) | Automatic (Marquez) | Both |
| Switch Time | N/A | < 1 second | N/A | < 1 second |
| Cost | ~$350/month | ~$700/month | ~$650/month | ~$1,000/month |
| Setup Time | ~30 minutes | ~45 minutes | ~35 minutes | ~60 minutes |
| Best For | Development | Zero-Downtime Ops | HA Lineage | Production |
Note: All deployments can coexist in the same AWS account/region as they use different stack names.
Multi-region MWAA disaster recovery is available as self-contained examples in the examples/ directory. The DR solution is split into two layers:
-
disaster-recovery/ — Deploys foundational multi-region MWAA infrastructure (VPC, S3, MWAA environments in us-east-2 and us-east-1)
-
metadb-backup-restore/ — Adds metadata database backup/restore via AWS Glue, plus an optional failover orchestrator that chains cross-region restore → region flip → SNS notification
- Cross-region MetaDB export/restore using Glue JDBC
- Automated failover orchestration via Step Functions
- Health check Lambda with EventBridge schedule (disabled by default)
- DynamoDB state tracking for active region
- Works with both Airflow 2.x and 3.x
- Designed for planned failover simulations
See examples/README.md for deployment order, architecture diagram, and complete documentation.
- README.md - This file (standard deployment)
- BLUE_GREEN_DEPLOYMENT.md - Blue-Green deployment with zero-downtime switching
- QUICK_START.md - Quick reference guide
- DEPLOYMENT_MODES.md - Comparison of all deployment modes
- ARCHITECTURE.md - Detailed architecture overview
- ZERO_DOWNTIME_GUIDE.md - Zero-downtime switching implementation
- ACCESSING_MARQUEZ.md - Accessing Marquez in private subnet
- MONITORING.md - CloudWatch monitoring and metrics
- PERFORMANCE_TESTING.md - Capacity testing and validation
- examples/README.md - Disaster recovery examples and architecture
- SECURITY.md - Security policy and best practices
- CONTRIBUTING.md - How to contribute
- CODE_OF_CONDUCT.md - Community guidelines
This project is specifically configured for Airflow 3.0.6 using the native OpenLineage provider:
- Uses apache-airflow-providers-openlineage (NOT deprecated openlineage-airflow package)
- No custom plugins needed - provider handles everything automatically
- Configuration via Airflow config options (NOT Secrets Manager or plugins)
- Configuration values must be lowercase ("false" not "False")
For complete details on Airflow 3.0 configuration, see the troubleshooting section below.
The project supports two deployment architectures:
Three main stacks:
- Network Stack - VPC with public and private subnets across 2 AZs
- Marquez Stack - Single EC2 instance running Marquez in Docker
- MWAA Stack - Managed Airflow 3.0.6 environment
Best for: Development, testing, proof of concept, cost-sensitive projects
Three main stacks with enhanced Marquez backend:
- Network Stack - VPC with enhanced security
- Marquez HA Stack - Internal ALB, Auto Scaling Group (2-4 instances), RDS Multi-AZ
- MWAA Stack - Managed Airflow 3.0.6 environment
Best for: Production, business-critical workloads, 24/7 availability
Note: The HA deployment enhances the Marquez lineage backend with load balancing, auto scaling, and database redundancy. MWAA is a fully managed AWS service with built-in high availability in both deployment options.
See ARCHITECTURE.md for detailed architecture diagrams and comparison.
- ✅ VPC with public/private subnets
- ✅ Marquez server (EC2 + Docker)
- ✅ MWAA environment (mw1.small)
- ✅ S3 bucket for MWAA assets
- ✅ IAM roles and security groups
- ✅ CloudWatch dashboard with comprehensive MWAA metrics
- ✅ Real-time monitoring of workers, tasks, and resource utilization
- ✅ Automatic deployment with MWAA stack
- ✅ Can be disabled via
cdk.json(enable_monitoring: false)
Monitoring Metrics Include:
- Worker count and auto-scaling behavior
- Running and queued tasks
- CPU and memory utilization
- Database connections
- Scheduler performance
See MONITORING.md for detailed metrics and dashboard usage.
- ✅ apache-airflow-providers-openlineage (native provider)
- ✅ Automatic HTTP transport configuration
- ✅ Configuration via Airflow config options
- ✅ No custom plugins needed
- ✅ Lowercase configuration values for Airflow 3.0
- ✅ openlineage_demo DAG
- ✅ Configuration verification
- ✅ Connectivity testing
- ✅ Sample data processing
- ✅ Lineage generation
- AWS CLI configured with appropriate credentials
- AWS CDK installed:
npm install -g aws-cdk
- Python 3.9+ installed
- AWS Account with permissions to create:
- VPC, EC2, MWAA, S3, Secrets Manager, IAM
- AWS CLI configured with appropriate credentials
- AWS CDK installed:
npm install -g aws-cdk
- Python 3.9+ installed
- AWS Account with permissions to create:
- VPC, EC2, MWAA, S3, IAM
- For HA: RDS, ALB, Auto Scaling Groups
# Navigate to the project directory
cd mwaa-openlineage-cdk
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtcdk bootstrapFor Standard Deployment (Development/Testing):
# Review what will be deployed
cdk list
# Output:
# mwaa-openlineage-network-dev
# mwaa-openlineage-marquez-dev
# mwaa-openlineage-mwaa-dev
# mwaa-openlineage-monitoring-dev (deployed automatically with MWAA)
# Deploy all stacks
cdk deploy --allNote: The monitoring stack is automatically deployed when you deploy the MWAA stack. To disable it, set enable_monitoring: false in cdk.json before deployment.
For HA Deployment (Production):
# Review what will be deployed
cdk list --app "python3 app_ha.py"
# Output: mwaa-openlineage-network-ha, mwaa-openlineage-marquez-ha, mwaa-openlineage-mwaa-ha
# Deploy HA stacks
cdk deploy mwaa-openlineage-network-ha mwaa-openlineage-marquez-ha \
--app "python3 app_ha.py" \
--require-approval never \
--region us-east-2Standard Deployment: ~35-40 minutes
- Network Stack: ~3 minutes
- Marquez Stack: ~5 minutes (+ 2-3 minutes for Marquez to start)
- MWAA Stack: ~25-30 minutes
- Monitoring Stack: ~2 minutes (deployed automatically with MWAA stack)
HA Deployment: ~20-25 minutes
- Network Stack: ~3 minutes
- Marquez HA Stack: ~15-20 minutes (RDS Multi-AZ takes time)
- Instance initialization: ~3-5 minutes
- MWAA Stack: ~25-30 minutes (optional)
After deployment, note the CloudFormation outputs:
# Get all outputs
aws cloudformation describe-stacks \
--stack-name mwaa-openlineage-mwaa-dev \
--query 'Stacks[0].Outputs'Key outputs:
- MarquezUiUrl: Marquez UI URL (http://...)
- MarquezApiUrl: Marquez API URL (http://...)
- MwaaWebserverUrl: Airflow UI URL (https://...)
- MwaaBucketName: S3 bucket name
Open the Marquez UI URL in your browser:
http://<marquez-public-ip>:3000
The monitoring dashboard is automatically created and provides real-time metrics:
# Get dashboard URL
aws cloudformation describe-stacks \
--stack-name mwaa-openlineage-monitoring-dev \
--query 'Stacks[0].Outputs[?OutputKey==`DashboardUrl`].OutputValue' \
--output textOr navigate in AWS Console:
- Go to CloudWatch → Dashboards
- Find dashboard:
MWAA-{your-environment-name} - View metrics:
- Worker count and auto-scaling
- Running/queued tasks
- CPU and memory utilization
- Database connections
- Scheduler performance
- Go to AWS MWAA Console
- Click on your environment (e.g.,
mwaa-openlineage-dev) - Click "Open Airflow UI"
In MWAA Console:
- Go to your environment (e.g.,
mwaa-openlineage-dev) - Click "Edit"
- Scroll to "Airflow configuration options"
- Verify these settings exist:
openlineage.transportopenlineage.namespaceopenlineage.disabled
- In Airflow UI, find DAG:
openlineage_demo - Enable the DAG (toggle switch)
- Click "Trigger DAG"
- Wait for completion (~2-3 minutes)
- Open Marquez UI
- Select namespace (e.g.,
mwaa-openlineage-dev) - View jobs and lineage graph
- You should see:
- Job:
openlineage_demo - Tasks: verify_openlineage_config, test_marquez_connectivity, etc.
- Lineage connections between tasks
- Job:
mwaa-openlineage-cdk/
├── app.py # Standard deployment CDK app
├── app_ha.py # HA deployment CDK app
├── cdk.json # CDK configuration
├── requirements.txt # Python dependencies
├── README.md # This file (main documentation)
├── FULL_HA_GUIDE.md # Complete HA deployment guide
├── ARCHITECTURE.md # Architecture details (both deployments)
├── stacks/
│ ├── __init__.py
│ ├── network_stack.py # VPC and networking (shared)
│ ├── marquez_stack.py # Single Marquez instance (standard)
│ ├── marquez_ha_stack.py # HA Marquez with ALB, ASG, RDS
│ └── mwaa_stack.py # MWAA environment (shared)
├── assets/
│ ├── dags/
│ │ └── openlineage_demo_dag.py # Sample DAG
│ └── root/
│ └── requirements.txt # Airflow requirements (native provider)
└── deploy_ha.sh # HA deployment helper script
Key Files:
app.py- Entry point for standard deployment (default)app_ha.py- Entry point for HA deploymentstacks/marquez_stack.py- Single instance Marquezstacks/marquez_ha_stack.py- HA Marquez with ALB, ASG, RDSstacks/network_stack.py- Shared by both deploymentsstacks/mwaa_stack.py- Shared by both deployments
Edit cdk.json to change:
{
"context": {
"project_name": "mwaa-openlineage", // Change project name
"environment": "dev", // Change environment
"account": "123456789012", // Your AWS account
"region": "us-east-1" // Your AWS region
}
}Edit stacks/mwaa_stack.py:
- Change
environment_class(mw1.small, mw1.medium, mw1.large) - Change
airflow_version - Add more Airflow configuration options
- Modify logging levels
Edit stacks/marquez_stack.py:
- Change instance type
- Change Marquez version
- Add custom configuration
- Create your DAG file in
assets/dags/ - Redeploy:
cdk deploy mwaa-openlineage-mwaa-dev
# Get bucket name
BUCKET=$(aws cloudformation describe-stacks \
--stack-name mwaa-openlineage-mwaa-dev \
--query 'Stacks[0].Outputs[?OutputKey==`MwaaBucketName`].OutputValue' \
--output text)
# Upload DAG
aws s3 cp your_dag.py s3://$BUCKET/dags/aws mwaa get-environment \
--name YOUR-ENVIRONMENT-NAME \
--query 'Environment.Status'- Go to MWAA Console
- Click environment
- Monitoring > View Logs
- Select log type (Scheduler, Task, Webserver)
# Get Marquez instance ID
INSTANCE_ID=$(aws cloudformation describe-stacks \
--stack-name mwaa-openlineage-marquez-dev \
--query 'Stacks[0].Outputs[?OutputKey==`MarquezInstanceId`].OutputValue' \
--output text)
# Check Docker containers
aws ssm send-command \
--instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" \
--parameters 'commands=["docker ps"]'aws ssm send-command \
--instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" \
--parameters 'commands=["docker logs marquez-api --tail 100"]'- Check CloudWatch logs for errors
- Verify S3 bucket has correct files
- Check IAM role permissions
- Ensure VPC has internet access (NAT Gateway)
Important: Airflow 3.0 uses the native provider approach with automatic configuration.
-
Check Scheduler Logs:
- Look for "OpenLineage provider initialized"
- Should see transport configuration messages
- No warnings about "REMOVED" or deprecated packages
-
Check Configuration:
- MWAA Console > Environment > Airflow configuration options
- Verify openlineage.transport, openlineage.namespace, openlineage.disabled
-
Check Task Logs:
- Run a DAG and check task logs
- Look for "Sending OpenLineage event: START"
- Look for "Sending OpenLineage event: COMPLETE"
-
Test Marquez:
curl http://<marquez-ip>:5000/api/v1/namespaces
-
Common Airflow 3.0 Issues:
- Configuration values must be lowercase strings ("false" not "False")
- Must use apache-airflow-providers-openlineage package
- Old openlineage-airflow package is deprecated and will cause errors
If Marquez UI is not accessible:
-
Check if Marquez containers are running:
# Get Marquez instance ID INSTANCE_ID=$(aws cloudformation describe-stacks \ --stack-name mwaa-openlineage-marquez-dev \ --query 'Stacks[0].Outputs[?OutputKey==`MarquezInstanceId`].OutputValue' \ --output text) # Check container status aws ssm send-command \ --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" \ --parameters 'commands=["docker ps"]'
-
Restart Marquez if containers are stopped:
aws ssm send-command \ --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" \ --parameters 'commands=["cd /home/ec2-user/marquez && sudo -u ec2-user ./docker/up.sh --tag 0.42.0 --detach"]'
-
Access Marquez (in private subnet):
Marquez is deployed in a private subnet for security. See ACCESSING_MARQUEZ.md for detailed access methods including:
- SSM Session Manager (recommended - no SSH keys needed)
- Port forwarding for UI access
- Temporary IP whitelisting for development
Quick test via SSM:
# Get instance ID INSTANCE_ID=$(aws cloudformation describe-stacks \ --stack-name mwaa-openlineage-marquez-dev \ --query 'Stacks[0].Outputs[?OutputKey==`MarquezInstanceId`].OutputValue' \ --output text) # Test API via SSM aws ssm send-command \ --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" \ --parameters 'commands=["curl -s http://localhost:5000/api/v1/namespaces"]' \ --query 'Command.CommandId' --output text
Note: After EC2 instance reboot, Marquez containers may need to be manually restarted. The systemd service is configured to auto-start on boot, but if it fails, use the restart command above.
Estimated monthly costs (us-east-1):
- MWAA (mw1.small): ~$300/month
- EC2 (t3.medium): ~$30/month
- NAT Gateway: ~$32/month
- S3: ~$1/month
- Data Transfer: Variable
Total: ~$363/month (approximate)
Estimated monthly costs (us-east-2):
- MWAA (mw1.small): ~$300/month
- RDS db.t3.small Multi-AZ: ~$60/month
- 2x EC2 t3.medium: ~$60/month
- Internal ALB: ~$20/month
- NAT Gateway: ~$32/month
- S3: ~$1/month
Total: ~$473/month (approximate)
See ARCHITECTURE.md for cost optimization strategies.
To avoid ongoing charges, destroy all resources when no longer needed.
# Destroy all standard stacks
cdk destroy --all
# Or destroy individually (reverse order recommended)
cdk destroy mwaa-openlineage-mwaa-dev
cdk destroy mwaa-openlineage-marquez-dev
cdk destroy mwaa-openlineage-network-dev# Destroy all HA stacks
cdk destroy mwaa-openlineage-mwaa-ha mwaa-openlineage-marquez-ha mwaa-openlineage-network-ha \
--app "python3 app_ha.py" \
--region us-east-2
# Or destroy individually (reverse order recommended)
cdk destroy mwaa-openlineage-mwaa-ha --app "python3 app_ha.py" --region us-east-2
cdk destroy mwaa-openlineage-marquez-ha --app "python3 app_ha.py" --region us-east-2
cdk destroy mwaa-openlineage-network-ha --app "python3 app_ha.py" --region us-east-2Note: S3 buckets will be automatically emptied and deleted. RDS snapshots (HA deployment) are retained by default for 7 days.
This project implements security best practices out of the box:
-
Private Subnet Deployment:
- ✅ Marquez deployed in private subnet (no public IP)
- ✅ MWAA in private subnets
- ✅ Access via SSM Session Manager (no SSH keys needed)
- See ACCESSING_MARQUEZ.md for access methods
-
Encryption Enabled:
- ✅ S3 bucket encryption with KMS (key rotation enabled)
- ✅ EBS volumes encrypted
- ✅ Data encrypted at rest
-
Restricted Access:
- ✅ SSH access disabled by default
- ✅ Security groups allow only necessary ports
- ✅ Marquez accessible only from within VPC
- ✅ IAM roles with least privilege
-
Monitoring Ready:
- ✅ CloudWatch logging enabled for MWAA
- ✅ SSM Session Manager for secure access
- ✅ VPC Flow Logs can be enabled
-
Enhanced Monitoring:
- Set up CloudWatch alarms for critical metrics
- Enable VPC Flow Logs
- Enable CloudTrail logging
-
Access Control:
- Set MWAA webserver to PRIVATE_ONLY for production
- Use AWS Client VPN for team access
- Implement MFA for AWS console access
-
Secrets Management:
- Rotate credentials regularly
- Use AWS Secrets Manager for sensitive data
- Enable secret rotation policies
For issues or questions:
- Check CloudWatch logs
- Review MWAA documentation: https://docs.aws.amazon.com/mwaa/
- Review OpenLineage docs: https://openlineage.io/docs/
- Review Marquez docs: https://marquezproject.github.io/marquez/
- Open an issue on GitHub: https://github.com/dgghosalaws/mwaa-openlineage-cdk/issues
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- AWS MWAA team for the managed Airflow service
- OpenLineage community for the lineage standard
- Marquez team for the lineage visualization tool
- AWS CDK team for the infrastructure as code framework
Dipankar Ghosal
- GitHub: @dgghosalaws
- ✅ Deploy the stacks
- ✅ Verify Marquez is running
- ✅ Run the demo DAG
- ✅ View lineage in Marquez UI
- 🚀 Add your own DAGs
- 🚀 Integrate with your data pipelines
- 🚀 Use lineage for impact analysis and compliance