Invoke AWS Lambda function only once, at a single specified future time

前端 未结 6 1478
无人共我
无人共我 2020-12-29 07:12

I want to be able to set a time to invoke an AWS Lambda function, then have that function be invoked then and only then. For example, I want my Lambda function to run at 9:0

相关标签:
6条回答
  • 2020-12-29 07:46

    You can schedule a step function which can wait until a specific point in time before invoking the lambda with an arbitrary payload.

    https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html

    Something like this

    const stepFunctions = new AWS.StepFunctions()
    const payload = {
        stateMachineArn: process.env.SCHEDULED_LAMBDA_SF_ARN,
        name: `${base64.encode(email)}-${base64.encode(timestamp)}`, // Dedupe key
        input: JSON.stringify({
          timestamp,
          lambdaName: 'myLambdaName',
          lambdaPayload: {
            email,
            initiatedBy
          },
        }),
      }
    await stepFunctions.startExecution(payload).promise()
    
    0 讨论(0)
  • 2020-12-29 07:49

    I understand its quite late to answer this question. But anyone who wants to use CRON expression to trigger an event(or call an API) only once can use following example:

    This event will be triggered only once on January 1, 2025 - 12:00:00 GMT

    00 12 01 01 ? 2025
    

    For those who do not have much knowledge of cron syntax:

    Minutes Hours DayOfMonth Month DayOfWeek Year
    

    I am using this with AWS Cloudwatch Events and the result looks like this:

    Note: I did not have to specify Day of week, since I have given it a fixed date and thats obvious.

    0 讨论(0)
  • 2020-12-29 08:02

    If anyone gets here to trigger an event in a specific time and with specific data in the future, I found this very very helpful!!!

    https://dev.to/byrro/how-to-schedule-any-task-with-aws-lambda-3617

    0 讨论(0)
  • 2020-12-29 08:02

    Invoking a lambda function via Events is asynchronous invocation option. By using CloudWatchEvent to trigger Lambda function we can use cron job but we are still facing issues as Lambda function triggered multiple times for the same cron schedule.PFB Link: https://cloudonaut.io/your-lambda-function-might-execute-twice-deal-with-it/

    But this needs Dynamo DB to be implemented in your account and then make your Lambda function Idempotent.

    0 讨论(0)
  • 2020-12-29 08:05

    You can use DynamoDB TTL feature to implement this easily, simply do the following:

    1- Put item with TTL, the exact time you want to execute or invoke a lambda function.

    2- Configure DynamoDB Streams to trigger a lambda function on item's remove event.

    Once the item/record is about to expire, your lambda will be invoked. you don't have to delete or cleanup anything as the item in dynamodb is already gone.

    NOTE: However the approach is easy to implement and scales very well, but there's one precaution to mention; using DynamoDB TTL as a scheduling mechanism cannot guarantee exact time precision as there might be a delay. The scheduled tasks are executed couple of minutes behind.

    0 讨论(0)
  • 2020-12-29 08:10

    You can schedule lambda event using following syntax:

    cron(Minutes Hours Day-of-month Month Day-of-week Year)

    Note: All fields are required and time zone is UTC only

    Please refer this AWS Documentation for Details.

    Thanks

    0 讨论(0)
提交回复
热议问题