Validate Configurations
Before you deploy, you'll catch mistakes early. Atmos validates two things: that your stack manifests are well-formed (against a schema it ships with), and that your component configuration obeys rules you define — with JSON Schema for shape and OPA policies for business logic.
By the end of this step you'll lint every stack with one command and block an invalid s3-bucket from ever being provisioned.
Validate stack manifests
Atmos ships the manifest JSON Schema embedded, so linting every stack is a single command with nothing to configure:
atmos validate stacks
This checks that your manifests use valid sections and types. It's the fastest way to catch a typo'd key or a malformed import before it reaches Terraform.
Older guides had you copy a atmos-manifest.json into the repo and point schemas.atmos.manifest (or ATMOS_SCHEMAS_ATMOS_MANIFEST) at it. That's no longer needed — Atmos validates against its built-in schema by default. You only configure schemas when you bring your own component schemas, below.
Validate component configuration
Beyond well-formed manifests, you can enforce rules on a component's actual configuration. Tell Atmos where your schemas live by adding a schemas section to atmos.yaml:
Then wire validation into a component's settings.validation. Here s3-bucket is checked by both a JSON Schema (shape) and an OPA policy (business rules):
JSON Schema — validate shape
The JSON Schema checks the shape of the variables: the bucket name must be a lowercase slug of 2–40 characters, and versioning_enabled must be a boolean.
OPA — enforce business rules
The OPA policy encodes rules that span variables — most importantly, in prod, S3 buckets must have versioning enabled. Atmos reads the policy's errors array; any message there fails validation and the component won't provision.
Validate a single component in a stack:
atmos validate component s3-bucket -s plat-ue2-prod
The same s3-bucket config passes in dev and fails in prod if versioning is off — because the OPA policy reads input.vars.stage. Validation runs against the fully resolved component config, so policies can reason about the real, merged values. See Custom Policy Validation for more.
Next: everything's in place — bring the whole backend up → Deploy Everything →