Skip to main content

AWS cron - last day of the month (EventBridge & Lambda)

At 04:30, every day.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

AWS EventBridge supports the L modifier in the day-of-month field. To run on the last day of every month at midnight UTC: cron(0 0 L * ? *). The expression has six fields (minute, hour, day-of-month, month, day-of-week, year), the day-of-week is ?, and the year defaults to *.
See the full AWS cron expressions guide for the field-by-field reference, or the cross-library last-day-of-month guide for the equivalent in other schedulers.

AWS cron syntax for last day of the month

  • cron(0 0 L * ? *) - midnight UTC on the last day of every month.
  • cron(0 12 L * ? *) - noon UTC on the last day of every month.
  • cron(0 0 L 12 ? *) - midnight UTC on December 31st only.
  • cron(30 23 L 1,4,7,10 ? *) - quarterly: last day of January, April, July, October at 23:30 UTC.
  • cron(0 9 L * ? 2026) - last day of every month in 2026 only.

AWS CloudFormation example

yaml
Resources:
  MonthEndRule:
    Type: AWS::Events::Rule
    Properties:
      Description: "Run last day of every month at 00:00 UTC"
      ScheduleExpression: "cron(0 0 L * ? *)"
      State: ENABLED
      Targets:
        - Arn: !GetAtt MonthEndLambda.Arn
          Id: MonthEndLambdaTarget


  MonthEndPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref MonthEndLambda
      Action: lambda:InvokeFunction
      Principal: events.amazonaws.com
      SourceArn: !GetAtt MonthEndRule.Arn

AWS CDK example

ts
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';


new events.Rule(this, 'MonthEndRule', {
  schedule: events.Schedule.expression('cron(0 0 L * ? *)'),
  targets: [new targets.LambdaFunction(monthEndLambda)],
});

For the newer EventBridge Scheduler with timezone support:

ts
import * as scheduler from 'aws-cdk-lib/aws-scheduler';


new scheduler.CfnSchedule(this, 'MonthEndSchedule', {
  scheduleExpression: 'cron(0 0 L * ? *)',
  scheduleExpressionTimezone: 'America/New_York',
  flexibleTimeWindow: { mode: 'OFF' },
  target: { arn: monthEndLambda.functionArn, roleArn: schedulerRole.roleArn },
});

AWS-specific pitfalls

  • Always six fields - AWS rejects 5-field expressions. Even cron(0 0 L * ?) is invalid; you need the trailing year (* for any).
  • Always wrap in `cron(...)` - bare cron strings are not accepted.
  • UTC by default - EventBridge Rules are UTC-only. Use EventBridge Scheduler if you need a specific timezone.
  • Latency tolerance - EventBridge guarantees fire-within-a-minute; for tighter SLAs, use Step Functions Wait states or a longer-running daemon.

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

Syntax

Why is the ? required in AWS cron?

AWS EventBridge follows the Quartz convention: you cannot specify both day-of-month and day-of-week as values. Exactly one must be ? (no specific value). When you constrain day-of-month with L, the day-of-week field must be ?.

Day-field rules
Do I include cron(...) in the CronTool expression field?

No. Enter the bare six-field value 0 0 L * ? * in the editor, then wrap it as cron(0 0 L * ? *) in AWS configuration. Expression: 0 0 L * ? *

Open in editor
AWS syntax guide

Timing

What AWS cron runs at midnight on the last day of each month?

Use cron(0 0 L * ? *). EventBridge reads this as minute 0, hour 0, last day of month, every month, unspecified weekday, every year. Expression: 0 0 L * ? *

Open in editor
AWS month-end examples
What AWS cron runs at noon on the last day of each month?

Use cron(0 12 L * ? *). The hour field is 12 and L selects the final calendar day. Expression: 0 12 L * ? *

Open in editor
AWS month-end examples

Days and months

Does AWS EventBridge support the L modifier for last day of the month?

Yes. AWS EventBridge cron expressions accept L in the day-of-month field. Use cron(0 0 L * ? *) for midnight UTC on the last day of every month. AWS cron has 6 fields (minute, hour, day-of-month, month, day-of-week, year) - note the year field is required. Expression: 0 0 L * ? *

Open in editor
L operator reference
Does AWS support LW (last weekday)?

AWS supports W with a numbered day, such as 15W, but does not document the combined LW token. For the last weekday, run daily and execute only when the next Monday-to-Friday date falls in the next month.

Operator matrix
How do I run AWS cron on selected month-end dates?

Use a month list, such as cron(30 23 L 3,6,9,12 ? *) for 23:30 on the last day of each calendar quarter. Expression: 30 23 L 3,6,9,12 ? *

Open in editor
List and L operators
Can AWS limit a last-day schedule to one year?

Yes. Use cron(0 9 L * ? 2027) for 09:00 on each month's last day during 2027 only. Expression: 0 9 L * ? 2027

Open in editor
Year field reference
Does AWS L mean the last calendar day or business day?

L in day-of-month means the final calendar day, including weekends. A business-day requirement needs a supported weekday rule or a runtime date check.

Last-day rules

Timezones and DST

What timezone does AWS EventBridge cron use?

By default, all cron expressions run in UTC. To run in a specific timezone, use the EventBridge Scheduler (newer service) which accepts a ScheduleExpressionTimezone parameter. Older EventBridge Rules are UTC-only - you have to convert your local time to UTC manually.

Timezone reference
How do I run AWS month-end in a local timezone?

Use EventBridge Scheduler and set ScheduleExpressionTimezone to an IANA zone. Keep cron(0 0 L * ? *) to mean local midnight in that configured zone. Expression: 0 0 L * ? *

Open in editor
Timezone reference

Platforms

What's the difference between EventBridge Rules and EventBridge Scheduler?

Both support L, but EventBridge Rules evaluate recurring month-end schedules in UTC. Use EventBridge Scheduler when month-end must follow an IANA timezone or needs configurable retries and delivery controls.

AWS cron guide

Debugging

Why is my AWS last-day cron rejected as five fields?

EventBridge requires a sixth year field. Change 0 0 L * ? to cron(0 0 L * ? *), where the trailing * means every year.

AWS field reference
Why does AWS reject cron(0 0 L * * *)?

Both day fields are specified. Replace day-of-week * with ?: cron(0 0 L * ? *). Expression: 0 0 L * ? *

Open in editor
AWS day-field rules

Crontap

Can Crontap call an API at month-end?

Yes. Use the equivalent validated month-end expression, choose an IANA timezone, and configure the HTTP endpoint Crontap should call.

Schedule API calls

Write the cron here. Run it on Crontap.

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

1.9k+ teams · Free forever tier · No credit card