atmos
134720,780
👽️
erikabout 11 hours ago
Pretty awesome way to build idempotent lamba artifacts using atmos hooks. Using this to deploy a lambda we use to send a daily AWS budget cost report.
Mateusz Osiński1 day ago
Hello! I am coming with two questions. We’re on Atmos + legacy
1) Privileged / foundation components (
Is that still the recommended pattern under Atmos Native CI? Or is there a newer way to gate plan vs apply / privileged vs app components? Have you seen teams safely enable CI apply for foundation components, and how?
2) Production promotion: how do you currently prefer customers promote changes to production with Atmos/GitOps?
github-action-atmos-terraform-plan/apply, with settings.github.actions_enabled as an opt-in (only a few app components enabled).1) Privileged / foundation components (
aws-teams, iam, tfstate-backend, …): when actions_enabled is unset/false we get green Plan jobs but no real plan (step skipped), so PRs touching those components show no Terraform plan. Cloud Posse docs suggest default actions_enabled: true and disabling sensitive ones. We’re considering plan-in-CI for privileged components (visibility/history) while keeping apply manual or on a separate privileged workflow.Is that still the recommended pattern under Atmos Native CI? Or is there a newer way to gate plan vs apply / privileged vs app components? Have you seen teams safely enable CI apply for foundation components, and how?
2) Production promotion: how do you currently prefer customers promote changes to production with Atmos/GitOps?
erik7 days ago
Improved formatting for
--ui coming in 1.230.0erik7 days ago
Loving these new slack notifications.
Brent Farand8 days ago
Hello! I have opened a GitHub issue for an issue I am having relating to the Atmos toolchain. github.com/cloudposse/atmos/issues/3213 I would be happy to provide additional details/troubleshoot further if needed.
I wanted to keep the issue concise, but I would like to balance it with some positivity here. 🙂 I've been using Atmos since mid 2022 and it really has come a long way since then. It's incredible what you can do with it now! I greatly appreciate all of the work that's been put into it (and keeping it open source), it really has changed our infrastructure game for the better. Thank you!
I wanted to keep the issue concise, but I would like to balance it with some positivity here. 🙂 I've been using Atmos since mid 2022 and it really has come a long way since then. It's incredible what you can do with it now! I greatly appreciate all of the work that's been put into it (and keeping it open source), it really has changed our infrastructure game for the better. Thank you!
toka9 days ago
Hey Guys! Just wanted to share that I very much appreciate how far you've come with Atmos ❤️. I love the direction you are going in and this year's roadmap.
Bart Palmowski10 days ago(edited)
Thomas Spear14 days ago
Hi, it looks like a bot closed a feature request I had open with no explanation and no prior warning. Could someone please reopen issue 1549?
https://github.com/cloudposse/atmos/issues/1549
Thank you in advance
https://github.com/cloudposse/atmos/issues/1549
Thank you in advance
erik14 days ago
Did you know terraform registries mostly just return redirects to GitHub?
GitHub is cracking down on unauthenticated requests as it tries to stabilize the platform. Using GitHub as a registry is less and less reliable. It's also one of the reasons homebrew moved to OCI.
This is why Atmos supports a pass though Terraform Registry & Provider proxy so all requests are cached locally in your XDG cache folder. Combine that with the GitHub artifact cache, you can speed up your terraform runs in CI. Oh, and did you know atmos also supports pulling your modules from OCI container registries like the GitHub container registry? When you pull from container registries it's blazingly fast compared to git.
github.com/hashicorp/terraform/issues/39130
github.com/orgs/community/discussions/206581#…
Automatically retry transient errors with atmos:
atmos.tools/changelog/terraform-component-retry
Enable the registry cache:
atmos.tools/changelog/terraform-registry-cache
OCI vendoring
atmos.tools/cli/commands/vendor/pull#…
GitHub is cracking down on unauthenticated requests as it tries to stabilize the platform. Using GitHub as a registry is less and less reliable. It's also one of the reasons homebrew moved to OCI.
This is why Atmos supports a pass though Terraform Registry & Provider proxy so all requests are cached locally in your XDG cache folder. Combine that with the GitHub artifact cache, you can speed up your terraform runs in CI. Oh, and did you know atmos also supports pulling your modules from OCI container registries like the GitHub container registry? When you pull from container registries it's blazingly fast compared to git.
github.com/hashicorp/terraform/issues/39130
github.com/orgs/community/discussions/206581#…
Automatically retry transient errors with atmos:
atmos.tools/changelog/terraform-component-retry
Enable the registry cache:
atmos.tools/changelog/terraform-registry-cache
OCI vendoring
atmos.tools/cli/commands/vendor/pull#…
Daniel Booth16 days ago
newish
Daniel Booth16 days ago
when using the new secrets how can I use terraform plan? I have imported my s3 access and secret key via secrets but they are passed as MASKED to plan
Yota17 days ago
Hello :),
I see that the AI section is still marked as experimental. Do you plan to add any new features, or is that not on the agenda for now?
I’m (finally!) testing generative AI with Atmos, and I have two questions:
- Why isn’t Bedrock authentication used like the rest (login via OAuth)?
- Are you going to add other providers (I’m thinking of OpenRouter, Opencode Go/Zen, Deepseek, etc.)? Anthropic is sooo expensive (Bedrock too).
Thanks.
I see that the AI section is still marked as experimental. Do you plan to add any new features, or is that not on the agenda for now?
I’m (finally!) testing generative AI with Atmos, and I have two questions:
- Why isn’t Bedrock authentication used like the rest (login via OAuth)?
- Are you going to add other providers (I’m thinking of OpenRouter, Opencode Go/Zen, Deepseek, etc.)? Anthropic is sooo expensive (Bedrock too).
Thanks.
erik22 days ago
Atmos 1.228.0 ships a pretty slick lightweight streaming UI now for terraform operations. Just pass the
--ui flag to test it out. It can also be enabled by default.atmos config set components.terraform.ui.enabled trueMaksym Vlasov23 days ago
atmos.tools/cli/configuration/schemas#…
Pined schemas does not exist
https://atmos.tools/schemas/atmos/atmos-manifest/1.228.0/atmos-manifest.json
Same for 1.224.1 and 1.219.0 which set as example
Pined schemas does not exist
https://atmos.tools/schemas/atmos/atmos-manifest/1.228.0/atmos-manifest.json
Same for 1.224.1 and 1.219.0 which set as example
erik27 days ago
This is crazy, and it just shows how how much GitHub/Microsoft is subsidizing open source development. It's 9/4 and we've already spent the equivalent of ~$9,000 USD in build minutes on atmos. But since the project is Open Source, this is free.
Zackabout 1 month ago
Is there a way for atmos to gracefully handle doing a terraform state lookup on a stack reference that doesn't exist? Running into an error from one of our values that we are importing and actually overwriting
Pavloabout 1 month ago
👋 Hello, team!
erikabout 1 month ago
anyone have experience submitting packages to Chainguard?
erikabout 1 month ago
@here — we’re working to bring Atmos into Iron Bank: p1.dso.mil/iron-bank
If you’re using Atmos with a federal government customer, please DM me. We’re gathering reference customers to support the submission, just need company name.
If you’re using Atmos with a federal government customer, please DM me. We’re gathering reference customers to support the submission, just need company name.
kapatsabout 1 month ago
Hi Cloud Posse team,
At the beginning of this year, we started a successful migration away from a monolithic Terraform setup toward an Atmos-based component architecture. At this point, we already have more than 100 internal components used across our engineering teams.
One thing we approached differently from the patterns I’ve seen in Atmos/Cloud Posse is dependency resolution between components.
I’ve noticed that Atmos/Cloud Posse patterns make fairly extensive use of Terraform remote state to pass information between components. In our setup, we managed to avoid remote-state dependencies entirely by using provider data sources together with a tag-based resource discovery convention.
For example, an EKS cluster is tagged with a logical discovery identity like this:
Consumers then discover the actual resource through the cloud provider API using these tags, rather than reading outputs from another component’s Terraform state.
In practice, this gives us a resource-discovery contract based on logical identity, while the cloud control plane remains the source of truth for resolving the actual resource. Terraform state is used for ownership and lifecycle management, but not as the communication mechanism between components.
We also use the concept of shared resources. A stack can act as a shared stack and provide infrastructure resources that are consumed by multiple other stacks. Those consumers do not need a direct dependency on the shared stack’s Terraform state. Instead, they discover the resources through the same logical discovery convention.
For example, a shared stack may provide an EKS cluster, VPC, subnets, Route53 zones, or other common infrastructure. Multiple application stacks can then reference those resources by their logical identity without needing to know which Terraform component created them or where its state is stored.
Conceptually, this gives us a relationship like:
This has been particularly useful for keeping shared infrastructure reusable without introducing explicit state-level coupling between the shared stack and every consumer.
Another side effect we found particularly useful is that our Atmos component definitions remain relatively clean. They describe the actual configuration of the component without also having to encode explicit remote-state relationships to its dependencies.
For example, our component definitions look roughly like this:
Dependencies such as the EKS cluster, VPC, subnets, or other infrastructure can be resolved by the component itself through the discovery convention, instead of requiring the stack definition to explicitly wire outputs from other Terraform states.
I’m curious whether Cloud Posse considered this kind of resource-discovery approach when designing the Atmos component model.
What were the main reasons for preferring remote-state/output-based dependencies between components instead?
At the beginning of this year, we started a successful migration away from a monolithic Terraform setup toward an Atmos-based component architecture. At this point, we already have more than 100 internal components used across our engineering teams.
One thing we approached differently from the patterns I’ve seen in Atmos/Cloud Posse is dependency resolution between components.
I’ve noticed that Atmos/Cloud Posse patterns make fairly extensive use of Terraform remote state to pass information between components. In our setup, we managed to avoid remote-state dependencies entirely by using provider data sources together with a tag-based resource discovery convention.
For example, an EKS cluster is tagged with a logical discovery identity like this:
eks_discovery_tags = {
atmos_discovery_namespace = var.namespace
atmos_discovery_project = var.project
atmos_discovery_environment = var.environment
atmos_discovery_atmos_stack = local.eks_discovery_stack
atmos_discovery_resource_type = "eks"
atmos_discovery_resource_key = "default"
}Consumers then discover the actual resource through the cloud provider API using these tags, rather than reading outputs from another component’s Terraform state.
In practice, this gives us a resource-discovery contract based on logical identity, while the cloud control plane remains the source of truth for resolving the actual resource. Terraform state is used for ownership and lifecycle management, but not as the communication mechanism between components.
We also use the concept of shared resources. A stack can act as a shared stack and provide infrastructure resources that are consumed by multiple other stacks. Those consumers do not need a direct dependency on the shared stack’s Terraform state. Instead, they discover the resources through the same logical discovery convention.
For example, a shared stack may provide an EKS cluster, VPC, subnets, Route53 zones, or other common infrastructure. Multiple application stacks can then reference those resources by their logical identity without needing to know which Terraform component created them or where its state is stored.
Conceptually, this gives us a relationship like:
shared infrastructure stack
|
+-- EKS
+-- VPC
+-- subnets
+-- Route53
|
v
cloud provider API + discovery tags
|
+--> application stack A
+--> application stack B
+--> application stack CThis has been particularly useful for keeping shared infrastructure reusable without introducing explicit state-level coupling between the shared stack and every consumer.
Another side effect we found particularly useful is that our Atmos component definitions remain relatively clean. They describe the actual configuration of the component without also having to encode explicit remote-state relationships to its dependencies.
For example, our component definitions look roughly like this:
components:
terraform:
argocd:
source:
uri: git::<ssh://git@example.org/platform/platform-components.git//components/argocd>
version: argocd-v1.7.1
vars:
health_check: true
route53_zone_name: <http://dev.example.com|dev.example.com>
git_repos:
- url: '{{ .settings.project_repository }}'
ssh_key_s3_bucket: tf-state-dev
ssh_key_s3_key: /secrets/...
provision:
workdir:
enabled: trueDependencies such as the EKS cluster, VPC, subnets, or other infrastructure can be resolved by the component itself through the discovery convention, instead of requiring the stack definition to explicitly wire outputs from other Terraform states.
I’m curious whether Cloud Posse considered this kind of resource-discovery approach when designing the Atmos component model.
What were the main reasons for preferring remote-state/output-based dependencies between components instead?
Zackabout 1 month ago(edited)
Oh, another weird thing I am seeing. .workdirs are getting created with weird names, it's adding an h to strings so it's like
normal-hstring-hmore-hstrings - 1.226.1 first string is normal, others get prepended
normal-hstring-hmore-hstrings - 1.226.1 first string is normal, others get prepended
Zackabout 1 month ago
@Erik Osterman (Cloud Posse) btw we ran into more concurrency errors using a dual core runner 🧵
Maksym Vlasovabout 2 months ago(edited)
Any idea how can be renamed vars like
They are used in
I tried a bunch of things, but looks like I can't set some setting like
environment and stage? IE to rgn and acc_nameThey are used in
name_patern and even if I use name_template, and redefine terraform_workspace_pattern it will still fails, as in underlying CP modules exist data sources like this which have pre-hardcoded var names.I tried a bunch of things, but looks like I can't set some setting like
environment: '{{ .vars.rgn }}' and forget about it?Brandonabout 2 months ago
Hello,
When running
When running
atmos terraform deploy or atmos terraform apply --all with concurrency > 1, we see atmos ignore the provider/module cache in github and pull the provider for every component. Is that expected behavior?Zackabout 2 months ago
❓️ there's no stack level
retry settings, correct? Only way to easily put them on every component would be an abstract import on each?Zackabout 2 months ago
For sure running into another bug with the masking thing. I also had to to set the cli flag to disable masking, the config in the atmos.yaml for some reason wasn't working completely.
Seems to be specifically when I'm using DAG also, because of the same thing with the whole RDS thing.
Seems to be specifically when I'm using DAG also, because of the same thing with the whole RDS thing.
Zackabout 2 months ago
May have found an edgecase with DAG, not sure if intended
Zackabout 2 months ago
Anyone doing anything cool with atmos docs?
erikabout 2 months ago
One of the frequent requests we get from customers is that they wish they knew all the things that have changed in Atmos that they should be taking advantage of... And this is actually possible today. If you run
atmos.tools/ai/agent-skills
atmos.tools/cli/commands/ai/skill
atmos ai skill install And use the "Atmos Modernization" skill, Claude can help you update your configurations to use the latest patterns.atmos.tools/ai/agent-skills
atmos.tools/cli/commands/ai/skill
Maksym Vlasovabout 2 months ago(edited)
two more bugs, continue dive into
github.com/cloudposse/atmos/issues/2867
github.com/cloudposse/atmos/issues/2868
--configgithub.com/cloudposse/atmos/issues/2867
github.com/cloudposse/atmos/issues/2868
Nick Dunnabout 2 months ago
Hi, team. I was brainstorming an idea but I'm having some trouble with the execution. I'm just wondering if this seems do-able.
We use Atmos + Terraform to build everything. We run almost exclusively on K8s, mostly via Kustomize and ArgoCD. Injecting dynamic information from our Terraform into Kustomize can be a bit awkward at times. So, I had the following idea with Atmos:
• Create inline manifests with Kubernetes components. These manifests would actually be Kustomization files (either resources or components/patches).
• I would deploy these manifests to some dedicated branch in the repository that contains our other Kustomize manifests.
• I would configure the appropriate Kustomize configurations to "include" this dedicated branch as-needed.
• Example. I need to inject a security group ID created by some Terraform into an annotation or configmap somewhere. I could have an inline manifest (Kustomize patch) that gets deployed to a pre-determined location in the dedicated branch. Then the appropriate Kustomize configurations can "include" that manifest rendered and deployed by Atmos.
Problem is, I'm having some trouble choosing the file name. I often need the generated manifest to be called
We use Atmos + Terraform to build everything. We run almost exclusively on K8s, mostly via Kustomize and ArgoCD. Injecting dynamic information from our Terraform into Kustomize can be a bit awkward at times. So, I had the following idea with Atmos:
• Create inline manifests with Kubernetes components. These manifests would actually be Kustomization files (either resources or components/patches).
• I would deploy these manifests to some dedicated branch in the repository that contains our other Kustomize manifests.
• I would configure the appropriate Kustomize configurations to "include" this dedicated branch as-needed.
• Example. I need to inject a security group ID created by some Terraform into an annotation or configmap somewhere. I could have an inline manifest (Kustomize patch) that gets deployed to a pre-determined location in the dedicated branch. Then the appropriate Kustomize configurations can "include" that manifest rendered and deployed by Atmos.
Problem is, I'm having some trouble choosing the file name. I often need the generated manifest to be called
kustomization.yaml , but it seems like the name might be automatically generated. Is it possible to override this behavior? I saw the split setting for rendering, but I didn't see something similar when deploying an inline manifest.Maksym Vlasovabout 2 months ago
And also, proposal, useful for make new atmos features works fine with all existing stable features from the start (except very weird corner cases)
https://github.com/cloudposse/atmos/issues/2865
https://github.com/cloudposse/atmos/issues/2865
Maksym Vlasovabout 2 months ago
one more bug 
github.com/cloudposse/atmos/issues/2863
P.S. should I post them all here, or you're usually look in repo new issues inbox?

