7
7
Stack ,
8
8
RemovalPolicy ,
9
9
aws_events as events ,
10
+ aws_lambda_event_sources as lambda_event_sources ,
10
11
aws_events_targets as events_targets ,
12
+ aws_sqs as sqs ,
11
13
aws_s3_notifications as s3_notifications ,
12
14
)
13
15
import boto3
@@ -49,6 +51,14 @@ def __init__(
49
51
billing_mode = dynamodb .BillingMode .PAY_PER_REQUEST
50
52
)
51
53
54
+ ######################################## SQS Configurations #####################################################
55
+ sqs_queue_to_send_delayed_message_when_new_file_is_downloaded = sqs .Queue (
56
+ self ,
57
+ f"{ stack_name } -sqs_queue_to_send_delayed_message_when_new_file_is_downloaded" ,
58
+ visibility_timeout = Duration .minutes (15 ),
59
+ delivery_delay = Duration .minutes (5 ),
60
+ )
61
+
52
62
######################################## SECRET MANAGER Configurations ##########################################
53
63
__db_secrets = get_secret_from_secrets_manager (self ._secret_manager_client , "db_secret" )
54
64
__kaggle_secrets = get_secret_from_secrets_manager (self ._secret_manager_client , "kaggle_credentials" )
@@ -76,6 +86,7 @@ def __init__(
76
86
handler = "download_from_cricsheet_lambda_function.handler" ,
77
87
runtime = _lambda .Runtime .PYTHON_3_11 ,
78
88
environment = {
89
+ "DELAYED_SQS_QUEUE_URL" : sqs_queue_to_send_delayed_message_when_new_file_is_downloaded .queue_url ,
79
90
"DOWNLOAD_BUCKET_NAME" : cricsheet_data_downloading_bucket .bucket_name ,
80
91
"DYNAMODB_TABLE_NAME" : dynamodb_to_store_file_status_data .table_name ,
81
92
"THRESHOLD_FOR_NUMBER_OF_FILES_TO_BE_SENT_FOR_PROCESSING" : THRESHOLD_FOR_NUMBER_OF_FILES_TO_BE_SENT_FOR_PROCESSING ,
@@ -101,6 +112,8 @@ def __init__(
101
112
resources = ["*" ],
102
113
)
103
114
)
115
+ # Granting permissions to the Lambda function to send messages to the SQS queue
116
+ sqs_queue_to_send_delayed_message_when_new_file_is_downloaded .grant_send_messages (cricsheet_data_downloading_lambda )
104
117
# EventBridge Rule to trigger the Lambda every Monday at 12:00 AM UTC
105
118
event_bridge_rule_to_trigger_cricsheet_data_downloading_lambda = events .Rule (
106
119
self ,
@@ -270,6 +283,13 @@ def __init__(
270
283
resources = ["*" ],
271
284
)
272
285
)
286
+ # Trgerring the convert_mongodb_data_to_csv lambda function with delayed SQS message
287
+ convert_mongodb_data_to_csv_lambda .add_event_source (
288
+ lambda_event_sources .SqsEventSource (
289
+ sqs_queue_to_send_delayed_message_when_new_file_is_downloaded ,
290
+ batch_size = 1 ,
291
+ )
292
+ )
273
293
274
294
# Lambda function to upload the dataset to KAGGLE and create a new version of dataset
275
295
upload_dataset_to_kaggle_lambda = _lambda .Function (
0 commit comments