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

55 lines
2.1 KiB
Markdown

# 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.