diff --git a/terraform/api.tf b/terraform/api.tf index b789010..ac88243 100644 --- a/terraform/api.tf +++ b/terraform/api.tf @@ -123,8 +123,8 @@ resource "aws_lambda_function" "procurement_api" { environment { variables = { VERIFIED_SITES_TABLE = aws_dynamodb_table.verified_sites.name - WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders.name - COMMENTS_TABLE = aws_dynamodb_table.work_order_comments.name + WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders_kebab.name + COMMENTS_TABLE = aws_dynamodb_table.work_order_comments_kebab.name PO_TABLE = aws_dynamodb_table.purchase_orders.name WEB_UI_AUTH_TOKEN_SECRET_ARN = var.web_ui_auth_token_secret_arn } diff --git a/terraform/iam.tf b/terraform/iam.tf index 9bd7b79..5cf06b9 100644 --- a/terraform/iam.tf +++ b/terraform/iam.tf @@ -357,10 +357,10 @@ resource "aws_iam_role_policy" "wo_email_processor_ddb" { "dynamodb:UpdateItem", ] Resource = [ - aws_dynamodb_table.work_orders.arn, - "${aws_dynamodb_table.work_orders.arn}/index/*", - aws_dynamodb_table.work_order_comments.arn, - "${aws_dynamodb_table.work_order_comments.arn}/index/*", + aws_dynamodb_table.work_orders_kebab.arn, + "${aws_dynamodb_table.work_orders_kebab.arn}/index/*", + aws_dynamodb_table.work_order_comments_kebab.arn, + "${aws_dynamodb_table.work_order_comments_kebab.arn}/index/*", ] } ] @@ -421,10 +421,10 @@ resource "aws_iam_role_policy" "wo_web_ui_ddb" { "dynamodb:Scan", ] Resource = [ - aws_dynamodb_table.work_orders.arn, - "${aws_dynamodb_table.work_orders.arn}/index/*", - aws_dynamodb_table.work_order_comments.arn, - "${aws_dynamodb_table.work_order_comments.arn}/index/*", + aws_dynamodb_table.work_orders_kebab.arn, + "${aws_dynamodb_table.work_orders_kebab.arn}/index/*", + aws_dynamodb_table.work_order_comments_kebab.arn, + "${aws_dynamodb_table.work_order_comments_kebab.arn}/index/*", ] } ] @@ -468,16 +468,16 @@ resource "aws_iam_role_policy" "wo_shoc_emitter_streams" { "dynamodb:ListStreams", ] Resource = [ - aws_dynamodb_table.work_orders.stream_arn, - aws_dynamodb_table.work_order_comments.stream_arn, + aws_dynamodb_table.work_orders_kebab.stream_arn, + aws_dynamodb_table.work_order_comments_kebab.stream_arn, ] }, { Effect = "Allow" Action = ["dynamodb:DescribeTable"] Resource = [ - aws_dynamodb_table.work_orders.arn, - aws_dynamodb_table.work_order_comments.arn, + aws_dynamodb_table.work_orders_kebab.arn, + aws_dynamodb_table.work_order_comments_kebab.arn, ] } ] @@ -635,10 +635,10 @@ resource "aws_iam_role_policy" "procurement_api_ddb" { "${aws_dynamodb_table.purchase_orders.arn}/index/*", aws_dynamodb_table.verified_sites.arn, "${aws_dynamodb_table.verified_sites.arn}/index/*", - aws_dynamodb_table.work_orders.arn, - "${aws_dynamodb_table.work_orders.arn}/index/*", - aws_dynamodb_table.work_order_comments.arn, - "${aws_dynamodb_table.work_order_comments.arn}/index/*", + aws_dynamodb_table.work_orders_kebab.arn, + "${aws_dynamodb_table.work_orders_kebab.arn}/index/*", + aws_dynamodb_table.work_order_comments_kebab.arn, + "${aws_dynamodb_table.work_order_comments_kebab.arn}/index/*", ] } ] diff --git a/terraform/imports.tf b/terraform/imports.tf index 2bd3a9a..1b35db0 100644 --- a/terraform/imports.tf +++ b/terraform/imports.tf @@ -570,25 +570,9 @@ import { id = "workorder-shoc-emitter-rejected-messages" } -import { - to = aws_cloudwatch_metric_alarm.wo_ddb_throttles["WorkOrders"] - id = "WorkOrders-throttles" -} - -import { - to = aws_cloudwatch_metric_alarm.wo_ddb_system_errors["WorkOrders"] - id = "WorkOrders-system-errors" -} - -import { - to = aws_cloudwatch_metric_alarm.wo_ddb_throttles["WorkOrderComments"] - id = "WorkOrderComments-throttles" -} - -import { - to = aws_cloudwatch_metric_alarm.wo_ddb_system_errors["WorkOrderComments"] - id = "WorkOrderComments-system-errors" -} +# PLAT-11 cutover: PascalCase WO DDB alarm imports removed when alarm map +# keys moved to work-orders / work-order-comments. Legacy alarm resources are +# destroyed by the cutover apply; kebab alarms are created fresh. # --- CloudWatch alarms (API) --- import { diff --git a/terraform/wo_ddb.tf b/terraform/wo_ddb.tf index 337560c..d447e79 100644 --- a/terraform/wo_ddb.tf +++ b/terraform/wo_ddb.tf @@ -1,6 +1,5 @@ -# PLAT-11: PascalCase tables remain authoritative until the freeze cutover. -# Kebab tables are created empty in the prep apply; writers/ESMs stay on legacy -# until docs/plat-11/cutover-runbook.md Phase 2. +# PLAT-11: PascalCase tables retained until decommission soak. +# Writers/ESMs/alarms point at kebab tables after the freeze cutover. resource "aws_dynamodb_table" "work_orders" { name = "WorkOrders" @@ -87,10 +86,10 @@ resource "aws_dynamodb_table" "work_order_comments_kebab" { } locals { - # Alarms stay on the live writer tables (legacy until cutover). + # Alarms follow live writer tables after PLAT-11 cutover. wo_ddb_alarm_tables = { - "WorkOrders" = aws_dynamodb_table.work_orders.name - "WorkOrderComments" = aws_dynamodb_table.work_order_comments.name + "work-orders" = aws_dynamodb_table.work_orders_kebab.name + "work-order-comments" = aws_dynamodb_table.work_order_comments_kebab.name } } diff --git a/terraform/wo_lambda.tf b/terraform/wo_lambda.tf index cccc2f6..9aefb4c 100644 --- a/terraform/wo_lambda.tf +++ b/terraform/wo_lambda.tf @@ -35,8 +35,8 @@ resource "aws_lambda_function" "wo_email_processor" { environment { variables = { - WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders.name - COMMENTS_TABLE = aws_dynamodb_table.work_order_comments.name + WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders_kebab.name + COMMENTS_TABLE = aws_dynamodb_table.work_order_comments_kebab.name ALLOWED_DKIM_DOMAINS = "seahaven.com" BEDROCK_MODEL_ID = local.bedrock_model_id } @@ -68,8 +68,8 @@ resource "aws_lambda_function" "wo_web_ui" { environment { variables = { - WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders.name - COMMENTS_TABLE = aws_dynamodb_table.work_order_comments.name + WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders_kebab.name + COMMENTS_TABLE = aws_dynamodb_table.work_order_comments_kebab.name WEB_UI_AUTH_TOKEN_SECRET_ARN = var.web_ui_auth_token_secret_arn } } diff --git a/terraform/wo_shoc.tf b/terraform/wo_shoc.tf index dee5526..70531a5 100644 --- a/terraform/wo_shoc.tf +++ b/terraform/wo_shoc.tf @@ -293,8 +293,8 @@ resource "aws_lambda_function" "wo_shoc_emitter" { REJECTED_QUEUE_URL = aws_sqs_queue.shoc_emitter_rejected.url SHOC_WEBHOOK_URL = var.shoc_webhook_url # Stream ARN classification (PLAT-11); must match ESM source table names. - WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders.name - COMMENTS_TABLE = aws_dynamodb_table.work_order_comments.name + WORK_ORDERS_TABLE = aws_dynamodb_table.work_orders_kebab.name + COMMENTS_TABLE = aws_dynamodb_table.work_order_comments_kebab.name } } @@ -310,7 +310,7 @@ resource "aws_lambda_function" "wo_shoc_emitter" { } resource "aws_lambda_event_source_mapping" "wo_shoc_emitter_work_orders" { - event_source_arn = aws_dynamodb_table.work_orders.stream_arn + event_source_arn = aws_dynamodb_table.work_orders_kebab.stream_arn function_name = aws_lambda_function.wo_shoc_emitter.arn starting_position = "LATEST" batch_size = 10 @@ -329,7 +329,7 @@ resource "aws_lambda_event_source_mapping" "wo_shoc_emitter_work_orders" { } resource "aws_lambda_event_source_mapping" "wo_shoc_emitter_comments" { - event_source_arn = aws_dynamodb_table.work_order_comments.stream_arn + event_source_arn = aws_dynamodb_table.work_order_comments_kebab.stream_arn function_name = aws_lambda_function.wo_shoc_emitter.arn starting_position = "LATEST" batch_size = 10