abc-ai/profiles/tf.md
Tiara Rodney 41481636d8
init
2026-02-05 01:51:29 +01:00

199 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Terraform Profile
## Concept → Terraform Mapping
| ABC Concept | Meaning | Terraform Mapping |
|---------------|-------------------------|----------------------------------------------------|
| ABCC0 | Construct | Terraform module |
| ABCC1 | Application Stack | Root Terraform module |
| ABCC2 | Logical Unit | Child module representing a domain |
| ABCC3 | Resource Group | Submodule representing a cohesive resource cluster |
| ABCC4 | Input Contract | variables.tf in a module |
| ABCC5 | Output Contract | outputs.tf in a module |
| ABCC6 | Instantiation Interface | `module "" { ... }` block |
| ABCC7 | Capturing Down | Passing variables from parent to child module |
| ABCC8 | Bubbling Up | Exposing outputs from child modules to parent |
## Proile Rules
Terraform profile rules follow the canonical identifier format:
```default
ABC-PROFILE-TF-R#
```
These rules are profilespecific, not core ABC rules.
### ABC-PROFILE-TF-R1 (SHOULD)
Each ABC construct SHOULD be implemented as a Terraform module.
### ABC-PROFILE-TF-R2 (SHOULD)
The directory structure SHOULD reflect the ABC hierarchy:
```default
root/
main.tf
data/
main.tf
storage/
main.tf
database/
main.tf
logic/
main.tf
presentation/
main.tf
```
### ABC-PROFILE-TF-R3 (SHOULD)
Each module SHOULD contain:
* main.tf
* variables.tf (InputContract)
* outputs.tf (OutputContract)
### ABC-PROFILE-TF-R4 (MUST)
Module inputs MUST be declared exclusively in variables.tf.
### ABC-PROFILE-TF-R5 (MUST)
Module outputs MUST be declared exclusively in outputs.tf.
### ABC-PROFILE-TF-R6 (MUST)
Modules MUST NOT reference parent or sibling modules directly; all data MUST
flow through variables and outputs.
(This enforces ABCR22, ABCR40, ABCR42.)
### ABC-PROFILE-TF-R7 (MUST)
Modules MUST be instantiated using a module “<name>” { … } block with explicit
variable assignments.
### ABC-PROFILE-TF-R8 (MUST)
Modules MUST NOT read Terraform state from other modules except via outputs.
### ABC-PROFILE-TF-R9 (MUST)
Capturing Down MUST be implemented by passing parent variables or outputs into
child module inputs.
### ABC-PROFILE-TF-R10 (MUST)
Bubbling Up MUST be implemented by exposing child module outputs and reexposing
them in the parent module if needed.
### ABC-PROFILE-TF-R11 (MUST)
Resource definitions MUST reside only in Resource Group modules (ABCC3).
### ABC-PROFILE-TF-R12 (MUST)
Logical Units MUST NOT contain Terraform resources directly.
### ABC-PROFILE-TF-R13 (SHOULD)
Logical Units SHOULD only orchestrate child modules and expose aggregated
outputs.
## Canonical Example
A minimal 3tier ABC architecture in Terraform.
### Application Stack
```hcl
module "data" {
source = "./data"
environment = var.environment
region = var.region
}
module "logic" {
source = "./logic"
environment = var.environment
region = var.region
database_endpoint = module.data.database_endpoint
}
module "presentation" {
source = "./presentation"
environment = var.environment
region = var.region
frontend_assets_bucket = module.data.storage_bucket_name
api_endpoint = module.logic.api_endpoint
}
output "frontend_url" {
value = module.presentation.frontend_url
}
output "api_endpoint" {
value = module.logic.api_endpoint
}
```
```hcl
variable "environment" { type = string }
variable "region" { type = string }
```
### Data Logical Unit
```default
module "storage" {
source = "./storage"
environment = var.environment
region = var.region
storage_class = var.storage_class
}
module "database" {
source = "./database"
environment = var.environment
db_engine = var.db_engine
db_instance_size = var.db_instance_size
}
output "storage_bucket_name" {
value = module.storage.bucket_name
}
output "database_endpoint" {
value = module.database.endpoint
}
```
```default
variable "environment" { type = string }
variable "region" { type = string }
variable "storage_class" { type = string }
variable "db_engine" { type = string }
variable "db_instance_size" { type = string }
```
#### Storage Resource Group
```hcl
resource "aws_s3_bucket" "bucket" {
bucket = "${var.environment}-storage"
}
```
```hcl
variable "environment" { type = string }
variable "region" { type = string }
variable "storage_class" { type = string }
```
```hcl
output "bucket_name" {
value = aws_s3_bucket.bucket.bucket
}
```