55# Layers (applied in order):
66# 0-state — S3 backend + DynamoDB lock table (local state bootstrap)
77# 1-network — VPC, subnets, DNS, ACM
8- # 2-data — RDS, ECR, KMS, Secrets Manager
8+ # 2-data — RDS, ECR, KMS, Secrets Manager, CI/CD IAM
99# 3-eks — EKS cluster, IRSA, storage classes
1010# 4-bootstrap — Karpenter, ALB controller, external-secrets
1111#
@@ -28,8 +28,11 @@ TF_VAR_FLAG := $(if $(TFVARS),-var-file=$(abspath $(TFVARS)),)
2828# Base directory for all Terraform layers.
2929TF_DIR := infra/terraform
3030
31- # Layers in apply order (0 → 4).
32- LAYERS := 0-state 1-network 2-data 3-eks 4-bootstrap
31+ # Remote layers (require S3 backend from layer 0).
32+ REMOTE_LAYERS := 1-network 2-data 3-eks 4-bootstrap
33+
34+ # All layers in apply order.
35+ LAYERS := 0-state $(REMOTE_LAYERS )
3336
3437# Reverse order for destroy (4 → 0).
3538LAYERS_REV := 4-bootstrap 3-eks 2-data 1-network 0-state
@@ -58,10 +61,12 @@ help: ## Show available commands.
5861# =============================================================================
5962# init
6063# =============================================================================
61- init : # # Run terraform init in every layer (0→4).
62- @echo " ==> Initializing layer 0-state (local backend — bootstraps S3 state)..."
63- @cd $(TF_DIR ) /0-state && terraform init
64- @for layer in 1-network 2-data 3-eks 4-bootstrap; do \
64+ init : # # Run terraform init in every layer (0→4). Applies layer 0 first if S3 bucket missing.
65+ @echo " ==> Initializing layer 0-state (local backend)..."
66+ @ ( cd $( TF_DIR) /0-state && terraform init )
67+ @echo " ==> Applying layer 0-state to ensure S3 backend exists..."
68+ @ ( cd $( TF_DIR) /0-state && terraform apply -auto-approve $( TF_VAR_FLAG) )
69+ @for layer in $(REMOTE_LAYERS ) ; do \
6570 echo " ==> Initializing layer $$ layer..." ; \
6671 ( cd $( CURDIR) /$( TF_DIR) /$$ layer && terraform init ) || exit 1; \
6772 done
@@ -79,9 +84,9 @@ plan: ## Run terraform plan in every layer (0→4).
7984# apply
8085# =============================================================================
8186apply : # # Run terraform apply -auto-approve in every layer (0→4).
82- @echo " ==> Layer 0-state uses local state and must succeed before remote layers."
8387 @for layer in $(LAYERS ) ; do \
8488 echo " ==> Applying layer $$ layer..." ; \
89+ ( cd $( CURDIR) /$( TF_DIR) /$$ layer && terraform init ) || exit 1; \
8590 ( cd $( CURDIR) /$( TF_DIR) /$$ layer && terraform apply -auto-approve $( TF_VAR_FLAG) ) || exit 1; \
8691 done
8792
0 commit comments