serverless-data-mesh 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. serverless_data_mesh-0.2.0/.gitignore +61 -0
  2. serverless_data_mesh-0.2.0/CHANGELOG.md +81 -0
  3. serverless_data_mesh-0.2.0/LICENSE +17 -0
  4. serverless_data_mesh-0.2.0/PKG-INFO +143 -0
  5. serverless_data_mesh-0.2.0/PYPI.md +92 -0
  6. serverless_data_mesh-0.2.0/README.md +409 -0
  7. serverless_data_mesh-0.2.0/VERSION +1 -0
  8. serverless_data_mesh-0.2.0/benchmarks/README.md +54 -0
  9. serverless_data_mesh-0.2.0/benchmarks/results/2026-06-baseline.json +52 -0
  10. serverless_data_mesh-0.2.0/benchmarks/run_benchmark.sh +21 -0
  11. serverless_data_mesh-0.2.0/benchmarks/run_cost_estimate.py +135 -0
  12. serverless_data_mesh-0.2.0/benchmarks/workloads/100k_rows.py +7 -0
  13. serverless_data_mesh-0.2.0/benchmarks/workloads/10m_rows.py +7 -0
  14. serverless_data_mesh-0.2.0/benchmarks/workloads/1m_rows.py +7 -0
  15. serverless_data_mesh-0.2.0/docs/architecture.md +149 -0
  16. serverless_data_mesh-0.2.0/docs/blog-the-vaquar-pattern.md +676 -0
  17. serverless_data_mesh-0.2.0/docs/data-mesh-end-to-end.md +595 -0
  18. serverless_data_mesh-0.2.0/docs/data-mesh-patterns.md +423 -0
  19. serverless_data_mesh-0.2.0/docs/deployment.md +42 -0
  20. serverless_data_mesh-0.2.0/docs/domain-contracts.md +47 -0
  21. serverless_data_mesh-0.2.0/docs/getting-started.md +529 -0
  22. serverless_data_mesh-0.2.0/docs/glue-connector.md +389 -0
  23. serverless_data_mesh-0.2.0/docs/images/lambda-execution-flow.png +0 -0
  24. serverless_data_mesh-0.2.0/docs/images/serverless-data-mesh-hero.png +0 -0
  25. serverless_data_mesh-0.2.0/docs/images/three-account-data-mesh.png +0 -0
  26. serverless_data_mesh-0.2.0/docs/images/vaquar-pattern-blog-hero.png +0 -0
  27. serverless_data_mesh-0.2.0/docs/images/vaquar-pattern-e2e-journey.png +0 -0
  28. serverless_data_mesh-0.2.0/docs/images/vaquar-pattern-invariant.png +0 -0
  29. serverless_data_mesh-0.2.0/docs/images/why-sdm-four-phase-connectivity.png +0 -0
  30. serverless_data_mesh-0.2.0/docs/images/why-sdm-hero-connectivity.png +0 -0
  31. serverless_data_mesh-0.2.0/docs/images/why-sdm-trust-gap.png +0 -0
  32. serverless_data_mesh-0.2.0/docs/mesh-trust-dashboard.md +71 -0
  33. serverless_data_mesh-0.2.0/docs/pypi.md +135 -0
  34. serverless_data_mesh-0.2.0/docs/sparkrules-connector.md +194 -0
  35. serverless_data_mesh-0.2.0/docs/terraform-guide.md +283 -0
  36. serverless_data_mesh-0.2.0/docs/vaquar-pattern.md +319 -0
  37. serverless_data_mesh-0.2.0/docs/why-serverless-data-mesh.md +736 -0
  38. serverless_data_mesh-0.2.0/examples/__init__.py +0 -0
  39. serverless_data_mesh-0.2.0/examples/domain_writer/README.md +62 -0
  40. serverless_data_mesh-0.2.0/examples/domain_writer/__init__.py +0 -0
  41. serverless_data_mesh-0.2.0/examples/domain_writer/handler.py +63 -0
  42. serverless_data_mesh-0.2.0/examples/domain_writer/io.py +33 -0
  43. serverless_data_mesh-0.2.0/examples/domain_writer/rules_io.py +34 -0
  44. serverless_data_mesh-0.2.0/examples/domain_writer/spark_io.py +49 -0
  45. serverless_data_mesh-0.2.0/examples/domain_writer/workload.py +37 -0
  46. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/README.md +42 -0
  47. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/coordinator_config.yaml +24 -0
  48. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/orders/handler.py +22 -0
  49. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/domains/payments/handler.py +22 -0
  50. serverless_data_mesh-0.2.0/examples/multi-domain-orders-payments/test_atomicity.py +81 -0
  51. serverless_data_mesh-0.2.0/examples/tutorials/README.md +39 -0
  52. serverless_data_mesh-0.2.0/examples/tutorials/verification_gate_demo.py +59 -0
  53. serverless_data_mesh-0.2.0/examples/tutorials/walkthrough.py +296 -0
  54. serverless_data_mesh-0.2.0/infrastructure/grafana/mesh-trust-dashboard.json +104 -0
  55. serverless_data_mesh-0.2.0/infrastructure/sam/README.md +25 -0
  56. serverless_data_mesh-0.2.0/infrastructure/sam/template.yaml +84 -0
  57. serverless_data_mesh-0.2.0/infrastructure/terraform/README.md +191 -0
  58. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/dev/main.tf +160 -0
  59. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/dev/terraform.tfvars.example +10 -0
  60. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/README.md +47 -0
  61. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/producer/main.tf +137 -0
  62. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/producer/terraform.tfvars.example +17 -0
  63. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/publisher/main.tf +70 -0
  64. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/publisher/terraform.tfvars.example +4 -0
  65. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/steward/main.tf +104 -0
  66. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/multi-account/steward/terraform.tfvars.example +5 -0
  67. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod/main.tf +124 -0
  68. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod/outputs.tf +61 -0
  69. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod/providers.tf +13 -0
  70. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod/terraform.tfvars.example +34 -0
  71. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod/variables.tf +146 -0
  72. serverless_data_mesh-0.2.0/infrastructure/terraform/environments/prod/versions.tf +20 -0
  73. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/eventbridge/main.tf +46 -0
  74. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/eventbridge/outputs.tf +3 -0
  75. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/eventbridge/variables.tf +33 -0
  76. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/eventbridge/versions.tf +9 -0
  77. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/governance/main.tf +98 -0
  78. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/governance/versions.tf +9 -0
  79. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/iam/main.tf +137 -0
  80. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/iam/outputs.tf +11 -0
  81. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/iam/variables.tf +33 -0
  82. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/iam/versions.tf +9 -0
  83. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/lambda/main.tf +64 -0
  84. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/lambda/outputs.tf +30 -0
  85. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/lambda/variables.tf +89 -0
  86. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/lambda/versions.tf +9 -0
  87. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/messaging/main.tf +6 -0
  88. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/messaging/outputs.tf +7 -0
  89. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/messaging/variables.tf +8 -0
  90. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/messaging/versions.tf +9 -0
  91. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/monitoring/dashboard.tf +151 -0
  92. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/monitoring/main.tf +87 -0
  93. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/monitoring/outputs.tf +19 -0
  94. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/monitoring/variables.tf +34 -0
  95. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/monitoring/versions.tf +9 -0
  96. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/stepfunctions/main.tf +31 -0
  97. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/stepfunctions/outputs.tf +7 -0
  98. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/stepfunctions/state_machine.asl.json.tpl +115 -0
  99. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/stepfunctions/variables.tf +47 -0
  100. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/stepfunctions/versions.tf +9 -0
  101. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/storage/main.tf +83 -0
  102. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/storage/outputs.tf +23 -0
  103. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/storage/variables.tf +46 -0
  104. serverless_data_mesh-0.2.0/infrastructure/terraform/modules/storage/versions.tf +9 -0
  105. serverless_data_mesh-0.2.0/infrastructure/terraform/scripts/package_lambda.ps1 +31 -0
  106. serverless_data_mesh-0.2.0/infrastructure/terraform/scripts/package_lambda.sh +42 -0
  107. serverless_data_mesh-0.2.0/pyproject.toml +134 -0
  108. serverless_data_mesh-0.2.0/src/serverless_data_mesh/__init__.py +93 -0
  109. serverless_data_mesh-0.2.0/src/serverless_data_mesh/catalog/__init__.py +6 -0
  110. serverless_data_mesh-0.2.0/src/serverless_data_mesh/catalog/glue_connector.py +17 -0
  111. serverless_data_mesh-0.2.0/src/serverless_data_mesh/catalog/glue_rest.py +134 -0
  112. serverless_data_mesh-0.2.0/src/serverless_data_mesh/cli.py +165 -0
  113. serverless_data_mesh-0.2.0/src/serverless_data_mesh/config.py +42 -0
  114. serverless_data_mesh-0.2.0/src/serverless_data_mesh/dashboard/__init__.py +5 -0
  115. serverless_data_mesh-0.2.0/src/serverless_data_mesh/dashboard/cloudwatch.py +80 -0
  116. serverless_data_mesh-0.2.0/src/serverless_data_mesh/dashboard/trust.py +162 -0
  117. serverless_data_mesh-0.2.0/src/serverless_data_mesh/exceptions.py +23 -0
  118. serverless_data_mesh-0.2.0/src/serverless_data_mesh/governance/__init__.py +9 -0
  119. serverless_data_mesh-0.2.0/src/serverless_data_mesh/governance/consumer_sla.py +109 -0
  120. serverless_data_mesh-0.2.0/src/serverless_data_mesh/lineage/__init__.py +5 -0
  121. serverless_data_mesh-0.2.0/src/serverless_data_mesh/lineage/openlineage.py +96 -0
  122. serverless_data_mesh-0.2.0/src/serverless_data_mesh/local/__init__.py +5 -0
  123. serverless_data_mesh-0.2.0/src/serverless_data_mesh/local/runtime.py +380 -0
  124. serverless_data_mesh-0.2.0/src/serverless_data_mesh/metrics/__init__.py +5 -0
  125. serverless_data_mesh-0.2.0/src/serverless_data_mesh/metrics/mesh_trust.py +56 -0
  126. serverless_data_mesh-0.2.0/src/serverless_data_mesh/orchestration/__init__.py +28 -0
  127. serverless_data_mesh-0.2.0/src/serverless_data_mesh/orchestration/canary.py +127 -0
  128. serverless_data_mesh-0.2.0/src/serverless_data_mesh/orchestration/coordinator.py +265 -0
  129. serverless_data_mesh-0.2.0/src/serverless_data_mesh/orchestration/durable_steps.py +74 -0
  130. serverless_data_mesh-0.2.0/src/serverless_data_mesh/orchestration/reprocess.py +143 -0
  131. serverless_data_mesh-0.2.0/src/serverless_data_mesh/orchestration/state.py +16 -0
  132. serverless_data_mesh-0.2.0/src/serverless_data_mesh/py.typed +0 -0
  133. serverless_data_mesh-0.2.0/src/serverless_data_mesh/rules/__init__.py +8 -0
  134. serverless_data_mesh-0.2.0/src/serverless_data_mesh/rules/sparkrules_connector.py +193 -0
  135. serverless_data_mesh-0.2.0/src/serverless_data_mesh/scaffold/__init__.py +5 -0
  136. serverless_data_mesh-0.2.0/src/serverless_data_mesh/scaffold/init_domain.py +210 -0
  137. serverless_data_mesh-0.2.0/src/serverless_data_mesh/types/__init__.py +21 -0
  138. serverless_data_mesh-0.2.0/src/serverless_data_mesh/types/workload.py +123 -0
  139. serverless_data_mesh-0.2.0/src/serverless_data_mesh/verification/__init__.py +21 -0
  140. serverless_data_mesh-0.2.0/src/serverless_data_mesh/verification/backend.py +41 -0
  141. serverless_data_mesh-0.2.0/src/serverless_data_mesh/verification/fallback.py +200 -0
  142. serverless_data_mesh-0.2.0/src/serverless_data_mesh/verification/vrp.py +202 -0
  143. serverless_data_mesh-0.2.0/tests/__init__.py +0 -0
  144. serverless_data_mesh-0.2.0/tests/conftest.py +30 -0
  145. serverless_data_mesh-0.2.0/tests/eval/test_consumer_safety.py +27 -0
  146. serverless_data_mesh-0.2.0/tests/unit/__init__.py +0 -0
  147. serverless_data_mesh-0.2.0/tests/unit/test_auto_repair_demo.py +12 -0
  148. serverless_data_mesh-0.2.0/tests/unit/test_canary.py +46 -0
  149. serverless_data_mesh-0.2.0/tests/unit/test_catalog.py +73 -0
  150. serverless_data_mesh-0.2.0/tests/unit/test_cli_scaffold.py +31 -0
  151. serverless_data_mesh-0.2.0/tests/unit/test_config.py +22 -0
  152. serverless_data_mesh-0.2.0/tests/unit/test_consumer_sla.py +80 -0
  153. serverless_data_mesh-0.2.0/tests/unit/test_example_workload.py +36 -0
  154. serverless_data_mesh-0.2.0/tests/unit/test_fallback_verifier.py +73 -0
  155. serverless_data_mesh-0.2.0/tests/unit/test_local_runtime.py +36 -0
  156. serverless_data_mesh-0.2.0/tests/unit/test_openlineage.py +44 -0
  157. serverless_data_mesh-0.2.0/tests/unit/test_reprocess.py +64 -0
  158. serverless_data_mesh-0.2.0/tests/unit/test_sparkrules_connector.py +43 -0
  159. serverless_data_mesh-0.2.0/tests/unit/test_types.py +38 -0
  160. serverless_data_mesh-0.2.0/tests/unit/test_verification.py +56 -0
