Расписание лямбда-функции один раз в день - PullRequest
1 голос
/ 08 мая 2019

У меня есть шаблон облачной информации, который работает как положено. Устанавливает лямбда-функцию Python.

https://github.com/shantanuo/easyboto/blob/master/install_lambda.txt

Но как мне запускать функцию один раз в день? Я знаю, что yaml-код будет выглядеть примерно так ...

  NotifierLambdaScheduledRule:
    Type: AWS::Events::Rule
    Properties:
      Name: 'notifier-scheduled-rule'
      Description: 'Triggers notifier lambda once per day'
      ScheduleExpression: cron(0 7 ? * * *)
      State: ENABLED

Другими словами, как интегрировать настройку cron в шаблон облачной информации?

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Пример, который я использую:

  # Cronjobs
  ## Create your Lambda
  CronjobsFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: FUNCTION_NAME
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        S3Bucket: !Sub ${S3BucketName}
        S3Key: !Sub ${LambdasFileName}
      Runtime: nodejs8.10
      MemorySize: 512
      Timeout: 300

  ## Create schedule
  CronjobsScheduledRule:
    Type: AWS::Events::Rule
    Properties:
      Description: Scheduled Rule
      ScheduleExpression: cron(0 7 ? * * *)
      # ScheduleExpression: rate(1 day)
      State: ENABLED
      Targets:
        - Arn: !GetAtt CronjobsFunction.Arn
          Id: TargetFunctionV1

  ## Grant permission to Events trigger Lambda
  PermissionForEventsToInvokeCronjobsFunction:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref CronjobsFunction
      Action: lambda:InvokeFunction
      Principal: events.amazonaws.com
      SourceArn: !GetAtt CronjobsScheduledRule.Arn

  ## Create Logs to check if events are working
  CronjobsFunctionLogsGroup:
    Type: AWS::Logs::LogGroup
    DependsOn: CronjobsFunction
    DeletionPolicy: Delete
    Properties:
      LogGroupName: !Join ['/', ['/aws/lambda', !Ref CronjobsFunction]]
      RetentionInDays: 14

Вы можете узнать о выражениях Cron и Cron здесь .

0 голосов
/ 08 мая 2019

Другие могут предоставить вам рабочий пример с Lambda без Serverless. Но если вы используете бессерверное преобразование с AWS Cloudformation (в основном SAM - модель безсерверного приложения), вы можете довольно легко планировать лямбду.

Например:

  ServerlessTestLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src
      Handler: test-env-var.handler
      Role: !GetAtt BasicLambdaRole.Arn
      Environment:
        Variables:
          Var1: "{{resolve:ssm:/test/ssmparam:3}}"
          Var2: "Whatever You want"
      Events:
        LambdaSchedule:
          Type: Schedule
          Properties:
            Schedule: rate(3 minutes)

Эта лямбда срабатывает каждые 3 минуты.

Дополнительная информация: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#schedule

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...