Files
acdl/modules/l2/microservice/README.md
T
Jon Chery f68f85c9fd
acdl-ci / Lint (push) Successful in 7s
acdl-ci / Test (push) Successful in 15s
acdl-ci / Platform check-only (offline) (push) Successful in 9s
review(v1.5): READY TO SHIP — multi-persona code review
---ci---
project: acdl
phase: 20
milestone: v1.5
status: review
verdict: READY TO SHIP
p0: 1 (fixed — contract path resolution in deploy workflow)
p1: 6 (flagged post-hoc)
---/ci---

Multi-persona review of v1.5 phase 20 (docs + reusable deploy workflow).

P0 (blocking) — AUTO-FIXED:
- C1: scripts/run_platform.sh contract path resolution broken in deploy
  workflow. The reusable workflow invokes run_platform.sh from the consumer
  workspace root with a relative contract path (.acdl/contract.yaml), but
  run_platform.sh does `cd "$ROOT"` (platform repo) early, so the relative
  path resolved against the platform repo and the pipeline could never run.
  Fix (commit 75c2274): capture CALLER_CWD before cd "$ROOT"; resolve
  caller-supplied relative paths against CALLER_CWD; default no-arg contract
  stays relative to ROOT (preserves platform-local CI). Reproduced pre-fix;
  verified post-fix.

P1 (important) — FLAGGED FOR POST-HOC REVIEW (do not block ship):
- C2: ref: v1.4 in the deploy workflow platform checkout — no v1.4 tag exists
  (only v1.4.0 / v1.4.1). Operator must create a floating v1.4 tag or change
  the ref to v1.4.1.
- C3: modules/l2/{static-asset,microservice}/README.md still use @v1 in their
  Usage examples; missed by the v1.4 bump.
- S1: static-key override is not wired. ACDL_AWS_* env vars on the OIDC step
  are not read by aws-actions/configure-aws-credentials@v4 (it reads AWS_*
  or its own access-key/secret-key inputs). The README/CONSUMER_GUIDE claim
  a working override that doesn't function as written. Needs a conditional
  step or renamed env vars + input wiring.
- S2: README overstates ABAC repo:org/repo:ref:... scoping. The workflow
  constructs a numeric role name (github.repository_id); the actual claim
  enforcement lives in the IAM trust policy, not in this workflow.
- T1: no deploy-workflow triggers conformance test (CI workflow has one;
  deploy doesn't). Minor — reusable workflows use workflow_call, not push
  triggers, but the contract's triggers field is then unenforced.
- A1: terraform/spike/terraform.tf uploaded as artifact leaks the AWS account
  ID via the state-backend bucket name. Recommend excluding terraform.tf or
  gating artifact upload to non-public repos.

P2 (nits) — listed for awareness: floating-tag terminology imprecision (M1),
  header comment "Gitea Actions" in the GitHub copy (M2, intentional byte-
  identical), pip install split (P1-perf), comment drift in pipelines/deploy.yaml
  header (C4), module README internal inconsistency (C5).

Verdict: READY TO SHIP. The one P0 is fixed. The 6 P1s are post-hoc items —
the deploy workflow is a scaffold whose first real consumer run requires
operator setup (tag, IAM role, secrets) that gates go-live. The P1s should
be addressed before any consumer invokes uses: acdl/.gitea/workflows/
deploy.yml@v1.4 in earnest.

Tests: 154 pass (19 new). run_ci.sh green.
2026-07-22 17:24:28 +00:00

2.4 KiB

microservice — ECS Fargate microservice

Module kind: L2 composition | Version: 1.0.0

A composition that references multiple L1 primitives to deploy an ECS Fargate microservice end-to-end (VPC, cluster, ECR, IAM role, ALB, ECS service).

Resources

The composition references these L1 primitives:

L1 module Purpose README
vpc VPC, subnets, routing README
ecs-cluster ECS Fargate cluster README
ecr ECR image repository README
iam-role IAM task execution role README
alb Application Load Balancer README
ecs-service ECS task definition + service README

Inputs

Name Type Required Description
image string yes ECR image URL for the task container
port number yes Container port the service listens on
region string yes AWS region
cidr string no VPC CIDR block (default 10.0.0.0/16)
azs string no Comma-separated availability zones

Outputs

Name Type Description
lb_arn arn The load balancer ARN
service_arn arn The ECS service ARN

Usage

Define a contract referencing this composition:

uses: acdl/pipelines/deploy.yaml@v1
module: microservice
environment: dev
inputs:
  image: 581513795199.dkr.ecr.us-east-1.amazonaws.com/acdl-microservice:latest
  port: 8080
  region: us-east-1

Compliance extension points

The composition can wire compliance resources across L1s when the compliance milestone (GDPR, SOX, SOC2, HIPAA, DORA) lands:

  • KMS key — shared encryption key referenced by S3, ECR, CloudWatch Logs, and Secrets Manager.
  • CloudTrail — management-plane audit trail for the entire stack.
  • VPC Flow Logs — network audit trail.
  • Security groups — proper network segmentation between ALB, service, and data tiers.
  • Private subnets — ECS tasks in private subnets with NAT egress.

See each L1 module's README for per-module compliance extension points.

Versioning

1.0.0 — interface MAJOR, behavior MINOR, lifecycle PATCH. MAJOR bumps require a new registry entry (immutable publication); old entries enter a 12-month deprecation window.