Skip to main content

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 TypeFile(s)Purpose
CLI Configurationatmos.yamlConfigure the Atmos CLI behavior, paths, and integrations
Stack Configurationstacks/**/*.yamlDefine environments and component configurations
Component Configurationcomponents/Infrastructure code (Terraform, Helmfile, Packer)
Vendor Configurationvendor.yamlDefine 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"

Helmfile Configuration →

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"

Packer Configuration →

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

Learn more about Vendoring →

Configuration Hierarchy​

These configuration types work together in a hierarchy:

  1. CLI Configuration (atmos.yaml) defines where to find everything
  2. Vendor Configuration (vendor.yaml) pulls in external dependencies
  3. Component Configuration (components/) provides the infrastructure code
  4. 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​