github.com/cloudposse/atmos/issues/2863
P.S. should I post them all here, or you're usually look in repo new issues inbox?
Jorrit Elfferich2 months ago
Hi all 👋
Not entirely sure if this is the right channel or #atmos-dev, but I posted a proposal for dynamic file generation (
Not entirely sure if this is the right channel or #atmos-dev, but I posted a proposal for dynamic file generation (
for_each) in atmos scaffold, see: github.com/orgs/cloudposse/discussions/126. Would appreciate some feedback there 🙏.Girish Maddineni2 months ago
Hi, there. I am currently working with atmos helmfile and is there a way that the values from stack config gets applied automatically when running command
atmos helmfile diff/apply <component> -s <stack>, instead of passing values filename manually like below in helmfile.yaml. Also atmos generated values file eg: aws-useast1-metrics-server.helmfile.vars.yaml are getting with stack identification values like namespace, environment, stg where some helm charts are failing with validation errors like chart doesn't allow those extra values. Thank you. @PePe Amengualrepositories:
- name: metrics-server
url: <https://kubernetes-sigs.github.io/metrics-server/>
releases:
- name: metrics-server
chart: metrics-server/metrics-server
version: 3.13.0
namespace: kube-system
createNamespace: false
force: false
values:
- aws-useast1-metrics-server.helmfile.vars.yamlZack2 months ago
Anyone else experience
fatal error: concurrent map iteration and map write when using DAG?Juan Aguero2 months ago(edited)
Hey there 👋,
New to contributing, not totally sure this is the right place to raise this — point me elsewhere if so!
I finally had time to prototype the native RDS IAM auth idea I floated a while back in a discussion, I linked more context on the original issue but looking at adding
Would love a gut-check on whether it's worth pursuing and the right direction.
Wrote it all up here:
github.com/orgs/cloudposse/discussions/121#…
New to contributing, not totally sure this is the right place to raise this — point me elsewhere if so!
I finally had time to prototype the native RDS IAM auth idea I floated a while back in a discussion, I linked more context on the original issue but looking at adding
atmos aws rds token, plus a rds onnect follow-on — both are draft PRs.Would love a gut-check on whether it's worth pursuing and the right direction.
Wrote it all up here:
github.com/orgs/cloudposse/discussions/121#…
Zack2 months ago
❓️ is there an atmos native way to arbitrarily look up things from a state backend, if they aren't technically managed by your stack?
Phil Hadviger2 months ago(edited)
Running the curl install listed on the homepage of atmos, immediately ran into the following. Is this supposed to run as
sudo? First time posting here, so let me know if this is the wrong way to go about reaching out.cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS"Maksym Vlasov2 months ago(edited)
Does anyone tried atmos.tools/changelog/tags-and-labels ?
For some reason, these doesn't work for me (I located them in most top
Inside generated
atmos v1.223.0
For some reason, these doesn't work for me (I located them in most top
_defaults.yaml): metadata:
labels:
some_tag: some_value
vars:
tags: !labelsInside generated
.tfvars.json after atmos terraform plan:"tags": {
"unrelated_tag": "foo"
},atmos v1.223.0
Maksym Vlasov2 months ago(edited)
Hi, there. I surprised that it not covered from day 1 of hooks introduction
Can you please take a look?
github.com/cloudposse/atmos/issues/2799
Can you please take a look?
github.com/cloudposse/atmos/issues/2799
Zack2 months ago(edited)
really enjoying DAG, seems to be working decently with a PoC for targeted stack precedence
Zack2 months ago
Trying to implement a blue/green pattern in atmos. DAG doesn't work across multiple stacks yet does it?
Brian3 months ago
The recent changes to
--help is very welcomed. It's a much better DX then providing all the help information.c0rey3 months ago
Hey everyone! Wondering if anyone else has seen this behavior:
We noticed that after a recent update to
The install path changed from
Workaround: Setting
Are we missing a configuration step for the wrapper, or is this a known issue with the latest release? Happy to provide workflow snippets or run logs if helpful. Thanks!
We noticed that after a recent update to
cloudposse/github-action-setup-atmos@v3, our atmos terraform deploy and atmos terraform apply commands in GitHub Actions started completing instantly (0 seconds, exit code 0) with no terraform output — no init, no plan, no apply.The install path changed from
/home/runner/work/_actions/cloudposse/github-action-setup-atmos/atmos to /opt/hostedtoolcache/atmos-wrapper/1.222.0/x64. Actions runs using the old path on July 3 worked fine (5-minute deploys); runs using the new wrapper path on July 4+ silently no-op.Workaround: Setting
install-wrapper: "false" resolves it — deploy commands run terraform as expected.Are we missing a configuration step for the wrapper, or is this a known issue with the latest release? Happy to provide workflow snippets or run logs if helpful. Thanks!
Zack3 months ago(edited)
@Erik Osterman (Cloud Posse) Do you know if you can set authentication for an oci JIT source component? Or if it's documented somewhere specific? Specifically a
terraform.$component.source.uriJuan Aguero3 months ago
so sick !


Maksym Vlasov3 months ago
Hi. Can you look into github.com/cloudposse/atmos/issues/2376 bug? It still exist in 1.222.0