Files
acdl/modules/l2/microservice/composition.json
T
Jon Chery e1be05287b feat(P39): refresh design docs + parameterize adapter (P1-1)
---ci---
project: acdl
phase: 39
milestone: v1.9
status: execute
---/ci---

Phase 39 — design-doc-refresh-and-p1-1-parameterization:

Design docs (REQ-100, REQ-101):
- hitl_matrix_design.md: 'dev-only spike'/'v1.2 wires the gates' framing
  replaced with v1.9 wired-gates reality; 8-concern matrix marked
  implemented (offline-testable subset + signed evidence artifacts,
  D-084); v1.9 wiring section cross-references hitl_gates.py +
  attestation_matrix.py; approver_dr noted.
- audit_ledger_design.md: outbox marked shipped+production since v1.8;
  S3 Object Lock + JWS + async worker + DLQ + daily checkpoints clearly
  labeled 'Deferred to a future milestone (D-083)'; RPO/RTO table updated;
  approver fields note v1.9 hitl_gates.attest.

P1-1 adapter parameterization (REQ-102, D-085):
- ecs-service interface.json: desired_count (default 1), launch_type
  (FARGATE), family (app) inputs added.
- alb interface.json: load_balancer_type (application), target_type (ip).
- adapter.py: hardcoded defaults replaced with inputs.get(<name>, <default>);
  hardcoded 'acdl-microservice-rt'/'acdl-microservice-igw' Name tags
  derive from the VPC name input.
- contract_resolver.py: child_input_map routes wires to the sub-resource
  that declares the input (desired_count → aws:ecs:service, family →
  aws:ecs:task_definition, target_type → targetgroup, etc.).
- microservice composition.json: wires added for the new inputs.

Tests: +21 (test_p1_1_adapter_parameterization.py, test_design_docs_current.py).
371 passed; run_ci.sh green; run_platform.sh --check-only green; v1.1 S3
regression preserved.
2026-07-23 04:24:25 +00:00

45 lines
2.5 KiB
JSON

{
"name": "microservice",
"version": "1.0.0",
"kind": "l2",
"depth": 1,
"description": "A composition that references six L1 primitives to deploy an ECS Fargate microservice end-to-end.",
"children": [
{"id": "vpc", "module": "vpc@1.0.0"},
{"id": "cluster", "module": "ecs-cluster@1.0.0"},
{"id": "ecr", "module": "ecr@1.0.0"},
{"id": "roles", "module": "iam-role@1.0.0"},
{"id": "alb", "module": "alb@1.0.0"},
{"id": "service", "module": "ecs-service@1.0.0"},
{"id": "kms", "module": "kms-key@1.0.0"}
],
"wires": [
{"from": "contract.inputs.bucket_name", "to": "vpc.inputs.cidr", "default": "10.0.0.0/16"},
{"from": "contract.inputs.name", "to": "vpc.inputs.name", "default": "app"},
{"from": "contract.inputs.name", "to": "alb.inputs.name", "default": "app"},
{"from": "contract.inputs.region", "to": "vpc.inputs.region"},
{"from": "contract.inputs.region", "to": "cluster.inputs.region"},
{"from": "contract.inputs.region", "to": "ecr.inputs.region"},
{"from": "contract.inputs.region", "to": "roles.inputs.region"},
{"from": "contract.inputs.region", "to": "alb.inputs.region"},
{"from": "contract.inputs.region", "to": "service.inputs.region"},
{"from": "vpc.outputs.subnet_ids", "to": "alb.inputs.subnets"},
{"from": "vpc.outputs.subnet_ids", "to": "service.inputs.subnets"},
{"from": "cluster.outputs.cluster_arn", "to": "service.inputs.cluster_arn"},
{"from": "ecr.outputs.repository_url", "to": "service.inputs.image"},
{"from": "roles.outputs.role_arn", "to": "service.inputs.security_group"},
{"from": "alb.outputs.target_group_arn", "to": "service.inputs.lb_target_group_arn"},
{"from": "contract.inputs.region", "to": "kms.inputs.region"},
{"from": "kms.outputs.kms_key_arn", "to": "ecr.inputs.kms_key_arn"},
{"from": "contract.inputs.desired_count", "to": "service.inputs.desired_count", "default": 1},
{"from": "contract.inputs.launch_type", "to": "service.inputs.launch_type", "default": "FARGATE"},
{"from": "contract.inputs.family", "to": "service.inputs.family", "default": "app"},
{"from": "contract.inputs.load_balancer_type", "to": "alb.inputs.load_balancer_type", "default": "application"},
{"from": "contract.inputs.target_type", "to": "alb.inputs.target_type", "default": "ip"}
],
"outputs": [
{"from": "alb.outputs.lb_arn", "to": "stack.outputs.lb_arn"},
{"from": "service.outputs.service_arn", "to": "stack.outputs.service_arn"},
{"from": "kms.outputs.kms_key_arn", "to": "stack.outputs.kms_key_arn"}
]
}