Skip to content

Commit 270e3bb

Browse files
Benbentwoclaude
andauthored
blog: announce modular AWS account components (#891)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 589d961 commit 270e3bb

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
---
2+
title: "Modular AWS Account Components: A More Granular Approach to Organization Management"
3+
slug: new-account-components
4+
authors: [Benbentwo]
5+
tags: [reference-architecture, aws, components, accounts]
6+
date: 2026-03-04
7+
---
8+
import Intro from '@site/src/components/Intro';
9+
import Steps from '@site/src/components/Steps';
10+
11+
<Intro>
12+
We've replaced the monolithic `account` and `account-settings` components with six modular, single-responsibility components that give you a more granular approach to managing your AWS Organization.
13+
</Intro>
14+
15+
<!--truncate-->
16+
17+
## What's Changing
18+
19+
The old `account` component handled everything: the AWS Organization, organizational units, individual accounts, and service control policies all in one. Similarly, `account-settings` bundled account configuration with budget management. We've broken these apart into focused components that each do one thing well.
20+
21+
| Old Component | Old Version | New Components | New Version |
22+
|---------------|-------------|----------------|-------------|
23+
| `account` | v1.538.0 | `aws-account` | V2 |
24+
| | | `aws-organization` | v0 |
25+
| | | `aws-organizational-unit` | v0 |
26+
| | | `aws-scp` | v0/v1 |
27+
| `account-settings` | v1.535.5 | `aws-account-settings` | V2 |
28+
| | | `aws-budget` | V1 |
29+
30+
## Why Modular Components
31+
32+
<Steps>
33+
1. **Single responsibility** Each component manages one concern. Update an SCP without touching your accounts. Adjust a budget without redeploying account settings.
34+
1. **Independent versioning** Components evolve on their own release cadence. Upgrade `aws-scp` to a new version without waiting for or affecting `aws-account`.
35+
1. **Smaller blast radius** A change to organizational units doesn't risk impacting account creation or service control policies.
36+
1. **Easier brownfield adoption** Need just budget management? Vendor `aws-budget` alone. You don't have to adopt the entire suite.
37+
1. **Instance-based deployment** Components like `aws-account` and `aws-organizational-unit` are deployed as instances (e.g., `aws-account/plat-dev`, `aws-organizational-unit/core`), making configuration explicit and auditable.
38+
</Steps>
39+
40+
## The New Components
41+
42+
| Component | Purpose |
43+
|-----------|---------|
44+
| [`aws-organization`](https://github.com/cloudposse-terraform-components/aws-organization) | Manages the AWS Organization itself |
45+
| [`aws-organizational-unit`](https://github.com/cloudposse-terraform-components/aws-organizational-unit) | Manages individual OUs (deployed as instances like `aws-organizational-unit/core`, `aws-organizational-unit/plat`) |
46+
| [`aws-account`](https://github.com/cloudposse-terraform-components/aws-account) | Creates and manages individual AWS accounts (deployed as instances like `aws-account/plat-dev`, `aws-account/core-artifacts`) |
47+
| [`aws-scp`](https://github.com/cloudposse-terraform-components/aws-scp) | Manages Service Control Policies (deployed as instances per policy, e.g., `aws-scp/deny-leaving-organization`) |
48+
| [`aws-account-settings`](https://github.com/cloudposse-terraform-components/aws-account-settings) | Account-level settings: IAM password policy, AWS Account Alias, EBS encryption, Service Quotas |
49+
| [`aws-budget`](https://github.com/cloudposse-terraform-components/aws-budget) | AWS budgets for cost management and alerting |
50+
51+
## Part of Reference Architecture V2
52+
53+
These new components are part of the broader Reference Architecture V2 changes, which also include the [deprecation of `account-map`](/blog/deprecate-account-map) in favor of static configuration and Atmos Auth profiles. Together, these changes reduce Terraform dependencies, simplify cold starts, and better support brownfield deployments.
54+
55+
## Adopting with Legacy Infrastructure
56+
57+
:::warning Important for Existing Deployments
58+
The new components ship with a **next-gen `providers.tf`** that contains only a simple AWS provider declaration:
59+
60+
```hcl
61+
provider "aws" {
62+
region = var.region
63+
}
64+
```
65+
66+
This assumes [Atmos Auth](https://atmos.tools/core-concepts/components/authentication/) is in place role assumption happens *before* Terraform begins, so the provider doesn't need to handle it. If you're adopting these components into an existing infrastructure that still uses `account-map` for provider configuration, you'll need to vendor in an overriding `providers.tf`.
67+
:::
68+
69+
Exclude the upstream `providers.tf` and use the legacy mixin instead:
70+
71+
```yaml title="components/terraform/<component-name>/component.yaml"
72+
apiVersion: atmos/v1
73+
kind: ComponentVendorConfig
74+
spec:
75+
source:
76+
uri: github.com/cloudposse-terraform-components/aws-<component>.git//src?ref={{ .Version }}
77+
version: vX.x.x # The new version with next-gen providers
78+
included_paths:
79+
- "**/**"
80+
excluded_paths:
81+
- "providers.tf" # Exclude the next-gen providers.tf
82+
mixins:
83+
# Vendor in the legacy providers.tf that works with account-map
84+
- uri: https://raw.githubusercontent.com/cloudposse-terraform-components/mixins/{{ .Version }}/src/mixins/provider-with-account-map.tf
85+
version: v0.3.2
86+
filename: providers.tf
87+
```
88+
89+
This gives you the new modular component logic while keeping your existing provider configuration intact.
90+
91+
## Questions?
92+
93+
If you have questions about adopting the new account components:
94+
95+
<Steps>
96+
1. Join the [SweetOps Slack](https://cloudposse.com/slack) community
97+
1. Open a [GitHub Discussion](https://github.com/orgs/cloudposse/discussions)
98+
1. Contact Cloud Posse [support](/support/)
99+
</Steps>

0 commit comments

Comments
 (0)