
sifts_statePAY_PER_REQUEST (on-demand).hash_key (pk), range_key (sk).resource "aws_dynamodb_table" "sifts_state" {
name = "sifts_state"
billing_mode = "PAY_PER_REQUEST"
hash_key = "pk"
range_key = "sk"
deletion_protection_enabled = true
point_in_time_recovery {
enabled = true
}
server_side_encryption {
enabled = true
}
}
resource "aws_lambda_event_source_mapping" "integrates_streams" {
for_each = local.triggers
event_source_arn = aws_dynamodb_table.integrates_vms.stream_arn
function_name = aws_lambda_function.integrates_streams[each.key].arn
batch_size = each.value.batch_size
bisect_batch_on_function_error = true
maximum_retry_attempts = -1
starting_position = "TRIM_HORIZON"}
/aws/lambda/integrates_streams_*.ConsumedReadCapacityUnits / ConsumedWriteCapacityUnitsReadThrottleEvents / WriteThrottleEventsThrottledRequests (at API level)SystemErrors / UserErrorsSuccessfulRequestLatency IteratorAge - Age of last processed event (critical for detecting lag)Errors - Failed executionsDuration - Processing timeThrottles - Lambda concurrency issues
/aws/lambda/integrates_streams_*.fields @timestamp, @message
| filter @message like /ProvisionedThroughputExceededException|Throttling|TransactionCanceledException/| sort @timestamp desc
| limit 100
fields @timestamp, @message
| filter @message like /ConditionalCheckFailedException/| sort @timestamp desc
| limit 100
fields @timestamp, @message
| filter @message like /ClientError|ReadTimeout|ConnectTimeout|Retry/| sort @timestamp desc
| limit 100
fields @timestamp, @message
| filter @message like /BulkIndexError|bisect|retry|validation|UnprocessedItems/| sort @timestamp desc
| limit 100
runs/vpc/infra/alarms.tf. resource "aws_cloudwatch_metric_alarm" "dynamodb_write_capacity_alarm" {
for_each = toset(var.dynamodb_table_names)
metric_name = "ConsumedWriteCapacityUnits" namespace = "AWS/DynamoDB" period = 300
statistic = "Sum" threshold = var.write_capacity_threshold
alarm_actions = [aws_sns_topic.central_alarms.arn]
}
var.dynamodb_table_names variable.