diff --git a/provisioning/base/resources.tf b/provisioning/base/resources.tf index 27d4329..f703633 100644 --- a/provisioning/base/resources.tf +++ b/provisioning/base/resources.tf @@ -2,6 +2,15 @@ provider "aws" { region = "us-east-1" } +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 6.0" + } + } +} + variable "environment" { type = string default = "qa" @@ -56,3 +65,63 @@ resource "aws_lambda_function" "lambda_instance" { } } } + +# Alarms + +locals { + metric_base = "M2CustomerCodeStore" + log_metric_name = "${local.metric_base}LogError" + lambda_runtime_error_name = "${local.metric_base}LambdaError" +} + +data "aws_sns_topic" "rc_alarms" { + name = "research-catalog-team-alarms-${var.environment}" +} + +resource "aws_cloudwatch_log_metric_filter" "error_metric_filter" { + name = "${local.log_metric_name}-${var.environment}" + pattern = "{ $.level = \"error\" }" + log_group_name = "/aws/lambda/${aws_lambda_function.lambda_instance.function_name}" + + metric_transformation { + name = "${local.log_metric_name}-${var.environment}" + namespace = "LogMetrics" + value = "1" + } +} + +resource "aws_cloudwatch_metric_alarm" "log_errors" { + alarm_name = "${local.log_metric_name}Alarm-${var.environment}" + comparison_operator = "GreaterThanThreshold" + evaluation_periods = 1 + metric_name = local.log_metric_name + namespace = "LogMetrics" + period = 300 + statistic = "Sum" + threshold = 0 + alarm_description = "Lambda function ${aws_lambda_function.lambda_instance.function_name} has more than 0 error logs in 5 minutes" + alarm_actions = [data.aws_sns_topic.rc_alarms.arn] + treat_missing_data = "notBreaching" + + dimensions = { + FunctionName = aws_lambda_function.lambda_instance.function_name + } +} + +resource "aws_cloudwatch_metric_alarm" "lambda_errors" { + alarm_name = "${local.lambda_runtime_error_name}Alarm-${var.environment}" + comparison_operator = "GreaterThanThreshold" + evaluation_periods = 1 + metric_name = "Errors" + namespace = "AWS/Lambda" + period = 300 + statistic = "Sum" + threshold = 0 + alarm_description = "Lambda function ${aws_lambda_function.lambda_instance.function_name} has more than 0 errors in 5 minutes" + alarm_actions = [data.aws_sns_topic.rc_alarms.arn] + treat_missing_data = "notBreaching" + + dimensions = { + FunctionName = aws_lambda_function.lambda_instance.function_name + } +}