amazon-web-servicescron-taskaws-lambda

AWS Lambda Scheduled Tasks


Amazon announced AWS Lambda (http://aws.amazon.com/lambda/).

The product description includes:

Scheduled Tasks

AWS Lambda functions can be triggered by external event timers, so functions can be run during regularly scheduled maintenance times or non-peak hours. For example, you can trigger an AWS Lambda function to perform nightly archive cleanups during non-busy hours.

When I read this, I understood I could finally have a way to consistently do "cron-like" tasks. I want to run a specific query everyday at 5PM let's say.

However I do not find this anywhere in the documentation. They only mention triggers on programatical events, or events from other AWS services.

Did I misunderstand? Or can someone point me to the documentation?


Solution

  • Native Support for Scheduled Events added October 8, 2015:

    As announced in this AWS blog post, scheduling is now supported as an event source type (also called triggers) called "CloudWatch Events - Schedule", and can be expressed as a rate or a cron expression.

    Add Scheduled Event to a new lambda

    Navigate to the 'Configure triggers' step of creation, and specify the 'CloudWatch Event - Schedule' trigger. Example configuration below:

    Image that shows configuration for creating a scheduled event at 5pm UTC.

    Add Scheduled Event to an existing lambda

    Navigate to the 'Triggers' tab of your lambda, select 'Add Trigger', and specify the 'CloudWatch Event - Schedule' trigger. Example screenshot where I have an existing lambda with an SNS trigger:

    Image that shows how to navigate to add trigger UI from Lambda console.

    Once loaded, the UI to configure this trigger is identical to the screenshot in the above "Add Scheduled Event to a new lambda" section above.

    Discussion

    For your example case, you'll want to use cron() instead of rate(). Cron expressions in lambda require all fields and are expressed in UTC. So to run a function every day at 5pm (UTC), use the following cron expression:

    cron(0 17 * * ? *)
    

    Further Resources

    Notes