atmos terraform source
Use these commands to manage Terraform component sources with just-in-time (JIT) vendoring. This enables components to declare their source location inline using the top-level source field without requiring a separate component.yaml file. Sources are automatically provisioned when running terraform commandsβjust run atmos terraform plan and the source is downloaded on first use.
Source-Based Version Pinning
Learn how to use the source field for native per-environment version control directly in stack configuration.
Usageβ
atmos terraform source <subcommand> [options]
Subcommandsβ
ποΈ source delete
Remove vendored source directory
ποΈ source describe
Show source configuration for a component
ποΈ source list
List components with source in a stack
ποΈ source pull
Vendor component source from source configuration
Automatic Provisioningβ
Sources are automatically provisioned when running any terraform command. If a component has source configured and the target directory doesn't exist, Atmos downloads the source before running terraform:
# Source is automatically provisioned on first use
atmos terraform plan vpc --stack dev
# β Auto-provisioning source for component 'vpc'
# β Auto-provisioned source to components/terraform/vpc
# β Terraform runs
This means you can simply configure your component's source and run terraformβno explicit vendor step needed.
CLI Commandsβ
The explicit CLI commands are useful for fine-grained control:
- Force re-vendor to get the latest version
- Describe source configuration
- Delete vendored sources
- List components with sources
How It Worksβ
The source provisioner enables just-in-time vendoring of Terraform components directly from stack configuration. Instead of pre-vendoring components or maintaining separate component.yaml files, you can declare the source inline:
# stacks/dev.yaml
components:
terraform:
vpc:
source:
uri: github.com/cloudposse/terraform-aws-components//modules/vpc
version: 1.450.0
included_paths:
- "*.tf"
- "modules/**"
excluded_paths:
- "*.md"
- "tests/**"
vars:
cidr_block: "10.0.0.0/16"
When you run atmos terraform source pull vpc --stack dev, Atmos:
- Reads Configuration - Extracts
sourcefrom the component's stack manifest. - Resolves Source - Parses the go-getter-compatible URI with optional version.
- Downloads Content - Fetches the source using go-getter (supports git, s3, http, oci, etc.).
- Filters Files - Applies
included_pathsandexcluded_pathspatterns. - Copies to Target - Places files in the component directory.
Source Specificationβ
The source field supports two formats:
String Format (Simple)β
For simple cases, use a go-getter URI string:
source: "github.com/cloudposse/terraform-aws-components//modules/vpc?ref=1.450.0"
Map Format (Full Control)β
For more control, use a map with explicit fields:
source:
uri: github.com/cloudposse/terraform-aws-components//modules/vpc
version: 1.450.0
included_paths:
- "*.tf"
- "*.tfvars"
- "modules/**"
excluded_paths:
- "*.md"
- "tests/**"
- "examples/**"
Source Fieldsβ
uri- Go-getter compatible source URI. Supports git, s3, http, gcs, oci, and other protocols.
version- Version tag, branch, or commit. Appended as
?ref=<version>for git sources. For non-git sources (S3, HTTP, OCI), the version should be embedded in the URI itself. included_paths- Glob patterns for files to include. If specified, only matching files are copied.
excluded_paths- Glob patterns for files to exclude. Applied after included_paths filtering.
retryOptional retry configuration for handling transient network errors during download. Useful for unreliable networks or when hitting rate limits.
retry:
max_attempts: 5
initial_delay: 2s
max_delay: 60s
backoff_strategy: exponentialAll fields are optional. Recommended:
max_attempts,initial_delay,max_delay,backoff_strategy(exponential,linear,constant). Additional options:multiplier,random_jitter,max_elapsed_time.
Examplesβ
Vendor a Componentβ
Download and vendor a component source:
atmos terraform source pull vpc --stack dev
Output:
Vendoring component 'vpc' from source...
Downloading from github.com/cloudposse/terraform-aws-components//modules/vpc?ref=1.450.0
β Successfully vendored component to components/terraform/vpc
Force Re-vendorβ
Force re-download even if the component directory exists:
atmos terraform source pull vpc --stack dev --force
View Source Configurationβ
Display the source configuration for a component:
atmos terraform source describe vpc --stack dev
Output:
components:
terraform:
vpc:
source:
uri: github.com/cloudposse/terraform-aws-components//modules/vpc
version: 1.450.0
included_paths:
- "*.tf"
- "modules/**"
excluded_paths:
- "*.md"
- "tests/**"
List Components with Sourcesβ
List all components that have source configured:
atmos terraform source list --stack dev
Delete Vendored Sourceβ
Remove the vendored component directory (requires --force for safety):
atmos terraform source delete vpc --stack dev --force
Argumentsβ
component- The Atmos component name (required for pull, describe, delete)
Flagsβ
--stack/-s- Atmos stack name (required). Can also be set via
ATMOS_STACKenvironment variable. --identity/-i- Identity to use for authentication when downloading from protected sources.
--force/-f- Force re-vendor even if component directory exists (pull command), or confirm deletion (delete command).
Authenticationβ
Source commands support authentication for accessing private repositories or cloud storage.
Component-Level Identityβ
Components can specify an authentication identity:
components:
terraform:
vpc:
source:
uri: github.com/my-org/private-components//modules/vpc
version: v1.0.0
auth:
identities:
github-deployer:
default: true
kind: github/app
via:
provider: github-app
Identity Flag Overrideβ
Override the component's default identity:
atmos terraform source pull vpc --stack dev --identity admin
For more details on configuring authentication identities, see the Authentication Guide.
Configuration Patternsβ
Inheritance with sourceβ
Use stack inheritance to share source configurations:
# stacks/catalog/vpc/defaults.yaml
components:
terraform:
vpc/defaults:
source:
uri: github.com/cloudposse/terraform-aws-components//modules/vpc
version: 1.450.0
# stacks/dev.yaml
components:
terraform:
vpc:
metadata:
inherits: [vpc/defaults]
# Inherits source configuration
vars:
cidr_block: "10.0.0.0/16"
Version Override per Environmentβ
Override the version per environment:
# stacks/dev.yaml
components:
terraform:
vpc:
metadata:
inherits: [vpc/defaults]
source:
version: 1.451.0 # Override version for dev
# stacks/prod.yaml
components:
terraform:
vpc:
metadata:
inherits: [vpc/defaults]
source:
version: 1.450.0 # Pin to stable version for prod
Supported Source Typesβ
The source provisioner uses go-getter and supports multiple protocols:
Git Sourcesβ
Shortened GitHub syntax (recommended):
source:
uri: github.com/cloudposse/terraform-aws-components//modules/vpc
version: 1.450.0
Explicit HTTPS:
source:
uri: git::https://github.com/org/repo.git//path
version: main
Explicit SSH:
source:
uri: git::ssh://git@github.com/org/repo.git//path
version: main
S3 Sourcesβ
source:
uri: s3::https://s3-us-east-1.amazonaws.com/my-bucket/components/vpc.tar.gz
HTTP/HTTPS Sourcesβ
source:
uri: https://releases.example.com/components/vpc-1.0.0.tar.gz
OCI Registry Sourcesβ
source:
uri: oci::registry.example.com/components/vpc:v1.0.0
Error Handlingβ
Missing sourceβ
Error: source not configured
Hint: Add source to the component configuration in your stack manifest
Example:
components:
terraform:
vpc:
source:
uri: github.com/cloudposse/terraform-aws-components//modules/vpc
version: 1.450.0
Component Directory Existsβ
Error: component directory already exists
Hint: Use --force to overwrite the existing directory
Download Failedβ
Error: failed to download source
Cause: failed to clone repository: authentication required
Hint: Check credentials or use --identity to specify authentication
Comparison with Vendoringβ
| Feature | source | component.yaml |
|---|---|---|
| Configuration location | Inline in stack | Separate file |
| Version per environment | Yes | Single version |
| JIT download | Yes | Pre-vendored |
| Path filtering | Yes | Yes |
| Mixins support | No | Yes |
Mixins allow combining multiple source configurations into a single component. See Vendoring for details.
Use source when:
- You want version control per environment
- You prefer configuration colocation in stacks
- You need just-in-time vendoring
Use component.yaml when:
- You need mixin support
- You want pre-vendored components
- You have complex vendoring requirements
See Alsoβ
- Source-Based Version Pinning β Design pattern for per-environment version management
- Stack Configuration β Learn about Atmos stacks
- Vendoring β Pre-vendor components for immutability and audit trails
- Vendoring Design Pattern β When explicit vendoring makes sense
atmos vendor pullβ Traditional component vendoring