Health Data Accelerator (HDA)
This starter kit deploys a healthcare-focused data lake with automated data ingestion pipelines using AWS Database Migration Service (DMS), Glue ETL, Lambda, and Step Functions. It provides end-to-end data processing from source relational databases through staging, transformation, and curation layers.
Use Cases
- Healthcare data lake for clinical, operational, and research data
- Automated CDC (Change Data Capture) ingestion from relational databases via DMS
- Multi-stage data transformation pipelines (raw → transformed → curated)
- Batch file processing with configurable scheduling
- Data quality validation and monitoring for healthcare compliance
Capabilities
- DMS replication from source databases with table-level mapping control
- Three-zone S3 data lake (raw, transformed, curated) with KMS encryption
- Glue ETL jobs for data transformation (file processing, surveys, vitals)
- Lambda-based file management and batch generation
- Step Functions orchestration for multi-step processing workflows
- DynamoDB tables for pipeline state and configuration management
- EventBridge-scheduled triggers for automated pipeline execution
- Athena workgroup for ad-hoc querying of curated data
- CloudTrail audit trail for compliance
Architecture

Deployment
Prerequisites and Predeployment
- Authenticate to your target AWS account and region. Ensure the authenticated role has permissions to deploy resources via CDK.
- Bootstrap CDK in your target account and region.
-
Provision a VPC with at least 2 private subnets (required for DMS replication instances). Subnets must have connectivity to:
- The source database (network path from DMS replication instance to source DB)
- AWS service endpoints, either via NAT Gateway or VPC Endpoints for:
- S3
- Glue
- DynamoDB
- Lambda
- Step Functions
- Secrets Manager
- CloudWatch Logs
-
Prepare the source database:
- Create an AWS Secrets Manager secret containing the source database credentials
- Note the KMS key ARN used to encrypt the secret
Additional info: PREDEPLOYMENT
Configure MDAA
-
Address all TODOs in
mdaa.yaml, specifically:- Set
organizationto a globally unique name - Set
contextvalues:dms-source-db— source relational database namedms-rds-secrets-arn— ARN of the Secrets Manager secret with DB credentialsdms-rds-secrets-kms-arn— ARN of the KMS key encrypting the secretvpc_id— VPC ID with connectivity to the source databasesubnet_id1,subnet_id2— private subnet IDs for DMS instancesfile_processor_event_bridge_trigger_hour— hour for file processor schedulefile_processor_event_bridge_trigger_rate— days between file processing runstransformation_event_bridge_trigger_hour— hour for transformation scheduletransformation_event_bridge_trigger_rate— days between transformation runs
- Update
dataops/dms.yamlif you need to change the DMS instance class for your workload (default:dms.c5.large)
- Set
-
Review and update
dataops/scripts/table_config.jsonwith your source database table definitions. This file is loaded into DynamoDB automatically during deploy (predeploy hook ondms-shared) and controls DMS task table mappings. -
Address all TODOs in module configs, specifically:
- CDK Nag suppressions in
roles.yamlanddataops/roles.yaml. Uncomment each suppression only after reviewing the associated permissions and confirming they are acceptable for your environment.
- CDK Nag suppressions in
Deploy MDAA
Run the following from the starter kit directory (containing mdaa.yaml):
-
Optionally, run
npx @aws-mdaa/cli lsto understand what stacks will be deployed. -
Optionally, run
npx @aws-mdaa/cli synthand review the produced templates. -
Run
npx @aws-mdaa/cli deployto deploy all modules.
Additional info: DEPLOYMENT
Next Steps
See USAGE for post-deployment instructions.
Modules Deployed
| Module | Purpose |
|---|---|
@aws-mdaa/roles |
IAM roles for data lake and dataops personas |
@aws-mdaa/datalake |
KMS keys, S3 buckets, and bucket policies |
@aws-mdaa/lakeformation-settings |
Lake Formation settings (account-level) |
@aws-mdaa/athena-workgroup |
Athena workgroup for querying |
@aws-mdaa/audit |
S3 audit bucket for CloudTrail |
@aws-mdaa/audit-trail |
CloudTrail audit trail |
@aws-mdaa/glue-catalog |
Glue Catalog KMS encryption (account-level) |
@aws-mdaa/dataops-project |
Glue databases with access control |
@aws-mdaa/dataops-dynamodb |
DynamoDB tables for pipeline state |
@aws-mdaa/dataops-job |
Glue ETL jobs |
@aws-mdaa/dataops-lambda |
Lambda functions (file manager, batch generator) |
@aws-mdaa/dataops-stepfunction |
Step Functions workflows |
@aws-mdaa/dataops-dms |
DMS replication instances and tasks |
Troubleshooting
Common Issues
-
Invalid ReplicationInstance class error during DMS deployment:
- The DMS instance class may not be available in your region
- Check available classes:
aws dms describe-orderable-replication-instances --region <region> --query "OrderableReplicationInstances[].ReplicationInstanceClass" --output text - Update
instanceClassindataops/dms.yaml(dms.c5.largeis widely available)
-
DMS source endpoint connection failure:
- Verify the source database allows connections from the DMS VPC/subnets
- Check that the Secrets Manager secret ARN and KMS key ARN are correct
- Ensure the DMS role has permissions to access the secret
-
Step function execution failures:
- Check CloudWatch logs for the specific Lambda or Glue job that failed
- Verify DynamoDB tables are populated (see
dataops/scripts/) - Ensure IAM roles have necessary permissions