Files
acdl/modules/l2/microservice
Jon Chery 361fe600a9 feat(P61): L2 lifecycle pipeline — extend matrix + workflows + tests
Extend the modules-lifecycle pipeline with L2 composition modules
(static-assets, microservice) per REQ-128:

- pipelines/modules-lifecycle.yml: added l2-lifecycle-apply/modify/destroy
  stages + l2_modules matrix entry
- .gitea/workflows/modules-lifecycle.yml + .github/workflows/modules-lifecycle.yml:
  added l2-lifecycle job (byte-identical), matrix over [static-assets,
  microservice], needs ci-vpc-apply, has apply/modify/destroy steps.
  ci-vpc-destroy now needs both [lifecycle, l2-lifecycle].
- schemas/modules-lifecycle-pipeline.schema.json: added l2_modules to matrix
- scripts/run_l2_lifecycle_test.sh + run_l2_lifecycle_destroy.sh: L2 wrappers
  that set ACDL_REMOTE_STATE_KEY=spike/ci-vpc/terraform.tfstate so the
  microservice composition's terraform_remote_state reads from the CI VPC
- adapters/terraform/adapter.py: parameterized remote_state key via
  ACDL_REMOTE_STATE_KEY env var (default: platform/terraform.tfstate)
- modules/l2/static-assets/examples/complex.yml: fixed bucket_name to match
  simple (my-static-site) so terraform modifies in-place (adds CDN + WAF)
- modules/l2/microservice/examples/complex.yml: fixed bucket_name to match
  simple (my-microservice-demo), added desired_count:2 (modify variant)
- tests/test_pipeline_contract.py: 7 new L2 tests (l2 job exists, matrix
  lists both modules, apply/modify/destroy steps, needs ci-vpc-apply,
  ci-vpc-destroy needs both, contract matrix lists l2_modules)
- pipelines/README.md: updated stages for L2

Regression: 485 passed, 5 deselected. Gitea + GitHub workflows byte-identical.

---ci---
project: acdl
phase: P61
milestone: v1.11
status: execute
---/ci---
2026-07-28 20:17:27 +00:00
..

microservice — ECS Fargate microservice

Module kind: module pattern | Version: 1.0.0

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

Resources

The pattern references these primitives:

Primitive 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 module:

environment: dev
id: msvc
infrastructure:
  microservice:
    inputs:
      image: 581513795199.dkr.ecr.us-east-1.amazonaws.com/acdl-microservice:latest
      port: 8080
      region: us-east-1
    version: 1.0.0
name: microservice

Compliance extension points

The pattern can wire compliance resources across primitives when the compliance milestone (GDPR, SOX, SOC2, 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 primitive's README for per-module compliance extension points.

Examples

Validated example contracts are in examples/. The platform-test pipeline validates them against schemas/contract.schema.json.

Simple

A minimal deployment (minimal Fargate, no ALB):

examples/simple.yml

environment: dev
id: msvc
infrastructure:
  microservice:
    inputs:
      bucket_name: my-microservice-demo
      image: public.ecr.aws/docker/library/nginx:latest
      port: 80
      region: us-east-1
    version: 1.0.0
name: microservice

Complex

A production deployment with optional inputs (ALB + env vars + health check):

examples/complex.yml

environment: dev
id: msvc
infrastructure:
  microservice:
    inputs:
      bucket_name: my-production-microservice
      env:
        ENVIRONMENT: production
        LOG_LEVEL: info
      image: public.ecr.aws/docker/library/nginx:latest
      port: 8080
      region: us-east-1
    version: 1.0.0
name: microservice

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.