@@ -404,19 +404,55 @@ resource "aws_cloudwatch_metric_alarm" "vault_data_integrity_check_lambda_iterat
404404// Cloudwatch log subscription filters
405405
406406locals {
407- map_of_lambda_log_group = {
408- audit_logs = var.lambda_audit_logs_log_group_name,
409- audit_logs_archiver = var.lambda_audit_logs_archiver_log_group_name,
410- form_archiver = var.lambda_form_archiver_log_group_name,
411- nagware = var.lambda_nagware_log_group_name,
412- reliability = var.lambda_reliability_log_group_name,
413- reliability_dlq_consumer = var.lambda_reliability_dlq_consumer_log_group_name,
414- response_archiver = var.lambda_response_archiver_log_group_name,
415- submission = var.lambda_submission_log_group_name,
416- vault_integrity = var.lambda_vault_integrity_log_group_name,
417- api_end_to_end_test = var.lambda_api_end_to_end_test_log_group_name,
418- file_upload_processor = var.lambda_file_upload_processor_log_group_name,
419- file_upload_cleanup = var.lambda_file_upload_cleanup_log_group_name
407+ map_of_forms_app_lambda = {
408+ audit_logs = {
409+ function_name = var.todo
410+ log_group_name = var.lambda_audit_logs_log_group_name
411+ }
412+ audit_logs_archiver = {
413+ function_name = var.todo
414+ log_group_name = var.lambda_audit_logs_archiver_log_group_name
415+ }
416+ form_archiver = {
417+ function_name = var.todo
418+ log_group_name = var.lambda_form_archiver_log_group_name
419+ }
420+ nagware = {
421+ function_name = var.todo
422+ log_group_name = var.lambda_nagware_log_group_name
423+ }
424+ reliability = {
425+ function_name = var.todo
426+ log_group_name = var.lambda_reliability_log_group_name
427+ }
428+ reliability_dlq_consumer = {
429+ function_name = var.todo
430+ log_group_name = var.lambda_reliability_dlq_consumer_log_group_name
431+ }
432+ response_archiver = {
433+ function_name = var.todo
434+ log_group_name = var.lambda_response_archiver_log_group_name
435+ }
436+ submission = {
437+ function_name = var.todo
438+ log_group_name = var.lambda_submission_log_group_name
439+ }
440+ vault_integrity = {
441+ function_name = var.todo
442+ log_group_name = var.lambda_vault_integrity_log_group_name
443+ }
444+ api_end_to_end_test = {
445+ function_name = var.todo
446+ log_group_name = var.lambda_api_end_to_end_test_log_group_name
447+ }
448+ file_upload_processor = {
449+ function_name = var.todo
450+ log_group_name = var.lambda_file_upload_processor_log_group_name
451+ }
452+ file_upload_cleanup = {
453+ function_name = var.todo
454+ log_group_name = var.lambda_file_upload_cleanup_log_group_name
455+ }
420456 }
421457}
422458
@@ -441,25 +477,31 @@ resource "aws_cloudwatch_log_subscription_filter" "forms_app_log_stream" {
441477}
442478
443479resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
444- for_each = local. map_of_lambda_log_group
480+ for_each = local. map_of_forms_app_lambda
445481 name = " error_detection_in_${ each . key } _lambda_logs"
446- log_group_name = each. value
482+ log_group_name = each. value . log_group_name
447483 filter_pattern = " {($.level = \" warn\" ) || ($.level = \" error\" )}"
448484 destination_arn = aws_lambda_function. notify_slack . arn
449485}
450486
451- /*
452- * Lambda timeout detection
453- * Note: We used the second and final lambda subscription filter to detect function time out.
454- * If we ever need to create a new subscription filter we will have to rework the way we parse logs to extract errors and time out logs.
455- */
487+ resource "aws_cloudwatch_metric_alarm" "forms_app_lambda_error_detection" {
488+ for_each = local. map_of_forms_app_lambda
489+ alarm_name = " ${ each . key } -lambda-error-detection"
490+ alarm_description = " Detects when the ${ each . key } lambda function logs/throws an error or times out"
491+ comparison_operator = " GreaterThanThreshold"
492+ evaluation_periods = " 1"
493+ metric_name = " Errors"
494+ namespace = " AWS/Lambda"
495+ period = " 60"
496+ statistic = " Sum"
497+ threshold = " 0"
498+ treat_missing_data = " notBreaching"
456499
457- resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
458- for_each = local. map_of_lambda_log_group
459- name = " timeout_detection_in_${ each . key } _lambda_logs"
460- log_group_name = each. value
461- filter_pattern = " Task timed out"
462- destination_arn = aws_lambda_function. notify_slack . arn
500+ dimensions = {
501+ FunctionName = each.value.function_name
502+ }
503+
504+ alarm_actions = [var . sns_topic_alert_critical_arn ]
463505}
464506
465507// Allow Cloudwatch filters to trigger Lambda
0 commit comments