Scheduled Function

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
}