Skip to content

Commit 8a250c6

Browse files
committed
[PRMP-583] Add Lambda and SQS modules for document review processing
1 parent 919df1b commit 8a250c6

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
module "document_review_processor_lambda" {
2+
source = "./modules/lambda"
3+
name = "DocumentReviewProcessor"
4+
handler = "handlers.document_review_processor.lambda_handler"
5+
iam_role_policy_documents = [
6+
module.document_review_queue.sqs_read_policy_document,
7+
module.document_review_queue.sqs_write_policy_document,
8+
]
9+
kms_deletion_window = var.kms_deletion_window
10+
is_gateway_integration_needed = false
11+
is_invoked_from_gateway = false
12+
rest_api_id = null
13+
api_execution_arn = null
14+
lambda_timeout = 900
15+
lambda_environment_variables = {
16+
DOCUMENT_REVIEW_BUCKET_NAME = "${terraform.workspace}-placeholder-document-review-bucket"
17+
DOCUMENT_REVIEW_TABLE_NAME = "${terraform.workspace}_placeholder_document_review_table"
18+
WORKSPACE = terraform.workspace
19+
}
20+
depends_on = []
21+
}
22+
23+
24+
resource "aws_lambda_event_source_mapping" "document-review-processor" {
25+
event_source_arn = module.document_review_queue.endpoint
26+
function_name = module.document_review_processor_lambda.lambda_arn
27+
}

infrastructure/sqs-review.tf

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
module "document_review_queue" {
2+
source = "./modules/sqs"
3+
name = "document-review"
4+
max_size_message = 256 * 1024
5+
message_retention = 60 * 60 * 24 * 14 # 14 days
6+
dlq_message_retention = 60 * 60 * 24 * 14 # 14 days
7+
environment = var.environment
8+
owner = var.owner
9+
max_visibility = 1020
10+
enable_deduplication = true
11+
enable_dlq = true
12+
delay = 60
13+
enable_sse = true
14+
15+
}
16+
17+
resource "aws_cloudwatch_metric_alarm" "review_dlq_new_messages" {
18+
alarm_name = "${terraform.workspace}_review_dlq_messages"
19+
comparison_operator = "GreaterThanThreshold"
20+
evaluation_periods = 1
21+
metric_name = "ApproximateNumberOfMessagesVisible"
22+
namespace = "AWS/SQS"
23+
period = 60
24+
statistic = "Sum"
25+
threshold = 0
26+
alarm_description = "Alarm when there are new messages in the document review dlq"
27+
alarm_actions = [module.document_review_dlq_alarm_topic.arn]
28+
29+
dimensions = {
30+
QueueName = module.document_review_queue.dlq_name
31+
}
32+
}
33+
34+
module "document_review_dlq_alarm_topic" {
35+
source = "./modules/sns"
36+
sns_encryption_key_id = module.sns_encryption_key.id
37+
topic_name = "document_review_dlq_topic"
38+
topic_protocol = "email"
39+
is_topic_endpoint_list = true
40+
topic_endpoint_list = nonsensitive(split(",", data.aws_ssm_parameter.cloud_security_notification_email_list.value))
41+
delivery_policy = jsonencode({
42+
"Version" : "2012-10-17",
43+
"Statement" : [
44+
{
45+
"Effect" : "Allow",
46+
"Principal" : {
47+
"Service" : "cloudwatch.amazonaws.com"
48+
},
49+
"Action" : [
50+
"SNS:Publish"
51+
],
52+
"Condition" : {
53+
"ArnLike" : {
54+
"aws:SourceArn" : "arn:aws:cloudwatch:eu-west-2:${data.aws_caller_identity.current.account_id}:alarm:*"
55+
}
56+
},
57+
"Resource" : "*"
58+
}
59+
]
60+
})
61+
62+
depends_on = [module.document_review_queue]
63+
}

0 commit comments

Comments
 (0)