locals { alarm_functions = { unlock = { function_name = aws_lambda_function.unlock.function_name description = "door-unlock-api-unlock Lambda is erroring — physical door unlock calls may be failing" } lockdown = { function_name = aws_lambda_function.lockdown.function_name description = "door-unlock-api-lockdown Lambda is erroring — lockdown commands may not be executing" } authorizer = { function_name = aws_lambda_function.authorizer.function_name description = "door-unlock-api-authorizer Lambda is erroring — all API requests will be rejected" } poller = { function_name = aws_lambda_function.poller.function_name description = "door-unlock-api-lockdown-poller Lambda is erroring — lockdown state polling may be broken" } blf_sync = { function_name = aws_lambda_function.blf_sync.function_name description = "door-unlock-api-blf-sync Lambda is erroring — department BLF updates may not be applying" } } } resource "aws_cloudwatch_metric_alarm" "lambda_errors" { for_each = local.alarm_functions alarm_name = "${each.value.function_name}-errors" alarm_description = each.value.description namespace = "AWS/Lambda" metric_name = "Errors" statistic = "Sum" period = 300 evaluation_periods = 1 threshold = 0 comparison_operator = "GreaterThanThreshold" treat_missing_data = "notBreaching" alarm_actions = [data.aws_sns_topic.site_alerts.arn] dimensions = { FunctionName = each.value.function_name } }