Scheduled Events

Jets supports Scheduled Events. This allows you to have a Lambda function run on a scheduled based. The scheduled event is a Amazon EventBridge rule.

Example

Generate code.

jets generate:event cool --trigger scheduled

It looks something like this.

app/events/cool_event.rb

class CoolEvent < ApplicationEvent
  rate "10 hours"
  def handle
    puts "Do something with event #{JSON.dump(event)}"
  end
end

You can use cron-like expressions

cron(0 12 * * ? *)            # runs every day at 12:00pm UTC
cron(5,35 14 * * ? *)         # runs every day, at 2:05pm and 2:35pm UTC
cron(15 10 ? * 6L 2019-2022)  # runs at 10:15am UTC on the last Friday of
                              # each month during the years 2019 to 2022

** Note **: The [AWS Cron] (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html) syntax is slightly different from the Linux cron syntax. The AWS Cron format has six required fields, which is slightly different from the traditional Linux cron format, which has five fields. There’s also a ? notation, which means any day of the month.

You can also use rate expresions

rate(1 minute)
rate(5 minutes)
rate(1 hour)
rate(1 day)

Note: Notice the singular 1 minute vs plural 5 minutes.

Jets 6 and above also uses fugit internally to allow user-friendly expressions like 5m to 5 minutes.

Tailing Logs

It helps to tail the logs and watch the event as it comes through.

jets logs -f -n cool_event-handle

Event Payloads

The event payload from the Scheduled Event is pretty simple.

event

{
  "version": "0",
  "id": "3a0b6d51-b30a-7d45-1468-acc58fff5558",
  "detail-type": "Scheduled Event",
  "source": "aws.events",
  "account": "1122334455",
  "time": "2023-12-24T15:48:05Z",
  "region": "us-west-2",
  "resources": [
    "arn:aws:events:us-west-2:1122334455:rule/demo-dev-CoolEvent-1VH3QUF-CoolEventPerformEventsRule-X2ZUwbcS7f5J"
  ],
  "detail": {}
}