Reputation: 4328
I am aware of the CloudWatch recurring events that can be used to run Lambda recurringly.. but is there a way that I can trigger it on a certain time and not repeat?
Upvotes: 19
Views: 51582
Reputation: 8556
I think you are looking for a one-time schedule. For that AWS Recently(10-Nov-2022) launched a new service called EventBridge Scheduler. I have already added an answer in the following answer, please have a look.
I copied the following images from my original answer - 1 and answer - 2 to elaborate to answer your question in more detail.
In the target section, you can select 35 AWS Lambda function options.
Upvotes: 1
Reputation: 484
You can also use AWS Step Functions for that. It is especially useful when you want to programmatically control the execution time of events. There is also no need for polling because you schedule the function to execute at a specific point in time.
The following graphic shows how it works:
For those that are using the serverless framework an example for a step function definition looks like this:
stepFunctions:
validate: true
stateMachines:
scheduler:
name: exampleScheduler
definition:
Comment: "Description of Step Function"
StartAt: WaitTillScheduled
States:
WaitTillScheduled:
Type: Wait
TimestampPath: "$.dueDate"
Next: ActionEvent
ActionEvent:
Type: Task
Resource:
Fn::GetAtt: [schedulerExecution, Arn]
End: true
The dueDate
is passed to the step function and the schedulerExecution
is the Lambda function that executes at a certain point in time.
Big credit to Ryan Dsilva. He wrote an article about this which explains everything in detail: https://levelup.gitconnected.com/trigger-events-at-a-specific-timestamp-2527f9336128
Upvotes: 10
Reputation: 191
Using cloud watch rules - a single non-repetitive date can be assigned.
Example cron : 0 10 16 6 ? 2019 min hours day month dayOfWeek year
This will execute once on Sun, 16 Jun 2019 10:00:00 GMT as an example.
Reference: https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html
Upvotes: 18
Reputation: 621
You will need to make use of cloudwatch event rules. Lambda can be triggered from the rule based on the cron expression you provide. This AWS tutorial will walk you through the setup.
Upvotes: 3
Reputation: 1416
you can provide to it a cron expression or rate. what you are looking for is the cron expression option that will let you to say when exactly to run. more info - https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html
if you want to run it once, manually, you can always trigger it with the "test" button at the top of the page. you can really be creative here, for example, you can even trigger it with an http request that will allow you to integrate it to whatever you want, super easily (Invoke a AWS Lambda function by a http request)
Upvotes: 13