Configuration Overview
Atmos uses multiple types of configuration files, each serving a distinct purpose. Understanding these configuration types is essential for effectively managing your infrastructure.
Configuration Types
Atmos organizes configuration into four main categories:
| Configuration Type | File(s) | Purpose |
|---|---|---|
| CLI Configuration | atmos.yaml | Configure the Atmos CLI behavior, paths, and integrations |
| Stack Configuration | stacks/**/*.yaml | Define environments and component configurations |
| Component Configuration | components/ | Infrastructure code (Terraform, Helmfile, Packer) |
| Vendor Configuration | vendor.yaml | Define external dependencies to vendor |
CLI Configuration
The atmos.yaml file configures the Atmos CLI itself. It tells Atmos where to find your stacks and components, how to behave, and what integrations to enable.
Key settings include:
- Base paths for components, stacks, and workflows
- Terraform/Helmfile command configuration
- Stack naming patterns
- Template and schema settings
- Integrations (Atlantis, Spacelift, GitHub Actions)
# atmos.yaml
base_path: "."
components:
terraform:
base_path: components/terraform
stacks:
base_path: stacks
included_paths:
- "orgs/**/*"
name_pattern: "{tenant}-{environment}-{stage}"
Learn more about CLI Configuration →
Stack Configuration
Stack configuration files define your environments and how components are configured within them. Stacks are YAML files that specify which components to deploy and with what settings.
Key features:
- Component definitions with variables and metadata
- Imports for configuration reuse
- Inheritance between configurations
- Environment-specific overrides
# stacks/prod/us-east-1.yaml
import:
- catalog/vpc/defaults
components:
terraform:
vpc:
vars:
environment: ue1
stage: prod
cidr_block: "10.0.0.0/16"
Learn more about Stack Configuration →
Component Configuration
Components are the infrastructure-as-code implementations that Atmos orchestrates. Each component type has its own configuration within stacks:
Terraform Components
Terraform root modules in components/terraform/. Stack configuration tells Atmos which module to use and what variables to pass.
components:
terraform:
vpc:
metadata:
component: vpc # Points to components/terraform/vpc/
vars:
cidr_block: "10.0.0.0/16"
Terraform Stack Configuration →
Helmfile Components
Helmfile configurations in components/helmfile/. Used for deploying Helm charts to Kubernetes.
components:
helmfile:
nginx-ingress:
vars:
namespace: ingress
chart_version: "4.0.0"
Packer Components
Packer templates in components/packer/. Used for building machine images.
components:
packer:
ubuntu-base:
vars:
ami_name: "ubuntu-base"
instance_type: "t3.medium"
Vendor Configuration
Vendor manifests define external dependencies that Atmos should download and manage. This enables you to use third-party components, modules, and configurations without copying them into your repository.
# vendor.yaml
apiVersion: atmos/v1
kind: AtmosVendorConfig
metadata:
name: my-vendor-config
spec:
sources:
- component: vpc
source: github.com/cloudposse/terraform-aws-components.git//modules/vpc
version: 1.300.0
Configuration Hierarchy
These configuration types work together in a hierarchy:
- CLI Configuration (
atmos.yaml) defines where to find everything - Vendor Configuration (
vendor.yaml) pulls in external dependencies - Component Configuration (
components/) provides the infrastructure code - Stack Configuration (
stacks/) assembles components into deployable environments
atmos.yaml # CLI: Where to find things
├── vendor.yaml # Vendor: External dependencies
├── components/ # Components: Infrastructure code
│ ├── terraform/
│ ├── helmfile/
│ └── packer/
└── stacks/ # Stacks: Environment definitions
├── catalog/ # Reusable configurations
└── orgs/ # Environment-specific stacks
Next Steps
- CLI Configuration — Configure Atmos behavior
- Stack Configuration — Define your environments
- Components — Configure components in stacks
- Vendoring — Manage external dependencies