Faizuddin Mohammed
Faizuddin Mohammed

Reputation: 4328

How to trigger a Lambda function at specific time in AWS?

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

Answers (5)

Kushan Gunasekera
Kushan Gunasekera

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.

enter image description here

In the target section, you can select 35 AWS Lambda function options.

enter image description here

Upvotes: 1

beckersense
beckersense

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:

enter image description here

  1. The step function workflow is triggered by some event (e.g. http request) and supplied with a due date.
  2. The workflow starts and goes immediately in the 'WaitTillScheduled' State which only continues when the due date is over.
  3. The next state is an 'ActionEvent' which triggers the Lambda function that you want to execute. Finished.

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

BrettKennard
BrettKennard

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.

enter image description here

Reference: https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html

Upvotes: 18

abiydv
abiydv

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

Ben Yitzhaki
Ben Yitzhaki

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

Related Questions