Расписание AWS-Lambda с триггерами Java и CloudWatch - PullRequest
0 голосов
/ 01 февраля 2019

Я новичок в AWS и AWS-Lambdas.Я должен создать лямбда-функцию для запуска задания cron каждые 10 минут.Я планирую добавить триггер Cloudwatch, чтобы запускать его каждые 10 минут, но без каких-либо событий.Я посмотрел в интернете и обнаружил, что для его запуска нужно провести какое-то мероприятие.

Мне нужно получить некоторую ясность и привести по двум пунктам ниже:

  • Могу ли я запланировать работу с помощью AWS-Lambda, при этом облачные часы запускают ее в течение 10 минут без каких-либо событий.
  • Как заставить его взаимодействовать с базами данных MySQL, размещенными на AWS.

У меня есть приложение, построенное на SpringBoot, работающее в нескольких экземплярах с общей базой данных (единственный источник правды).Я разработал все изложенное выше, используя встроенный планировщик Spring и правильную синхронизацию на уровне БД с использованием блокировок, но из-за распределенной природы экземпляров мне посоветовали сделать то же самое с помощью лямбд.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам необходимо передать объект ScheduledEvent в handleRequest () лямбды.

handleRequest (событие ScheduledEvent, контекст Contex)

Сконфигурировать запускаемое задание cronкаждые 10 минут в вашем шаблоне cloudwatch (если используется cloudformation).Это обеспечит запуск вашей лямбды через каждые 10 минут.

Обязательно добавьте нижеприведенную зависимость к вашему пом.шаблон.Это не потребует передачи какого-либо аргумента в ваш обработчик (), если вам не требуется информация, связанная с событием.Это автоматически активирует лямбду в соответствии с заданием cron.

"ScheduledRule": {
        "Type": "AWS::Events::Rule",
        "Properties": {
            "Description": "ScheduledRule",
            "ScheduleExpression": {
                "Fn::Join": [
                    "",
                    [
                        "cron(",
                        {
                            "Ref": "ScheduleCronExpression"
                        },
                        ")"
                    ]
                ]
            },
            "State": "ENABLED",
            "Targets": [
                {
                    "Arn": {
                        "Fn::GetAtt": [
                            "LAMBDANAME",
                            "Arn"
                        ]
                    },
                    "Id": "TargetFunctionV1"
                }
            ]
        }
    },
    "PermissionForEventsToInvokeLambdaFunction": {
        "Type": "AWS::Lambda::Permission",
        "Properties": {
            "FunctionName": {
                "Ref": "NAME"
            },
            "Action": "lambda:InvokeFunction",
            "Principal": "events.amazonaws.com",
            "SourceArn": {
                "Fn::GetAtt": [
                    "ScheduledRule",
                    "Arn"
                ]
            }
        }
    }
}
0 голосов
/ 01 февраля 2019
  • Если вы хотите запустить событие cronjob из cloudwatch, это единственный вариант.
  • Если вы не хотите использовать события cloudwatch, переходите к экземпляру EC2.Но EC2 обойдется вам дороже, чем событие cloudwatch.

Примечание: Шаг правила событий Cloudwatch аналогичен определению cronjob в crontab в любой системе Linux, и ничего особенного.В linux serevr вы будете определять все как RAW, но здесь это только на основе пользовательского интерфейса.

...