examples.md7.9 KB
View on GitHubComponent Configuration Examples
This reference provides concrete examples of common component configurations showing catalog entries, stack overrides, and inheritance patterns.
VPC Component
Catalog Default (Abstract Base)
# stacks/catalog/vpc/_defaults.yamlcomponents:terraform:vpc/defaults:metadata:type: abstractcomponent: vpcsettings:validation:validate-vpc-component-with-jsonschema:schema_type: jsonschemaschema_path: "vpc/validate-vpc-component.json"description: Validate 'vpc' component variables using JSON Schemavars:enabled: truename: "common"max_subnet_count: 3map_public_ip_on_launch: truenat_gateway_enabled: truenat_instance_enabled: falsevpc_flow_logs_enabled: truevpc_flow_logs_traffic_type: "ALL"vpc_flow_logs_log_destination_type: "s3"subnet_type_tag_key: "acme/subnet/type"ipv4_primary_cidr_block: "10.0.0.0/18"
Production Stack Override
# stacks/orgs/acme/plat/prod/us-east-1.yamlimport:- orgs/acme/plat/prod/_defaults- mixins/region/us-east-1- catalog/vpc/_defaultscomponents:terraform:vpc:metadata:inherits:- vpc/defaultsvars:name: prod-vpcipv4_primary_cidr_block: "10.100.0.0/18"availability_zones:- us-east-1a- us-east-1b- us-east-1ctags:CostCenter: "production-networking"
Dev Stack Override (Cost-Optimized)
# stacks/orgs/acme/plat/dev/us-east-1.yamlimport:- orgs/acme/plat/dev/_defaults- mixins/region/us-east-1- catalog/vpc/_defaultscomponents:terraform:vpc:metadata:inherits:- vpc/defaultsvars:name: dev-vpcmax_subnet_count: 2nat_gateway_enabled: false # Save costs in devipv4_primary_cidr_block: "10.200.0.0/18"
Multiple VPC Instances
# stacks/orgs/acme/plat/prod/us-east-1.yamlimport:- catalog/vpc/_defaultscomponents:terraform:vpc/primary:metadata:component: vpcinherits:- vpc/defaultsvars:name: primaryipv4_primary_cidr_block: "10.100.0.0/18"vpc/isolated:metadata:component: vpcinherits:- vpc/defaultsvars:name: isolatedipv4_primary_cidr_block: "10.101.0.0/18"map_public_ip_on_launch: falsenat_gateway_enabled: false
EKS Cluster Component
Catalog Default
# stacks/catalog/eks/_defaults.yamlcomponents:terraform:eks/defaults:metadata:type: abstractcomponent: eks/clustervars:enabled: truekubernetes_version: "1.28"oidc_provider_enabled: truemanaged_node_groups_enabled: truenode_groups:main:instance_types:- t3.mediummin_size: 2max_size: 10desired_size: 3cluster_log_types:- api- audit- authenticatortags:Component: eks-cluster
Production EKS
# stacks/orgs/acme/plat/prod/us-east-1.yamlimport:- catalog/eks/_defaults- catalog/vpc/_defaultscomponents:terraform:eks-cluster:metadata:inherits:- eks/defaultsvars:cluster_name: prod-ekskubernetes_version: "1.29"node_groups:main:instance_types:- m5.xlargemin_size: 3max_size: 20desired_size: 6spot:instance_types:- m5.xlarge- m5.2xlargecapacity_type: SPOTmin_size: 0max_size: 50desired_size: 3vpc_id: !terraform.output vpc/vpc_idsubnet_ids: !terraform.output vpc/private_subnet_ids
Blue-Green EKS Using Go Templates
# stacks/catalog/terraform/eks_cluster.yaml.tmplcomponents:terraform:"eks-{{ .flavor }}/cluster":metadata:component: eks/clustervars:enabled: "{{ .enabled }}"name: "eks-{{ .flavor }}"tags:flavor: "{{ .flavor }}"
# stacks/orgs/acme/plat/prod/us-west-2.yamlimport:- path: "catalog/terraform/eks_cluster.yaml.tmpl"context:flavor: "blue"enabled: true- path: "catalog/terraform/eks_cluster.yaml.tmpl"context:flavor: "green"enabled: false
S3 Bucket Component
Catalog Default
# stacks/catalog/s3-bucket/_defaults.yamlcomponents:terraform:s3-bucket/defaults:metadata:type: abstractcomponent: s3-bucketvars:enabled: trueversioning_enabled: trueblock_public_acls: trueblock_public_policy: trueignore_public_acls: truerestrict_public_buckets: trueserver_side_encryption_configuration:rule:apply_server_side_encryption_by_default:sse_algorithm: "aws:kms"lifecycle_rules:- id: "expire-noncurrent"enabled: truenoncurrent_version_expiration:noncurrent_days: 90
Application Assets Bucket
# stacks/orgs/acme/plat/prod/us-east-1.yamlimport:- catalog/s3-bucket/_defaultscomponents:terraform:assets-bucket:metadata:component: s3-bucketinherits:- s3-bucket/defaultsvars:name: assetscors_configuration:cors_rules:- allowed_headers: ["*"]allowed_methods: ["GET"]allowed_origins: ["https://app.acme.com"]max_age_seconds: 3600
Terraform State Bucket
# stacks/orgs/acme/plat/prod/us-east-1.yamlimport:- catalog/s3-bucket/_defaultscomponents:terraform:tfstate-bucket:metadata:component: s3-bucketinherits:- s3-bucket/defaultsvars:name: tfstateversioning_enabled: truelifecycle_rules:- id: "expire-noncurrent"enabled: truenoncurrent_version_expiration:noncurrent_days: 365
IAM Role Component
Catalog Default and Instance
# stacks/catalog/iam-role/_defaults.yamlcomponents:terraform:iam-role/defaults:metadata:type: abstractcomponent: iam-rolevars:enabled: truemax_session_duration: 3600tags:ManagedBy: Atmos
# stacks/orgs/acme/plat/prod/us-east-1.yaml -- EKS IRSA roleimport:- catalog/iam-role/_defaultscomponents:terraform:eks-pod-identity-role:metadata:component: iam-roleinherits:- iam-role/defaultsvars:name: eks-pod-identitymanaged_policy_arns:- "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
Multi-Inheritance Composition
Compose a production RDS from abstract traits (defaults, logging, production, sizing):
# stacks/orgs/acme/plat/prod/us-east-1.yamlimport:- catalog/base/defaults # vars: enabled, tags.managed_by- catalog/base/logging # vars: logging_enabled, log_retention_days- catalog/base/production # vars: multi_az, deletion_protection, tags.environment- catalog/size/large # vars: instance_class, storage_size, max_connectionscomponents:terraform:rds:metadata:component: rdsinherits:- base/defaults- base/logging- base/production- size/largevars:name: prod-databaseengine: postgresengine_version: "15.4"
All traits are deep-merged in order. Inline vars have the highest precedence.