module "scheduled_task" {
source = "registry.patterneddesigns.ca/patterneddesigns/lambda-function/aws"
version = "3.1.0"
function_name = "daily-report"
runtime = "python3.12"
handler = "main.handler"
source_path = "./src"
timeout = 900 # 15 minutes for long-running reports
environment_variables = {
REPORT_BUCKET = aws_s3_bucket.reports.id
}
}
resource "aws_cloudwatch_event_rule" "daily" {
name = "daily-report"
schedule_expression = "cron(0 6 * * ? *)" # 6 AM UTC daily
}
resource "aws_cloudwatch_event_target" "lambda" {
rule = aws_cloudwatch_event_rule.daily.name
target_id = "DailyReport"
arn = module.scheduled_task.function_arn
}
resource "aws_lambda_permission" "events" {
statement_id = "AllowCloudWatchEvents"
action = "lambda:InvokeFunction"
function_name = module.scheduled_task.function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.daily.arn
}