porc vs astro vs terragrunt - hyperfocus/porc GitHub Wiki
Terraform Orchestration Tool Comparison: PORC vs Terragrunt vs Astro
High-Level Comparison Table
Feature / Dimension | Terragrunt | Astro (Uber) | PORC (TD Bank) |
---|---|---|---|
Type | Open-source CLI wrapper | Open-source Terraform orchestrator | Internal TD-built Terraform orchestrator |
Terraform Execution | Local or via TFE (remote) | Local execution orchestrated centrally | Remote only via TFE API, triggered via PINE/PORC APIs |
Module Source | Remote modules (Git, registry) | Remote modules (via Git + Astro DAG) | Remote pre-approved modules only (no .tf in blueprint repos) |
Inputs & Configuration | HCL (terragrunt.hcl ) |
JSON/JSONNet (declarative + programmable) | JSON (terraform.tfvars.json generated by PORC) |
Dependency Graphing | dependencies block (manual order) |
Full DAG (auto-wired from JSONNet config) | Explicit graph defined in PORC server (dependencies handled via API workflows) |
DRY & Reuse | include , locals , shared HCL patterns |
JSONNet libraries, shared includes | Paved-path templates enforced via PORC templates + variables |
Parallelism / Concurrency | Limited to run-all in folders |
Native DAG-level concurrency | Server-managed (PORC orchestrates DAG across modules with plan/apply APIs) |
State Management | Terragrunt-managed, usually remote backend | Astro-managed | Always remote in TFE, configured by PORC |
Policy Enforcement | Via Terraform Enterprise (Sentinel) | Centralized validation logic in Astro | Sentinel enforced in TFE; runs initiated only through PORC |
Self-service UX | CLI only | CLI + Uber-specific tooling | PINE CLI + GitHub Checks UI + GitHub repo automation |
Change Promotion (envs) | terragrunt.hcl per environment |
Declarative JSONNet configs per env | GitOps-style: blueprint per environment with overlays + APIs |
Platform Governance | Good (shared inputs, locked modules) | Very strong (Uber-defined flows + validation) | Strong (platform-controlled run engine + module enforcement via PORC templates) |
Extensibility / Hooks | Pre/post hooks supported | Controlled via JSONNet + Astro binary | API-first, webhooks, future extensibility planned via policy plugins |
Intended Audience | Teams using Terraform with reuse needs | Uber infra teams managing 1000s of Terraform modules | TD engineering teams consuming pre-approved templates |
Summary by Use Case
Use Case | Terragrunt | Astro (Uber) | PORC (TD Bank) |
---|---|---|---|
DIY IaC reuse | Excellent | Overkill | Not intended |
Paved paths w/ governance | Good | Excellent | Excellent |
Tight control / Remote runs | With TFE | Yes (DAG execution) | Yes (TFE + PORC only) |
Team onboarding simplicity | Medium | Low (high learning curve) | High (PINE + GitHub integration) |
CI/CD and GitHub integration | CLI-based | Custom | Native (GitHub Checks, GitOps) |
Multi-team module enforcement | Good | Excellent | Excellent |
PORC: Pivot or Continue?
Recommendation: Continue building PORC — but enhance the following:
1. Paved Path UX Enhancements
- Add
porc summary
or GitHub PR annotations - Add
pine init app
blueprint scaffolding - Pre-fill GitHub Actions workflows from blueprint metadata
2. Policy Extensibility
- Add optional pre-run hooks (validate schema, restrict dangerous patterns)
- Introduce plugin model for custom policy validation (e.g., OPA-lite)
3. Observability & Feedback
- Provide run summary UI (or GitHub Checks)
- Add DAG visualization and PR result dashboards
4. Developer Experience
- Backstage plugin (optional)
- Better error messages and preflight checks in
pine
5. Governance & Flexibility Balance
- Allow override flags for power users
- Module version pinning with constraints (
ref=~>v1.0
)
When to Consider Terragrunt Instead
Reason to Pivot | PORC Response |
---|---|
Need rapid bootstrap for small teams | PORC setup cost is higher |
Teams should fully own IaC flows | PORC enforces paved paths centrally |
Policy enforcement is not required | PORC adds governance automatically |
GitHub Checks or APIs not important | PORC specializes in these flows |
Why Not Astro
Astro is powerful but:
- High operational complexity (JSONNet, internal Uber infra assumptions)
- Hard to integrate cleanly with GitHub-first workflows
- Doesn’t fit well unless you rebuild your entire control plane
PORC gives you a purpose-built platform layer that bridges Terragrunt’s reuse and Astro’s orchestration — with GitHub-native UX and TFE integration. The investment is worth it.