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
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 *.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
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.ArnAWS CDK example
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:
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-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-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 ?.
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 * ? *
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 * ? *
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 * ? *
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 * ? *
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.
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 ? *
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
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.
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.
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 * ? *
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.
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.
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 * ? *
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 callsWrite 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