@@ -0,0 +1,61 @@
1
+ # Byte-compiled / cache
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+
8
+ # Virtual environments
9
+ .venv/
10
+ venv/
11
+ env/
12
+
13
+ # Packaging
14
+ dist/
15
+ build/
16
+ *.egg-info/
17
+ .eggs/
18
+ *.whl
19
+
20
+ # Test / coverage
21
+ .pytest_cache/
22
+ .coverage
23
+ htmlcov/
24
+ .mypy_cache/
25
+ .ruff_cache/
26
+
27
+ # IDE / editor
28
+ .idea/
29
+ .vscode/
30
+ .cursor/
31
+ *.swp
32
+
33
+ # AWS SAM
34
+ .aws-sam/
35
+ samconfig.toml
36
+
37
+ # Terraform
38
+ infrastructure/terraform/build/*
39
+ !infrastructure/terraform/build/.gitkeep
40
+ .terraform/
41
+ *.tfplan
42
+ *.tfstate
43
+ *.tfstate.*
44
+ .terraform.lock.hcl
45
+ terraform.tfvars
46
+ **/terraform.tfvars
47
+ !**/terraform.tfvars.example
48
+
49
+ # OS
50
+ .DS_Store
51
+ Thumbs.db
52
+
53
+ # Secrets / keys
54
+ .env
55
+ .env.*
56
+ *.pem
57
+ VRP_SIGNING_KEY*
58
+
59
+ # Local scratch / agent artifacts
60
+ tests/_scratch_*
61
+ agent-transcripts/
@@ -0,0 +1,81 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [0.2.0] - 2026-06-15
6
+
7
+ ### Added
8
+
9
+ - **Auto VRP reprocessing** (`orchestration/reprocess.py`): detect drops, repair sink, re-proof, commit or escalate
10
+ - **Consumer SLA enforcement** (`governance/consumer_sla.py`): freshness, completeness, required columns; LF grant hook
11
+ - **Live CloudWatch trust dashboard** (Terraform `monitoring/dashboard.tf` + `publish_vrp_metric`)
12
+ - **Grafana template** (`infrastructure/grafana/mesh-trust-dashboard.json`)
13
+ - **Lake Formation governance module** (`terraform/modules/governance/`)
14
+ - CLI: `serverless-data-mesh canary`, `reprocess-demo`, `dashboard --cloudwatch`
15
+ - Scaffold: `consumer_sla.yaml`, `step_function.asl.json`, richer handler imports
16
+ - Docs: `docs/mesh-trust-dashboard.md`
17
+ - Tests: reprocess, consumer SLA, canary, auto-repair demo
18
+
19
+ ### Changed
20
+
21
+ - `IceGuardDurableCoordinator` supports optional `sink_reader` + `enable_auto_repair`
22
+ - Trust dashboard supports proofs scan, CloudWatch live mode, and demo fallback
23
+
24
+ ## [0.1.3] - 2026-06-15
25
+
26
+ ### Added
27
+
28
+ - **Pure-Python fallback verifier** when veridata-recon wheels unavailable (Windows/Mac demo works)
29
+ - `serverless-data-mesh init` domain scaffold CLI
30
+ - `serverless-data-mesh dashboard` mesh trust dashboard HTML
31
+ - `benchmarks/run_cost_estimate.py` with published cost estimates (100K/1M/10M)
32
+ - `ConsumerSLAContract` type and `run_canary_comparison` for progressive delivery
33
+ - Tests: fallback verifier, scaffold, dashboard
34
+
35
+ ### Changed
36
+
37
+ - Local demo, gate demo, multi-domain, and benchmark use `create_proof_generator()` auto-backend
38
+ - `benchmarks/results/2026-06-baseline.json` populated (pricing model estimated)
39
+
40
+ ## [0.1.2] - 2026-06-15
41
+
42
+ ### Added
43
+
44
+ - **Local demo**: `serverless-data-mesh demo` runs PVDM in <60s without AWS (`LocalPVDMRuntime`)
45
+ - `examples/tutorials/verification_gate_demo.py`: corrupt data blocked before consumers
46
+ - `examples/multi-domain-orders-payments/`: deferred mesh leader commit + `test_atomicity.py`
47
+ - `benchmarks/`: cost comparison methodology, workloads (100k/1M/10M), results placeholder
48
+ - `serverless_data_mesh.lineage`: OpenLineage `emit_openlineage_event` on commit
49
+ - Tests: `test_local_runtime.py`, `test_openlineage.py`
50
+
51
+ ## [0.1.1] - 2026-06-15
52
+
53
+ ### Added
54
+
55
+ - **Vaquar Pattern** (`docs/vaquar-pattern.md`): proof-gated serverless lakehouse publication (PVDM)
56
+ - Blog-style [why-serverless-data-mesh.md](docs/why-serverless-data-mesh.md) with connectivity diagrams
57
+ - New diagram assets: `why-sdm-hero-connectivity.png`, `why-sdm-four-phase-connectivity.png`, `why-sdm-trust-gap.png`
58
+
59
+ ### Fixed
60
+
61
+ - Hatch `VERSION` parsing: `pattern` for plain semver file (CI build green)
62
+ - `__version__` reads from package metadata when installed; dev fallback uses `parents[2]`
63
+ - Multi-account Terraform: Steward creates only checkpoint/proof buckets; Publisher creates only lakehouse
64
+ - Storage module: optional per-bucket creation via nullable bucket names
65
+
66
+ ### Changed
67
+
68
+ - Pattern catalog: Vaquar Pattern as flagship pattern #0 in [data-mesh-patterns.md](docs/data-mesh-patterns.md)
69
+
70
+ ## [0.1.0] - 2026-06-14
71
+
72
+ ### Added
73
+
74
+ - Initial release: IceGuard + Durable Execution + veridata-recon + Glue REST
75
+ - `IceGuardDurableCoordinator` for cross-domain transaction boundaries
76
+ - `GlueRestCatalogAdapter` for SigV4 Iceberg metadata commits
77
+ - `VRPProofGenerator` and `validate_then_commit` hooks
78
+ - Domain writer Lambda example with SAM template
79
+ - `VERSION` file, pre-commit, Dependabot, SECURITY.md, consumer safety benchmark
80
+ - `SparkRulesConnector` (`[rules]` extra), PyPI publish workflow
81
+ - CI workflow, unit tests, and documentation
@@ -0,0 +1,17 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Copyright 2026 Serverless Data Mesh Contributors
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
@@ -0,0 +1,143 @@
1
+ Metadata-Version: 2.4
2
+ Name: serverless-data-mesh
3
+ Version: 0.2.0
4
+ Summary: Federated data mesh framework for proof-gated, exactly-once Iceberg data product publication on AWS Lambda.
5
+ Project-URL: Homepage, https://github.com/vaquarkhan/aws-serverless-datamesh-framework
6
+ Project-URL: Documentation, https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme
7
+ Project-URL: Repository, https://github.com/vaquarkhan/aws-serverless-datamesh-framework
8
+ Project-URL: Changelog, https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/CHANGELOG.md
9
+ Project-URL: PyPI, https://pypi.org/project/serverless-data-mesh/
10
+ Author: Serverless Data Mesh Contributors
11
+ License-Expression: Apache-2.0
12
+ License-File: LICENSE
13
+ Keywords: aws,data-as-a-product,data-mesh,domain-oriented,durable-execution,federated-data-mesh,federated-governance,iceberg,iceguard,lakehouse,lambda,pyiceberg,rule-engine,serverless,sparkrules,vaquar-pattern,veridata-recon
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: Apache Software License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Database
22
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
23
+ Classifier: Topic :: System :: Distributed Computing
24
+ Classifier: Typing :: Typed
25
+ Requires-Python: >=3.12
26
+ Requires-Dist: aws-durable-execution-sdk-python>=1.0.0
27
+ Requires-Dist: boto3>=1.34
28
+ Requires-Dist: iceguard>=1.0.0
29
+ Requires-Dist: pyiceberg[glue,rest-sigv4]>=0.7.0
30
+ Requires-Dist: veridata-recon>=0.1.0
31
+ Provides-Extra: all
32
+ Requires-Dist: pyspark>=3.5.0; extra == 'all'
33
+ Requires-Dist: sparkrules>=1.2.0; extra == 'all'
34
+ Provides-Extra: dev
35
+ Requires-Dist: build>=1.2; extra == 'dev'
36
+ Requires-Dist: mypy>=1.8; extra == 'dev'
37
+ Requires-Dist: pre-commit>=4; extra == 'dev'
38
+ Requires-Dist: pytest-cov>=5; extra == 'dev'
39
+ Requires-Dist: pytest>=8; extra == 'dev'
40
+ Requires-Dist: ruff>=0.4; extra == 'dev'
41
+ Requires-Dist: twine>=5; extra == 'dev'
42
+ Provides-Extra: publish
43
+ Requires-Dist: build>=1.2; extra == 'publish'
44
+ Requires-Dist: twine>=5; extra == 'publish'
45
+ Provides-Extra: rules
46
+ Requires-Dist: sparkrules>=1.2.0; extra == 'rules'
47
+ Provides-Extra: spark
48
+ Requires-Dist: pyspark>=3.5.0; extra == 'spark'
49
+ Requires-Dist: sparkrules>=1.2.0; extra == 'spark'
50
+ Description-Content-Type: text/markdown
51
+
52
+ # Serverless Data Mesh
53
+
54
+ **Federated data mesh lakehouse publication on AWS Lambda - with cryptographic proof, not just green job logs.**
55
+
56
+ An open Python framework for **domain-oriented**, **federated data mesh** teams on AWS. Implements **data as a product**, **self-serve write infrastructure**, and **federated computational governance** at the Iceberg lakehouse layer.
57
+
58
+ - **Producer** domains publish governed **data products**
59
+ - **Steward** notaries enforce mesh contracts with VRP proofs
60
+ - **Publisher** zones expose consumer-ready **Iceberg data products**
61
+
62
+ Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)** (PVDM): Physical → Verify → Durable → Metadata. Invariant: `commit_metadata ⟹ VRP = PASS`.
63
+
64
+ ## Install
65
+
66
+ ```bash
67
+ pip install serverless-data-mesh
68
+ serverless-data-mesh demo # <60s local PVDM demo, no AWS
69
+ pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
70
+ pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
71
+ pip install "serverless-data-mesh[all]" # rules + spark
72
+ pip install "serverless-data-mesh[dev]" # pytest, ruff, pre-commit
73
+ ```
74
+
75
+ **Works on **Windows, Mac, and Linux**. Uses veridata-recon cryptographic VRP when wheels are available; **pure-Python fallback** otherwise (same PASS/FAIL gate).**
76
+
77
+ ## What it solves
78
+
79
+ | Problem | Answer |
80
+ |---------|--------|
81
+ | Silent data loss on backfill | VRP `FAIL` blocks Iceberg snapshot |
82
+ | "Job succeeded" is not proof | Cryptographic multiset proof per chunk |
83
+ | Lambda 15-minute limit | Durable Execution + Step Functions (90+ min) |
84
+ | Retry duplicates data | IceGuard rollback + `workload_id` checkpoints |
85
+ | Central ETL bottleneck | Per-domain Lambda writer + transaction boundary |
86
+ | Federated blast radius | Producer · Steward · Publisher accounts |
87
+
88
+ ## Building blocks
89
+
90
+ | Package | Role |
91
+ |---------|------|
92
+ | [iceguard](https://pypi.org/project/iceguard/) | Physical SafeWriter, timeout rollback, S3 resume |
93
+ | [veridata-recon](https://pypi.org/project/veridata-recon/) | VRP proof generation and validation |
94
+ | [aws-durable-execution-sdk-python](https://pypi.org/project/aws-durable-execution-sdk-python/) | Cross-invocation step replay |
95
+ | [pyiceberg](https://pypi.org/project/pyiceberg/) | Glue Iceberg REST metadata via `GlueCatalogConnector` |
96
+ | [sparkrules](https://pypi.org/project/sparkrules/) | Optional DRL business rules (`[rules]` extra) |
97
+
98
+ ## Quick example
99
+
100
+ ```python
101
+ from serverless_data_mesh import (
102
+ IceGuardDurableCoordinator,
103
+ DomainTransactionBoundary,
104
+ VRPProofGenerator,
105
+ )
106
+
107
+ boundary = DomainTransactionBoundary(
108
+ domain_id="orders-domain",
109
+ source_namespace="raw_orders",
110
+ target_table="orders_curated",
111
+ partition_spec={"dt": "2026-06-14"},
112
+ )
113
+
114
+ coordinator = IceGuardDurableCoordinator(
115
+ durable_context=durable_ctx,
116
+ lambda_context=lambda_ctx,
117
+ proof_generator=VRPProofGenerator(),
118
+ catalog_adapter=glue_adapter,
119
+ )
120
+ outcome = coordinator.run_workload(workload)
121
+ ```
122
+
123
+ ## Optional extras
124
+
125
+ | Extra | Adds |
126
+ |-------|------|
127
+ | `rules` | SparkRules DRL on Lambda |
128
+ | `spark` | PySpark + SparkRules |
129
+ | `all` | `rules` + `spark` |
130
+ | `dev` | pytest, ruff, mypy, pre-commit |
131
+ | `publish` | build, twine |
132
+
133
+ ## Documentation
134
+
135
+ - [GitHub README](https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme)
136
+ - [Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)
137
+ - [Getting started](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/getting-started.md)
138
+ - [PyPI guide](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/pypi.md)
139
+ - [Full documentation](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/tree/main/docs)
140
+
141
+ ## License
142
+
143
+ Apache-2.0
@@ -0,0 +1,92 @@
1
+ # Serverless Data Mesh
2
+
3
+ **Federated data mesh lakehouse publication on AWS Lambda - with cryptographic proof, not just green job logs.**
4
+
5
+ An open Python framework for **domain-oriented**, **federated data mesh** teams on AWS. Implements **data as a product**, **self-serve write infrastructure**, and **federated computational governance** at the Iceberg lakehouse layer.
6
+
7
+ - **Producer** domains publish governed **data products**
8
+ - **Steward** notaries enforce mesh contracts with VRP proofs
9
+ - **Publisher** zones expose consumer-ready **Iceberg data products**
10
+
11
+ Introduces the **[Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)** (PVDM): Physical → Verify → Durable → Metadata. Invariant: `commit_metadata ⟹ VRP = PASS`.
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ pip install serverless-data-mesh
17
+ serverless-data-mesh demo # <60s local PVDM demo, no AWS
18
+ pip install "serverless-data-mesh[rules]" # + SparkRules on Lambda
19
+ pip install "serverless-data-mesh[spark]" # + PySpark + SparkRules
20
+ pip install "serverless-data-mesh[all]" # rules + spark
21
+ pip install "serverless-data-mesh[dev]" # pytest, ruff, pre-commit
22
+ ```
23
+
24
+ **Works on **Windows, Mac, and Linux**. Uses veridata-recon cryptographic VRP when wheels are available; **pure-Python fallback** otherwise (same PASS/FAIL gate).**
25
+
26
+ ## What it solves
27
+
28
+ | Problem | Answer |
29
+ |---------|--------|
30
+ | Silent data loss on backfill | VRP `FAIL` blocks Iceberg snapshot |
31
+ | "Job succeeded" is not proof | Cryptographic multiset proof per chunk |
32
+ | Lambda 15-minute limit | Durable Execution + Step Functions (90+ min) |
33
+ | Retry duplicates data | IceGuard rollback + `workload_id` checkpoints |
34
+ | Central ETL bottleneck | Per-domain Lambda writer + transaction boundary |
35
+ | Federated blast radius | Producer · Steward · Publisher accounts |
36
+
37
+ ## Building blocks
38
+
39
+ | Package | Role |
40
+ |---------|------|
41
+ | [iceguard](https://pypi.org/project/iceguard/) | Physical SafeWriter, timeout rollback, S3 resume |
42
+ | [veridata-recon](https://pypi.org/project/veridata-recon/) | VRP proof generation and validation |
43
+ | [aws-durable-execution-sdk-python](https://pypi.org/project/aws-durable-execution-sdk-python/) | Cross-invocation step replay |
44
+ | [pyiceberg](https://pypi.org/project/pyiceberg/) | Glue Iceberg REST metadata via `GlueCatalogConnector` |
45
+ | [sparkrules](https://pypi.org/project/sparkrules/) | Optional DRL business rules (`[rules]` extra) |
46
+
47
+ ## Quick example
48
+
49
+ ```python
50
+ from serverless_data_mesh import (
51
+ IceGuardDurableCoordinator,
52
+ DomainTransactionBoundary,
53
+ VRPProofGenerator,
54
+ )
55
+
56
+ boundary = DomainTransactionBoundary(
57
+ domain_id="orders-domain",
58
+ source_namespace="raw_orders",
59
+ target_table="orders_curated",
60
+ partition_spec={"dt": "2026-06-14"},
61
+ )
62
+
63
+ coordinator = IceGuardDurableCoordinator(
64
+ durable_context=durable_ctx,
65
+ lambda_context=lambda_ctx,
66
+ proof_generator=VRPProofGenerator(),
67
+ catalog_adapter=glue_adapter,
68
+ )
69
+ outcome = coordinator.run_workload(workload)
70
+ ```
71
+
72
+ ## Optional extras
73
+
74
+ | Extra | Adds |
75
+ |-------|------|
76
+ | `rules` | SparkRules DRL on Lambda |
77
+ | `spark` | PySpark + SparkRules |
78
+ | `all` | `rules` + `spark` |
79
+ | `dev` | pytest, ruff, mypy, pre-commit |
80
+ | `publish` | build, twine |
81
+
82
+ ## Documentation
83
+
84
+ - [GitHub README](https://github.com/vaquarkhan/aws-serverless-datamesh-framework#readme)
85
+ - [Vaquar Pattern](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/vaquar-pattern.md)
86
+ - [Getting started](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/getting-started.md)
87
+ - [PyPI guide](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/blob/main/docs/pypi.md)
88
+ - [Full documentation](https://github.com/vaquarkhan/aws-serverless-datamesh-framework/tree/main/docs)
89
+
90
+ ## License
91
+
92
+ Apache-2.0