locals { schedules = { "lockdown-poller-schedule" = { description = "Poll LenelS2 lockdown status every minute" schedule = "rate(1 minute)" function_arn = aws_lambda_function.poller.arn function_name = aws_lambda_function.poller.function_name } "blf-sync-schedule" = { description = "Sync 3CX department BLFs daily at 09:00 UTC" schedule = "cron(0 9 * * ? *)" function_arn = aws_lambda_function.blf_sync.arn function_name = aws_lambda_function.blf_sync.function_name } } } resource "aws_cloudwatch_event_rule" "schedule" { for_each = local.schedules name = "${local.project}-${each.key}" description = each.value.description schedule_expression = each.value.schedule state = var.enable_schedules ? "ENABLED" : "DISABLED" } resource "aws_cloudwatch_event_target" "schedule" { for_each = local.schedules rule = aws_cloudwatch_event_rule.schedule[each.key].name target_id = "${local.project}-${each.key}" arn = each.value.function_arn } resource "aws_lambda_permission" "schedule" { for_each = local.schedules statement_id = "AllowEventBridgeInvoke-${each.key}" action = "lambda:InvokeFunction" function_name = each.value.function_name principal = "events.amazonaws.com" source_arn = aws_cloudwatch_event_rule.schedule[each.key].arn }