feat(P02 W0): dynamodb L1 primitive — interface, terraform, registry, tests (REQ-322)

New L1 module modules/l1/dynamodb/ (stack type aws:dynamodb:table).
Terraform aws_dynamodb_table with PK + optional SK, PAY_PER_REQUEST
default, SSE-KMS + PITR + prevent_destroy per v1.8 NFR defaults.
Registry entry (kind l1), catalog row, test_adapter.py updated to
15 entries / 13 L1. 45 tests passing.

---ci---
project: acdl
phase: 2
milestone: v1.26
status: execute
phase_role: execution
wave: 0
requirements: [REQ-322]
---/ci---
This commit is contained in:
Jon Chery
2026-08-18 00:22:19 +00:00
parent d022ddcea6
commit 9f94103c57
8 changed files with 207 additions and 5 deletions
+38
View File
@@ -0,0 +1,38 @@
# DynamoDB L1 Primitive
> Stack type: `aws:dynamodb:table` → Terraform `aws_dynamodb_table`
## Description
A DynamoDB table primitive with encryption + point-in-time recovery
enabled by default (per v1.8 NFR defaults). Supports a partition key
(required) + optional sort key. Default billing mode is
`PAY_PER_REQUEST` (on-demand).
## Inputs
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| `table_name` | string | yes | — | Globally-unique table name |
| `region` | string | yes | — | AWS region |
| `pk` | string | yes | — | Partition key attribute name |
| `sk` | string | no | `""` | Sort key attribute name |
| `billing_mode` | string | no | `PAY_PER_REQUEST` | Billing mode |
| `enabled` | boolean | no | `true` | Feature flag |
## Outputs
| Name | Type | Description |
|---|---|---|
| `table_arn` | arn | The table ARN |
| `table_name` | string | The table name |
## NFRs
- **Encryption:** SSE-KMS enabled by default.
- **Point-in-time recovery:** Enabled by default.
- **Deletion protection:** `prevent_destroy = true` (Terraform lifecycle).
## Examples
See `examples/simple.yaml`.
+4
View File
@@ -0,0 +1,4 @@
table_name: nova-simple-ledger
region: us-east-1
pk: block_index
billing_mode: PAY_PER_REQUEST
+10
View File
@@ -0,0 +1,10 @@
{
"module": "dynamodb",
"version": "1.0.0",
"inputs": {
"table_name": "nova-blockchain-ledger",
"region": "us-east-1",
"pk": "block_index",
"billing_mode": "PAY_PER_REQUEST"
}
}
+66
View File
@@ -0,0 +1,66 @@
{
"name": "dynamodb",
"version": "1.0.0",
"kind": "l1",
"type": "aws:dynamodb:table",
"description": "DynamoDB table primitive (engine-agnostic stack type aws:dynamodb:table; the Terraform adapter translates to aws_dynamodb_table). Encryption + PITR enabled per v1.8 NFR defaults.",
"inputs": {
"table_name": {
"type": "string",
"description": "Globally-unique DynamoDB table name.",
"required": true
},
"region": {
"type": "string",
"description": "AWS region the table is created in.",
"required": true
},
"pk": {
"type": "string",
"description": "Partition key attribute name.",
"required": true
},
"sk": {
"type": "string",
"description": "Sort key attribute name (optional).",
"required": false
},
"billing_mode": {
"type": "string",
"default": "PAY_PER_REQUEST",
"description": "Billing mode: PAY_PER_REQUEST or PROVISIONED."
},
"enabled": {
"type": "boolean",
"default": true,
"description": "Feature flag: enable/disable this module."
}
},
"outputs": {
"table_arn": {
"type": "arn",
"description": "The DynamoDB table ARN."
},
"table_name": {
"type": "string",
"description": "The table name (echoes the input)."
}
},
"nfrs": {
"encryption_enabled": {
"type": "boolean",
"description": "Enable server-side encryption (KMS).",
"default": true
},
"point_in_time_recovery": {
"type": "boolean",
"description": "Enable point-in-time recovery.",
"default": true
},
"deletion_protection": {
"type": "boolean",
"description": "Prevent resource destruction via Terraform lifecycle prevent_destroy.",
"default": true
}
}
}
+74
View File
@@ -0,0 +1,74 @@
resource "aws_dynamodb_table" "this" {
count = var.enabled ? 1 : 0
name = var.table_name
billing_mode = var.billing_mode
hash_key = var.pk
range_key = var.sk != "" ? var.sk : null
attribute {
name = var.pk
type = "S"
}
dynamic "attribute" {
for_each = var.sk != "" ? [var.sk] : []
content {
name = attribute.value
type = "S"
}
}
point_in_time_recovery {
enabled = true
}
server_side_encryption {
enabled = true
}
tags = {
"nova:managed-by" = "platform"
"nova:module" = "dynamodb"
}
lifecycle {
prevent_destroy = true
}
}
variable "table_name" {
type = string
}
variable "region" {
type = string
default = "us-east-1"
}
variable "pk" {
type = string
}
variable "sk" {
type = string
default = ""
}
variable "billing_mode" {
type = string
default = "PAY_PER_REQUEST"
}
variable "enabled" {
type = bool
default = true
}
output "table_arn" {
value = var.enabled ? aws_dynamodb_table.this[0].arn : ""
}
output "table_name" {
value = var.enabled ? aws_dynamodb_table.this[0].name : ""
}