Files
atelier/domains/infrastructure-as-code/first-principles.md
T
Jon Chery d1aa5daf2b docs(milestone): complete v0.2 — infrastructure-as-code + kubernetes
---ci---
project: atelier
phase: 5
milestone: v0.2
status: complete
requirements:
  covered: [ATELIER-36, ATELIER-37, ATELIER-38, ATELIER-39, ATELIER-40, ATELIER-41, ATELIER-42, ATELIER-43, ATELIER-44, ATELIER-45, ATELIER-46, ATELIER-47, ATELIER-48, ATELIER-49, ATELIER-50, ATELIER-51, ATELIER-52, ATELIER-53, ATELIER-54, ATELIER-55, ATELIER-56, ATELIER-57, ATELIER-58, ATELIER-59]
  partial: []
---/ci---
2026-08-05 02:20:17 +00:00

2.1 KiB

Infrastructure as Code — First Principles

1. The Principles

P1. Declarative Intent

Describe the desired state, not the steps to reach it. The tool reconciles current → desired. Imperative scripts describe how; declarative config describes what.

P2. Idempotence

Applying the same configuration twice yields the same result. A second apply with no changes is a no-op, not an error. Idempotence is what makes plan trustworthy.

P3. State is Truth

The state file is the authoritative record of what the tool believes exists. Drift between state and reality is a bug to be reconciled, not tolerated. Lose state, lose the ability to reason about infrastructure.

P4. Plan Before Apply

Preview every change before mutating real infrastructure. plan is the contract review; apply is the signature. No apply without a read plan. The plan is the rollback rehearsal.

P5. Version Everything

Configuration, state, providers, and modules are all versioned and reproducible. A commit pins a complete, rebuildable world. Pin providers; pin module sources; never latest.

P6. Modules Compose

Encapsulate repeatable patterns as versioned modules. Compose modules; do not copy them. A module is the unit of reuse, review, and versioning — the IaC expression of composition.

P7. Least Privilege Providers

Provider credentials are scoped to the minimum needed for the declared resources. No account-wide admin keys in CI. One credential per environment, per boundary.

P8. Remote State with Locking

State is stored remotely with locking. Local state is for a single developer on a throwaway sandbox. Concurrent apply without a lock is data corruption waiting to happen.

P9. Drift is Recoverable

plan detects drift; apply reconciles it. Manual mutation of managed infrastructure is an incident, not a shortcut. Drift is expected; unreconciled drift is the bug.

P10. Secrets Never in Code

Secrets come from providers, external secret stores, or environment variables — never hardcoded in HCL, never committed to the repo, never written to state in plaintext. State is a secret-bearing artifact; treat it accordingly.